This plugin has support for sending Haskell source code to ghci.
To support older GHC versions, code is processed in order to comply with the
syntax rules that are specific to interactive mode. For instance when sending
the following snippet to ghci:
-- make in triplicate
f :: a -> [a]
f = replicate 3This translates to the following:
:{
let f :: a -> [a]
f = replicate 3
:}Some of this behavior can be selectively turned off so that what is run is more faithful to the actual code in your buffer, but requires a recent enough GHC:
let g:slime_haskell_ghci_add_let = 0disables the transformation of top-level bindings into a let binding; requires GHC 8.0.1 or later
All of this is very nice but my workflow sometimes requires that I send the same
code to ghci over and over, so I usually put it in a separate "script" file
that holds some testing instructions so I can send them quickly.
However since some of the syntax is different between interactive and normal
Haskell and I write these script files as if I were writing in ghci, sometimes
the syntax translation would get in the way. E.g. I would write a function call
to test a certain function and check it's type:
(++) "This is a: " "TEST"
:type (++)and it get translated to:
:{
let (++) "This is a: " "TEST"
:type (++)
:}which is not what I wanted obviously.
To get around this, there is another handler that only kicks in if the filetype
in vim is set to haskell.script. If you want access to this handler call set ft=haskell.script or create a new ftdetect file which does this for you for a
certain file extension. For instance, I have:
au BufRead,BufNewFile,BufNew *.hss setl ft=haskell.scriptin ~/.vim/ftdetect/hss.vim.