An open API service indexing awesome lists of open source software.

https://github.com/deemp/haskell-roadmap


https://github.com/deemp/haskell-roadmap

Last synced: 5 months ago
JSON representation

Awesome Lists containing this project

README

          

# Haskell roadmap

Connections between topics in Haskell.

An arrow from a node `A` to a node `B` means `A` is a prerequisite of `B`.

Novices start at `Zero`.

```mermaid
%% Links can be added via

graph TB
zero["`Zero`"]
subgraph tools["`Tools`"]
_tools[
Required:
- ghc (also provides ghci, ghc-pkg)
Optional:
- ghcid
- cabal
- stack (not well_maintained)
- hpack
- haskell-language-server
- implicit_hie
- nix
- VSCode (extensions haskell.haskell,
visortelle.haskell-spotlight)
- hoogle
- hackage
]

style _tools text_align:left
end

subgraph basic_types["`Basic Types`"]
_basic_types[
- String
- Int
- Char
- [] (List)
- (,) (Tuple)
]
style _basic_types text_align:left
end

subgraph function["`Functions`"]
_function[
- lambda expressions
- pattern matching
- ViewPatterns
- let .. in ..
- guards
- currying
- composition
- higher-order function
- arity
]
style _function text_align:left
end

subgraph algebraic_data_type["`Algebraic Data Type (ADT)`"]
_algebraic_data_type[
- data
- newtype
- record syntax
- recursive data types
- OverloadedRecordDot
- NoFieldSelectors
- DataKinds
- RecordWildCards
]
style _algebraic_data_type text_align:left
end

subgraph functor[Functor]
_functor[
- DeriveFunctor
]
style _functor text_align:left
end

subgraph applicative[Applicative]
_applicative[
- optparse-applicative
- ApplicativeDo
- QualifiedDo
]
style _applicative text_align:left
end

subgraph monad["`Monad`"]
_monad[
- IO, [], Either, Maybe, Identity
- Reader, Writer, State, ST, Cont
]
style _monad text_align:left
end

subgraph generalized_algebraic_data_type["`GADT (Generalized ADT) `"]
_generalized_algebraic_data_type[
- record syntax
]
style _generalized_algebraic_data_type text_align:left
end

subgraph type_family["`Type Family`"]
_type_family[
- open
- closed
- higher-order data
]
style _type_family text_align:left
end

data_family["`Data Family`"]

associated_type_family["`Associated Type Family`"]
associated_data_family["`Associated Data Family`"]

subgraph type_class["`Type Class`"]
_type_class[
- forall
- type variable
- kind
- type synonym
- Typeclassopedia
- TypeOperators
- ScopedTypeVariables
- TypeApplications
- Proxy
- PolyKinds
- DerivingStrategies
- DerivingVia
- AllowAmbiguousTypes
]
end

template_haskell["`Template Haskell`"]

subgraph lens[lens]
_lens[
- Optics by Example
- generic-lens
]
style _lens text_align:left
end

subgraph readert[ReaderT pattern]
_readert[
- UnliftIO
- MonadBaseControl
]
style _readert text_align:left
end

subgraph generics["`Generics`"]
_generics[
- GHC.Generics
]
end

subgraph monad_transformer["`Monad transformer`"]
_monad_transformer[
- mtl
- transformers
- ConT
]
style _monad_transformer text_align:left
end

subgraph type_level_parsing["`Type-level parsing`"]
_type_level_parsing[
- GHC.TypeLits
- first-class-families
]
style _type_level_parsing text_align:left
end

subgraph concurrency["`Concurrency`"]
_concurrency[
- Parallel and Concurrent Haskell
%% - exceptions
]
end

subgraph aeson[aeson]
_aeson[
- yaml
- lens-aeson
]
end

subgraph foldable[Foldable]
_foldable[
- Data.Foldable
]
end
%% testing
%% books
%% cps
%% contramap
%% profunctor
%% tagged instances
subgraph monoid[Monoid]
_monoid[
- Sum
- Product
- a -> a
]
end
traversable[Traversable]
effectful[effectful]
servant[servant]
esqueleto[esqueleto]
crud[Some decent CRUD]

zero --> basic_types

basic_types --> function

function --> algebraic_data_type

type_class --> generalized_algebraic_data_type
type_class --> type_family
type_class --> functor
type_class --> monoid

algebraic_data_type --> type_class

functor --> applicative

applicative --> monad
applicative --> traversable

generalized_algebraic_data_type --> data_family

type_family --> associated_type_family
type_family --> type_level_parsing

data_family --> associated_data_family

monad --> template_haskell
monad --> concurrency
monad --> monad_transformer
monad --> lens

associated_type_family --> generics
associated_data_family --> generics

concurrency --> readert
monad_transformer --> readert

generalized_algebraic_data_type --> effectful
readert --> effectful

monoid --> foldable
foldable --> traversable
traversable --> lens

lens --> aeson

monad_transformer --> servant
generics --> servant

template_haskell --> esqueleto
esqueleto --> crud
servant --> crud
effectful --> crud
aeson --> crud

type_level_parsing --> generics
```