Haskell Basics Flashcards
Haskell Basics Flashcards
15 flashcards covering core Haskell concepts. Tap a card to reveal the answer.
Intuition
Haskell is the language where “if it compiles, it probably works.” Pure functions guarantee that the same inputs always produce the same output, no hidden state, no surprises. Lazy evaluation means expressions are not computed until their results are actually needed, which enables elegant infinite lists but can cause space leaks if you’re not careful. The type system is your compiler-verified documentation.
How to Use These Flashcards
First pass: Go through all 15 cards without rating, just flip and read. This familiarises you with the content and identifies weak areas.
Active recall: Before flipping, try to write the type signature or implementation from memory. Haskell’s type system makes this especially effective, you can verify your mental model against the actual type.
Code practice: After reviewing a card, open GHCi and experiment with the concept. Type inference is your friend, let the compiler check your understanding.
Common Pitfalls
- Lazy evaluation traps: Building a large thunk (unevaluated expression) by accumulating list operations without forcing evaluation, this causes stack overflow on large datasets. Use
foldl'(strict) instead offoldl(lazy). - Infinite types: Writing a function that produces an infinite type (e.g.,
f x = f (f x)), the compiler rejects this because it cannot determine a finite type. - Monad confusion: Trying to use
donotation without understanding that it’s just syntactic sugar for(>>=)and(>>)the monad laws still apply. - Non-exhaustive patterns: Forgetting to handle all cases in a pattern match, the compiler warns about this, but runtime crashes occur if the warning is ignored.
- Type class ambiguity: Writing a function that uses a type class method without a concrete type signature, the compiler cannot determine which instance to use.
Study Tips
- Start with list functions: Master
map, filter, foldrand list comprehensions before tackling monads. These are the building blocks of functional programming in Haskell. - Use
:tin GHCi: Type-check every expression you write. Haskell’s type system is your most powerful debugging tool, if the type does not make sense, the logic is wrong. - Read type signatures backwards: Start from the rightmost type and work left. This reveals the data flow through the function.
- Work through “Learn You a Haskell”: This free online tutorial (learnyouahaskell.com) covers fundamentals through advanced concepts with clear examples and exercises.
- Implement standard functions from scratch: Write your own
map, filter, foldrandzipimplementations. This builds deep understanding of how these functions work.
Cross-References
- Site Home: Main landing page for haskell notes.
- Practice: Practice problems for revision.
Detailed Content
Core Concepts
Worked Examples
Common Mistakes
- Rushing through foundational material
- Not practising problems after reading
- Failing to connect concepts across topics