@@ -15,105 +15,110 @@ them, and returns the result to the user. GHCi is GHC's interactive environment.
15
15
The ` stack ghci ` or ` stack repl ` commands, which are equivalent, allow you to
16
16
load components and files of your project into GHCi.
17
17
18
- The command uses the same TARGET syntax as ` stack build ` . It can also take flags
19
- like ` --test ` and ` --bench ` and options like ` --flag ` . Similarly to
20
- ` stack build ` , the default is to load up GHCi with all libraries and executables
21
- in the project.
22
-
23
- In order to load multiple components, ` stack ghci ` combines all of the GHC
24
- options together. This doesn't work in the general case, but when the packages
25
- being loaded share similar conventions, it should work out. A common source of
26
- issues is when one component defines default extensions which aren't assumed by
27
- another component. For example, specifying ` NoImplicitPrelude ` in one component
28
- but not another is quite likely to cause failures. GHCi will be run with
29
- ` -XNoImplicitPrelude ` , but it is likely that modules in the other component
30
- assume that the ` Prelude ` is implicitly imported.
18
+ The command accepts the same TARGET syntax as
19
+ [ ` stack build ` ] ( build_command.md#target-syntax ) . By default:
31
20
32
- ` stack ghci ` configures GHCi by using a GHCi script file. Such files are located
33
- in subdirectories of ` <XDG_CACHE_HOME>/stack/ghci-script ` , where
34
- ` <XDG_CACHE_HOME> ` refers to the
35
- [ XDG Base Directory Specification] ( https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html )
36
- for user-specific non-essential (cached) data. On Unix-like operating systems,
37
- the default for ` <XDG_CACHE_HOME> ` is ` $HOME/.cache ` . On Windows, the default
38
- is ` %LOCALAPPDATA% ` .
21
+ * Stack loads up GHCi with all the library and executable components of all the
22
+ packages in the project. Pass the flag ` --test ` to include test suite
23
+ components (unlike ` stack build ` , test suites will not be run). Pass the flag
24
+ ` --bench ` to include benchmark components (unlike ` stack build ` , benchmarks
25
+ will not be run).
39
26
40
- ## Selecting Main module
27
+ It is also possible to specify a module source code file. For example:
41
28
42
- When loading multiple packages, there may be multiple definitions for the ` Main `
43
- module. You can specify which ` Main ` module to load with the
44
- ` --main-is <target> ` option. If no selection is made and there are multiple
45
- ` Main ` modules, you will be asked to select from a list of options.
29
+ ~~~ text
30
+ stack ghci src/MyFile.hs
31
+ ~~~
46
32
47
- ## Speeding up initial load
33
+ Stack will identify which component the file is associated with, and use the
34
+ options from that component.
48
35
49
- There are two ways to speed up the initial startup of GHCi:
36
+ Pass the ` --package ` option to load GHCi with an additional package that is not
37
+ a direct dependency of your components. This option can be specified multiple
38
+ times.
50
39
51
- 1 . Pass the ` --no-build ` flag, to skip an initial build step. This works only
52
- if the dependencies have already been built.
40
+ Pass the option ` --flag <package_name>:<flag_name> ` or
41
+ ` --flag <package_name:-<flag_name> ` to set or unset a Cabal flag. This option
42
+ can be specified multiple times. The same Cabal flag name can be set (or unset)
43
+ for multiple packages with:
53
44
54
- 2 . Pass the ` --no-load ` flag, to skip loading all defined modules into GHCi.
55
- You can then directly use ` :load MyModule ` in GHCi to load a specific module
56
- in your project.
45
+ ~~~ text
46
+ --flag *:[-]<flag_name>
47
+ ~~~
57
48
58
- ## Loading just the main module
49
+ !!! note
59
50
60
- By default, ` stack ghci ` loads and imports all of the modules in the package.
61
- This allows you to easily use anything exported by your package. This is usually
62
- quite convenient, but in some cases it makes sense to only load one module, or
63
- no modules at all. The ` --only-main ` flag allows this. It specifies that only
64
- the main module will be loaded, if any. This is particularly useful in the
65
- following circumstances:
51
+ In order to set a Cabal flag for a GHC boot package, the package must either
52
+ be an extra-dep or the package version must be specified with the
53
+ `--package` option.
66
54
67
- 1 . You're loading the project in order to run it in GHCi (e.g. via ` main ` ), and
68
- you intend to reload while developing. Without the ` --only-main ` flag, you
69
- will need to quit and restart GHCi whenever a module gets deleted. With the
70
- flag, reloading should work fine in this case.
55
+ By default:
71
56
72
- 2 . If many of your modules have exports named the same thing, then you'll need
73
- to refer to them using qualified names. To avoid this, it may be easier to
74
- use the ` --only-main ` flag to start with a blank slate and just import the
75
- modules you are interested in.
57
+ * Stack uses the GHC specified in Stack's configuration. Pass the ` --with-ghc `
58
+ option with a file path to the executable to specify a different GHC
59
+ executable;
76
60
77
- ## Loading a filepath directly
61
+ * Stack loads and imports all of the modules for each target. Pass the
62
+ ` --no-load ` flag to skip the loading of modules. Pass the ` --only-main ` flag
63
+ to skip the loading of modules other than the main module.
78
64
79
- Instead of the ` TARGET ` syntax, it is also possible to command directly, for
80
- example:
65
+ !!! info
81
66
82
- ~~~ text
83
- stack ghci src/MyFile.hs
84
- ~~~
67
+ Not loading modules speeds up the startup of GHCi. Once in GHCi, you can
68
+ use `:load myModule` to load a specific module in your project.
85
69
86
- This will figure out which component the file is associated with, and use the
87
- options from that component.
70
+ !!! info
88
71
89
- ## Specifying extra packages to build or depend on
72
+ The `--only-main` flag can be useful if:
90
73
91
- Sometimes you want to load GHCi with an additional package, that isn't a direct
92
- dependency of your components. This can be achieved by using the ` --package `
93
- option. For example, if I want to experiment with the ` lens ` library, I can
94
- command:
74
+ 1. You're loading the project in order to run it in GHCi (e.g. via
75
+ `main`), and you intend to reload while developing. Without flag,
76
+ you will need to quit and restart GHCi whenever a module gets
77
+ deleted. With the flag, reloading should work fine in this case.
95
78
96
- ~~~ text
97
- stack ghci --package lens
98
- ~~~
79
+ 2. If many of your modules have exports named the same thing, then
80
+ you'll need to refer to them using qualified names. To avoid this,
81
+ use the `--only-main` flag to start with a blank slate and just
82
+ import the modules you are interested in.
99
83
100
- ## Specifying Cabal flags
84
+ * If there are multiple definitions for the ` Main ` module, Stack will ask you
85
+ to select one from a list of options. Pass the ` --main-is <target> ` option
86
+ to specific which ` Main ` module to load.
101
87
102
- ` --flag <package_name>:[-]<flag_name> ` sets (or unsets) the specified Cabal flag
103
- for the specified package .
88
+ * Stack performs an inital build step. Pass the ` --no-build ` flag to skip the
89
+ step .
104
90
105
- This option can be specified multiple times to set (or unset) multiple Cabal
106
- flags.
91
+ !!! info
107
92
108
- The same Cabal flag name can be set (or unset) for multiple packages with:
93
+ Not performing the initial build step speeds up the startup of GHCi. It
94
+ only works if the dependencies of the loaded packages have already been
95
+ built.
109
96
110
- ~~~ text
111
- --flag *:[-]<flag_name>
112
- ~~~
97
+ Stack combines all of the GHC options of components.
98
+
99
+ !!! note
100
+
101
+ Combining GHC options should work out when packages share similar
102
+ conventions. However, conflicts may arise, such as when one component
103
+ defines default extensions which aren't assumed by another. For example,
104
+ specifying `NoImplicitPrelude` in one component but not another is likely to
105
+ cause failures. GHCi will be run with `-XNoImplicitPrelude`, but it is
106
+ likely that modules in the other component assume that the `Prelude` is
107
+ implicitly imported.
108
+
109
+ ` stack ghci ` configures GHCi by using a GHCi script file. Such files are located
110
+ in subdirectories of ` <XDG_CACHE_HOME>/stack/ghci-script ` , where
111
+ ` <XDG_CACHE_HOME> ` refers to the
112
+ [ XDG Base Directory Specification] ( https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html )
113
+ for user-specific non-essential (cached) data.
114
+
115
+ === "Unix-like"
116
+
117
+ The default for `<XDG_CACHE_HOME>` is `$HOME/.cache`.
118
+
119
+ === "Windows"
113
120
114
- In order to set a Cabal flag for a GHC boot package, the package must either be
115
- an extra-dep or the package version must be specified with the ` --package `
116
- option.
121
+ On Windows, the default for `<XDG_CACHE_HOME>` is `%LOCALAPPDATA%`.
117
122
118
123
## Running plain GHCi
119
124
0 commit comments