Skip to content

Instantly share code, notes, and snippets.

@JonathanLorimer
Created June 13, 2021 17:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JonathanLorimer/ea19fd0a2df4dc3f10b4f8011d78045d to your computer and use it in GitHub Desktop.
Save JonathanLorimer/ea19fd0a2df4dc3f10b4f8011d78045d to your computer and use it in GitHub Desktop.
Cabal User Guide
- Old Cabal User Guide
- Section 1
- `cabal init` & `cabal run`
- Adding dependencies to a cabal file
- Relationship of `Main.hs` to `cabal run`
- Section 2
- `cabal install` command
- Local
- Hackage
- Tarballs
- Difference between `library` `executable` `tests`
- What is a `.cabal` file
- What is a `Setup.hs` file
- Section 3
- Configuration for `cabal-install` & `cabal update` command
- Section 4
- Setting up a cabal project manually
- Setting up a cabal project with `cabal init --interactive`
- Explanation of `libraries` vs `executables`
- Exposed modules for libraries
- Main module for executables
- Other modules
- Build depends
- Constraint bounds
- Common stanza
- Building a package with `configure` `build` and `install`
- Philosophical discussion of the point of packages
- Discussion of naming and versioning
- Cabal vs ghc vs OS package
- Section 5
- V2 commands
- cabal.project files
- Profiling
- External vs Local packages
- Where do the build products end up?
- What gets cached?
- Section 6
- Cabal command reference (not relevant for a user guide)
- Section 7
- Creating a package (greater detail)
- Package properties
- Reference for .cabal stanzas
- Notable tests and benchmarks (which should have a user guide component)
- Foreign libraries
- Build information
- Deeper dive into version bounds
- Common stanzas
- Custom setup
- Accessing data files
- Section 8
- cabal.project reference (should include cabal.project in user guide, but make it less reference-y)
- Section 9
- Setup.hs reference
- Section 10 / 11
- Field syntax reference
- Report bug reference
- Section 12
- Nix interop
- Kowainik Tutorial
- Discussion of overloaded term `cabal`
- `cabal-install`
- `.cabal` files
- `Cabal` library
- How to install `cabal-install`
- `cabal init` and `summoner` for getting started
- Cabal project structure
- Building a project
- Adding a dependency
- Cabal repl
- Adding an executable
- Haskell School
- Clarifying the term cabal
- Clarifying the terms `module` `library` `package` `executable` `project`
- Installing and updating cabal
- Creating a new project
- Briefly mentions setup.hs
- Covers .cabal file
- Building and running executables
- Adding dependencies to the `myproject.cabal` file
- Shows version bounds errors (this is a good idea)
- Having a project with a lib and executable
- Module visibility (exposed vs other modules)
- Multiple ghc versions using cabal.project
- Historical Notes
- Cabal Hell
- Cabal Sandbox
- Command Prefixes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment