在" stack runghc"

时间:2018-01-22 07:22:42

标签: haskell haskell-stack

如果我的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扩展?

1 个答案:

答案 0 :(得分:3)

是的,堆栈可能应该有更好的支持 -  见https://github.com/commercialhaskell/stack/issues/3338

我要说摘要是stack runghcstack 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