如果我的package.yaml
文件中有以下内容:
default-extensions:
- LambdaCase
我能够编译我的项目,它使用LambdaCase syntax这样:
myFunction = \case
Nothing -> "empty"
Just x -> x
但是,如果项目使用stack runghc
运行,则不会尊重LambdaCase
扩展名。
我的项目有大约200个模块,所以我宁愿不必将{-# LANGUAGE LambdaCase #-}
添加到每个文件的顶部。
是否可以使用stack runghc
类似于default-extensions
中的整个广告资源package.yaml
属性启用项目范围的GHC扩展?
答案 0 :(得分:3)
是的,堆栈可能应该有更好的支持 - 见https://github.com/commercialhaskell/stack/issues/3338。
我要说摘要是stack runghc
在stack ghci
之前出现,它最终有一个更简单的含义,根本不考虑cabal文件。不确定如何在命令行上使事情一致和直观,而不改变runghc
的含义。
在那个问题上,我描述了一个hacky解决方法。在这里复制:
现在这是一个解决方法。将以下内容放在~/.local/bin/stack-run-ghc.sh
中并使其成为用户可执行文件:
#/bin/sh
ghc $(echo "$*" | sed 's/--interactive//g')
这将获取参数,删除--interactive
,并调用ghc。有了这个,我可以通过以下方式使用ghc构建堆栈:
stack ghci --with-ghc stack-run-ghc.sh --ghci-options src/main/Main.hs