summaryrefslogtreecommitdiff
path: root/haskell/cabal-lib.md
diff options
context:
space:
mode:
Diffstat (limited to 'haskell/cabal-lib.md')
-rw-r--r--haskell/cabal-lib.md20
1 files changed, 12 insertions, 8 deletions
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 <code>*package-name*.cabal</code> 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 <code>*package-name*.cabal</code> 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._