- Cabal
- Starting a new project
- Sandboxes
- Creating
- Deleting
- Adding dependencies
- Installing dependencies
- Adding one or more test suites
- Unit tests
- Property-based tests
- Linting
- Benchmarking
- Adding modules
- Creating libraries
- Creating executables
- Starting a REPL
- Building the library/executable
- Running the executables
- Running tests
- Adding GHC options
~/.cabal
vs~/.ghc
ghc-pkg
- GHC
- Deferring type errors
- Showing warnings
- GHCi
- Importing modules
- Reloading code
- Loading files
:type
/:t
:info
/:i
:kind
/:k
- Declaring functions
- Declaring multiline functions
- Hackage
- Finding libraries
- Reading documentation
- Hoogle
- Finding functions
- Stackage
- Type signatures
- Calling functions
- Defining functions
- Pattern matching
- Modules
- Importing
- Exporting functions
- Exporting modules
$
if
/then
/else
let
/in
where
case
/of
data
- Record syntax
deriving
!
type
newtype
- Record syntax
deriving
do
let
- Equational reasoning
- Laziness
- Parametricity
- Total functions
- Value constructors
- Type constructors
- Sum types
- Product types
- Type classes
- Type constraints
- Type kinds
- Currying
- Function currying
- Type currying
- Semigroup
Monoid
Functor
Applicative
Alternative
Monads
- Monad transformers
- Free monads
- Error handling
Maybe
Either
error
Text
List
Maybe
Either
IO
Reader
/ReaderT
hspec
hunit
QuickCheck
hlint
text
aeson
scotty
operational
postgresql-simple
lens
validation