# Haskell Learning Path This note links the Haskell examples in a suggested order from first project structure through intermediate language and application patterns. --- ## 1. Suggested Order 1. `05-haskell/`: a small Cabal library, executable, test suite, and dev shell 2. `06-haskell-shellfor/`: a Haskell package set override and a `shellFor`-based dev shell 3. `07-haskell-deps/`: external Haskell libraries through Cabal `build-depends` 4. `08-haskell-adt/`: algebraic data types, records, and pattern matching 5. `09-haskell-newtype/`: `newtype`, smart constructors, and validation 6. `10-haskell-effects/`: `ReaderT`, `Except`, and constrained application logic 7. `11-haskell-typeclasses/`: custom type classes and per-type instances 8. `12-haskell-parser-combinators/`: parser combinators with Megaparsec --- ## 2. What to Focus on at Each Step - `05-haskell/`: how a Cabal package becomes a flake package, app, dev shell, and check - `06-haskell-shellfor/`: when a Haskell-specific dev shell is more useful than a generic shell - `07-haskell-deps/`: why Cabal stays the source of truth for package dependencies - `08-haskell-adt/`: how to model a problem with constructors before writing behavior - `09-haskell-newtype/`: how to move validation to the boundary and protect the domain model - `10-haskell-effects/`: how to separate configuration, logic, and failures - `11-haskell-typeclasses/`: how to abstract shared behavior across several types - `12-haskell-parser-combinators/`: how to build a small language from reusable parser pieces --- ## 3. Related Notes - `notes/007-haskell.md` - `notes/008-haskell-shellfor.md` - `notes/009-haskell-dependencies.md` - `notes/010-haskell-adts.md` - `notes/011-haskell-newtypes.md` - `notes/012-haskell-effects.md` - `notes/013-haskell-typeclasses.md` - `notes/015-haskell-parser-combinators.md`