From 9fa67dd485ba033c0adfdfe1ef9265a066a2caff Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Mon, 3 Mar 2025 16:02:24 +0100 Subject: haskell/cabal-lib: Include `cabal repl -b` as an alternative --- haskell/cabal-lib.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'haskell/cabal-lib.md') diff --git a/haskell/cabal-lib.md b/haskell/cabal-lib.md index 6b6c7ca..dc3b79e 100644 --- a/haskell/cabal-lib.md +++ b/haskell/cabal-lib.md @@ -1,6 +1,6 @@ ## About `cabal install --lib` -**TL;DR: Don't use it, add the library to your *package-name*.cabal or `package.yaml` instead, or use a [cabal script](https://cabal.readthedocs.io/en/3.10/getting-started.html#run-a-single-file-haskell-script). After you learn more about the downsides, you can reconsider. See the "What to do instead" section below.** +**TL;DR: Don't use it, add the library to your *package-name*.cabal or `package.yaml` instead, or use a [cabal script](https://cabal.readthedocs.io/en/3.10/getting-started.html#run-a-single-file-haskell-script), or use `cabal repl -b`. After you learn more about the downsides, you can reconsider. See the "What to do instead" section below.** --- @@ -150,7 +150,16 @@ Removing the entire store folder for a particular GHC version is safe, however - ## What to do instead -Create a project! +If you just wanted a `ghci` session with some libraries in scope, use e.g. `cabal repl -b parsec -b time`. +(`-b A` is short for `--build-depends=A`.) +This will build those packages, if necessary, and then start a `ghci` session with those packages in scope. + +If you want something slightly more permanent than a single `ghci` session, you can make a _cabal script_. +This allows you to effectively make a self-contained project inside a single Haskell file. +You specify the dependencies in a special comment block at the top of the file. +See [the documentation](https://cabal.readthedocs.io/en/3.10/getting-started.html#run-a-single-file-haskell-script) for more details. + +If you want more than that: create a project! The intended mode of operation of the modern Haskell tooling, that is `cabal` or `stack`, is to always work inside of a _project_. Often, "project" basically means "package", but you can have projects with multiple packages in them (using a `cabal.project` file, see [the docs](https://cabal.readthedocs.io/en/3.10/cabal-project.html)). @@ -169,9 +178,4 @@ You can also add [version bounds](https://cabal.readthedocs.io/en/3.10/cabal-pac (If you want to use `stack` instead of `cabal`, try [their getting started guide](https://docs.haskellstack.org/en/stable/GUIDE/).) - -### An even lighter-weight alternative - -An alternative to creating a project is to make a _cabal script_: this allows you to effectively make a self-contained project inside a single Haskell file. -You specify the dependencies in a special comment block at the top of the file. -See [the documentation](https://cabal.readthedocs.io/en/3.10/getting-started.html#run-a-single-file-haskell-script) for more details. +_Edited 2025-03-03 to include `cabal repl` as an alternative._ -- cgit v1.2.3-70-g09d2