Haskell Curated
This is a curated list of various Haskell resources.
Haskell Courses & Projects
- Haskell Programming - Dalhousie University
- Honors Introduction to Programming, I - U Chicago
- Haskell Projects
- Ninety-Nine Haskell Problems
- Why you should use Software Transactional Memory
- Haskell in Haskell
- asarkar/99-haskell
- asarkar/hackerrank-fp-haskell
- chungyc/ninetynine
- happytree718/Solutions-to-Ninety-Nine-Haskell-Problems
- Fast Sudoku Solver in Haskell
- The Knights Tour
- chiroptical/book-of-monads
- JonathanLorimer/book-of-monads
- chiroptical/thinking-with-types
- chiroptical/optics-by-example
- alakahakai/hackerrank
- randomir/HackerRank
- DKurilo/hackerrank
Tools
- How to install Haskell on Mac OS
- The Haskell Tool Stack
- GHC Warnings
- Structuring your first Haskell project with Stack
- Ormolu
- pointfree.io
- GHCi multiline-input
- GHCi search path
Language
- https://www.haskell.org/documentation/
- Haskell Cheat Sheet
- case
- Haskell/Control structures
- Let vs. Where
- case expression in a do block
- Some deep nested indentation
- let with guards
- case within let indentation
- Guard within case
- Haskell Proposal: Simplify Deriving
- Deriving Via
- Smart Constructors
- List comprehension
- 24 Days of GHC Extensions
- Functional Dependencies
- Strategic Deriving
- Learn From Errors: Overlapping Instances
- PatternSynonyms
- View Patterns in GHC
- Record constructors
- Distinction between typeclasses MonadPlus, Alternative, and Monoid?
- Sections
Also see “Programming in Haskell” by Graham Hutton, section 4.6.
General
- Category Theory for Programmers
- Journal of Functional Programming
- Time Traveling In Haskell
- graninas/software-design-in-haskell
- 4 Steps to a Better Imports List in Haskell
- Functional Programming in Haskell
- Advanced Functional Programming in Haskell
- Kowainik Blog
- GADTs for dummies
- Learn Haskell
- Serokell Blog
- DevTut
- Random Hacks
- Roman Cheplyaka Blog
- FPComplete
- Artyom’s tech notes
- Monadfix Blog
- Donnacha Oisin Kidney
- Carlo Hamalainen Blog
- Advent of Haskell
- Haskell for Imperative Programmers
- Kwang’s Haskell Blog
- Ollie Charles Blog
- BNF
- Haskell for all
- Code & Co.
- Ben Clifford Blog
- Haskell Programming
- Why Functional Programming Matters
- William Yao Blog
- Safely Typed
- Ziyang Liu Blog
- Sandy Maguire Blog
- Twan van Laarhoven’s blog
Math
- dmp1ce/haskell-examples
- Random shuffle
- A Very Simple Prime Sieve in Haskell
- The Genuine Sieve of Eratosthenes
- Prime numbers
- Difference between quotRem and divMod?
Monads
- The State Monad: A Tutorial for the Confused?
- State Monad
- State Monad Comes To Help Sequential Pattern Matching
- A Simple Reader Monad Example
- Monads in 15 minutes: Backtracking and Maybe
- Haskell/Understanding monads/State
- State Monad
- Difference between State, ST, IORef, and MVar
- Reader and Writer Monads
- Writer monad
- Introduction to Free Monads
- Monads in Haskell and other languages
- Mutable State in Haskell
- Haskell Monad Basic
- adamwespiser/FSM.hs
- Finite State Machines? Your compiler wants in!
- Free Monoids and Free Monads, Free of Category Theory
- Typed Tagless Final Interpreters
- Finally Tagless, Partially Evaluated
- Free monad considered harmful
- Introduction to Tagless Final
- Tagless-final style
- Initial and Final Encodings
- TicTacToe in Operational Monad style
Monad Transformers
- Monad Transformers Step by Step
- Monad Transformers
- Monad Transformers - Dalhousie University
- Monad Transformers 101
- Note to self: reader monad transformer
- ReaderT WriterT Monad Transformer Stack in Haskell
- Haskell: State and StateT examples
- Simple StateT use
- Monad Transformers
- Monad transformers, free monads, mtl, laws and a new approach
- The ReaderT Design Pattern
- Capability: The ReaderT Pattern Without The Boilerplate
- mtl is Not a Monad Transformer Library
- Breaking from a loop
Monadic Parsing
- Monday Morning Haskell
- Megaparsec tutorial
- Parser Combinators in Haskell
- Beginner’s guide to Megaparsec
- Exploring parser combinators
- Using Megaparsec on the WHILE Language
- Megaparsec basics
- Megaparsec
- Pragmatic Haskell for Beginners, Lecture 1
- Monadic parsing in Haskell
- Revisiting ‘Monadic Parsing in Haskell’
- Monadic parser combinators in Haskell
- Simple Monadic Parser in Haskell
- Hello World in Brainfuck
- Parsing arithmetic expressions with Parsec
- Write a Forth in Haskell
Arrows
- Programming with Arrows
- Generalising monads to arrows
- Haskell for Imperative Programmers #37 - Arrows
- Arrow tutorial
- Practical Arrow Usage
- How to use Haskell arrows
- Working with Arrows in Scala
- Experiments with Arrows
- Haskell/Understanding arrows
- Arrows Zoo
Arrays
Lists
Zippers
- The Zipper
- Zippers
- Zippers and Comonads in Haskell
- Zippers
- Zipping Trees
- A Note Of Caution On Zippers
- Zipper Tree Examples
- Zippers
Lenses
- Lenses
- Haskell state of the Lens
- Lens
- Haskell: Another Lens Tutorial
- Taking a Close look at Lenses
- Basic optics: lenses, prisms, and traversals in Haskell
- Exercises For Understanding Lenses
- A Little Lens Starter Tutorial
- Lenses
- Lenses, Folds, and Traversals
- Lens - Exploring and Learning
Trees & Graphs
- Competitive programming in Haskell: BFS, part 3
- Breadth First Search in Haskell
- Breadth-First Numbering
- An instance of Foldable for a binary tree
- Puzzle solving in Haskell
- Generalizing Tree Traversal in Haskell with Typeclass
- Depth-first and breadth-first search in Haskell
- Graph Algorithms in a Lazy Functional Programming Language
- Structuring Depth-First Search Algorithms in Haskell
- Modular Lazy Search for Constraint Satisfaction Problems
- Reinventing Haskell Backtracking - Fischer
- sebfisch/level-monad
- Algebras for Weighted Search
- Kruskal’s MST in Haskell
- Knuth-Morris-Pratt in Haskell
- StackOverflow Explanation of TVL’s KMP Implementation
- Knuth–Morris–Pratt Illustrated
Logic & Continuations
- Adventures in Three Monads
- Backtracking, Interleaving, and Terminating Monad Transformers
- Logic and Continuations
- Logic does not commute!
- Examining Hackage: logict
- Why Continuation-Passing Style Works, and the Cont Monad
- Continuations - Dalhousie University
- Why would you use ContT?
- Haskell/Continuation passing style
- A Gentle Run-through of Continuation Passing Style and Its Use Cases
- Breaking from a Loop with ContT
Date/Time
- A Cheatsheet To The Time Library
- Quick guide to basic Date/Time operations in Haskell
- A Haskell Time Library Tutorial
Concurrency/Parallelism
- Beautiful concurrency
- A Tutorial on Parallel and Concurrent Programming in Haskell
- A tutorial on Parallel Strategies in Haskell
- The Par Monad for parallel Haskell programming: a tutorial
- Explicit speculative parallelism for Haskell’s Par monad
- stm: Software Transactional Memory
Testing
- QuickCheck: Type-directed Property Testing
- Property Testing using QuickCheck
- QuickCheck: Pomona College
- QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs
- Practical Property Testing in Haskell
- QuickCheck and Magic of Testing
- The Design and Use of QuickCheck
- Write you some QuickCheck
- Testing Monadic Code with QuickCheck
- Verifying Typeclass Laws in Haskell with QuickCheck
- QuickCheck, Hedgehog, Validity
- Hspec Hooks
- An introduction to property-based testing with QuickCheck
Leave a comment