## Tools * 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 ## Basic Syntax * 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` ## Concepts * 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` ## Types * `Text` * `List` * `Maybe` * `Either` * `IO` * `Reader`/`ReaderT` ## Libraries * `hspec` * `hunit` * `QuickCheck` * `hlint` * `text` * `aeson` * `scotty` * `operational` * `postgresql-simple` * `lens` * `validation`