What You Should Know Now — and What's Next
What You Should Know Now
- Expressions, types, type inference, and reading type signatures
- Functions, currying, sections, composition, and recursion
- Lists, comprehensions, pattern matching, and guards
- Higher-order functions and folds
- Algebraic data types, records,
Maybe, andEither - Type classes, including
Functor,Foldable,Applicative, andMonad - IO with do-notation, laziness, modules, and
Data.Map/Data.Set - cabal projects, testing with HUnit, QuickCheck, and Hspec
- Monad transformers and mtl, concurrency with MVar, STM, and async
- Strictness, profiling, extensions, GADTs, and type families
- Parsing, JSON with aeson, and web APIs with Servant
What Should You Learn Next?
- OCaml — OCaml is a strict, pragmatic functional language with a similar type system and a very fast compiler.
- F# — F# brings ML-style functional programming to .NET, with easy access to its huge library ecosystem.
- Elm — Elm applies Haskell-like ideas to web front ends, with friendly error messages and no runtime exceptions.
- Scala — Scala uses type classes, monads, and effect libraries (Cats, ZIO) on the JVM, where many functional programmers work professionally.
- Type theory — dependently typed languages such as Idris, Agda, and Lean take Haskell's type-level ideas further.
Build Something
Pick a real problem — a command-line tool you would actually use, a small web service, or a parser for a file format you work with — and build it as a cabal project with tests. Publish it on GitHub, ask for feedback on the Haskell Discourse, and read the source of libraries you use: well-written Haskell libraries are some of the best teachers of the language.