5.2 KiB
5.2 KiB
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
05-haskell/: a small Cabal library, executable, test suite, and dev shell06-haskell-shellfor/: a Haskell package set override and ashellFor-based dev shell07-haskell-deps/: external Haskell libraries through Cabalbuild-depends08-haskell-adt/: algebraic data types, records, and pattern matching09-haskell-newtype/:newtype, smart constructors, and validation10-haskell-effects/:ReaderT,Except, and constrained application logic11-haskell-typeclasses/: custom type classes and per-type instances12-haskell-parser-combinators/: parser combinators with Megaparsec23-haskell-maybe-either/: optional values, required-field errors, and layered request validation24-haskell-deriving/: deriving strategies for ordering, enumeration, and wrapper behavior25-haskell-state/: pure stateful planning with global and per-environment counters26-haskell-quickcheck/: property testing for a non-trivial normalization function27-haskell-aeson-roundtrip/: explicit JSON instances and round-trip checks28-haskell-applicative-validation/: accumulated field validation with an Applicative error type29-haskell-foldmap-summary/: monoidal event aggregation with onefoldMappass30-haskell-traverse-resolution/: batch resolution of requests throughtraverse31-haskell-writer-audit/: rollout logging withWriter32-haskell-nonempty-waves/: rollout planning withNonEmpty33-haskell-optparse-cli/: command-line parsing withoptparse-applicative34-haskell-dependency-order/: dependency-ordered planning with cycle checks35-haskell-monad-chaining/: dependent rollout approval with monadicEither36-haskell-map-set-modeling/: access-policy modeling withMapandSet37-haskell-transformer-stack/: composed effects withReaderT,ExceptT, andWriter38-haskell-generic-json/: generic JSON instances with Aeson options
2. What to Focus on at Each Step
05-haskell/: how a Cabal package becomes a flake package, app, dev shell, and check06-haskell-shellfor/: when a Haskell-specific dev shell is more useful than a generic shell07-haskell-deps/: why Cabal stays the source of truth for package dependencies08-haskell-adt/: how to model a problem with constructors before writing behavior09-haskell-newtype/: how to move validation to the boundary and protect the domain model10-haskell-effects/: how to separate configuration, logic, and failures11-haskell-typeclasses/: how to abstract shared behavior across several types12-haskell-parser-combinators/: how to build a small language from reusable parser pieces23-haskell-maybe-either/: how optional fields and validation errors play different roles24-haskell-deriving/: how derived behavior depends on constructor and field layout25-haskell-state/: how to thread evolving planning state without leaving pure code26-haskell-quickcheck/: how to test invariants across many generated inputs27-haskell-aeson-roundtrip/: how to keep domain values and JSON formats aligned28-haskell-applicative-validation/: how to report several field errors without stopping at the first one29-haskell-foldmap-summary/: how to express batch aggregation through monoidal summary fragments30-haskell-traverse-resolution/: how to sequence per-request resolution across a whole batch31-haskell-writer-audit/: how to compute a result while accumulating ordered audit output32-haskell-nonempty-waves/: how to encode “at least one rollout step” in the type33-haskell-optparse-cli/: how to parse a real CLI into typed commands34-haskell-dependency-order/: how to derive a correct deployment order from dependencies35-haskell-monad-chaining/: how to express fail-fast workflows where each step depends on earlier results36-haskell-map-set-modeling/: how to useMapandSetas primary domain structures, not just helpers37-haskell-transformer-stack/: how to combine several effects in one concrete workflow38-haskell-generic-json/: how to reduce JSON boilerplate without giving up a deliberate shape
3. Related Notes
notes/007-haskell.mdnotes/008-haskell-shellfor.mdnotes/009-haskell-dependencies.mdnotes/010-haskell-adts.mdnotes/011-haskell-newtypes.mdnotes/012-haskell-effects.mdnotes/013-haskell-typeclasses.mdnotes/015-haskell-parser-combinators.mdnotes/026-haskell-maybe-and-either.mdnotes/027-haskell-deriving.mdnotes/028-haskell-state.mdnotes/029-haskell-quickcheck.mdnotes/030-haskell-aeson-roundtrip.mdnotes/031-haskell-applicative-validation.mdnotes/032-haskell-foldmap-summary.mdnotes/033-haskell-traverse-resolution.mdnotes/034-haskell-writer-audit.mdnotes/035-haskell-nonempty-waves.mdnotes/036-haskell-optparse-cli.mdnotes/037-haskell-dependency-order.mdnotes/038-haskell-monad-chaining.mdnotes/039-haskell-map-set-modeling.mdnotes/040-haskell-transformer-stack.mdnotes/041-haskell-generic-json.md