我对Haskell和编译/构建过程相对较新。我从Github克隆了一个使用cabal文件构建的Haskell包。我可以使用stack build
,stack install
等构建程序没问题。
目前我感兴趣的是只在Haskell包中的Rewrite.hs文件中使用这些函数,但是我无法通过将Rewrite导入到我自己的Main.hs并调用ghc Main.hs
来成功编译它。我收到以下类型错误:
Rewrite.hs:73:13: error:
• Expecting one more argument to ‘Module’
Expected a type, but ‘Module’ has kind ‘* -> *’
• In the type signature:
stripTop :: Module -> Module
Rewrite.hs:16:29: error:
• Expecting one more argument to ‘Pat’
Expected a type, but ‘Pat’ has kind ‘* -> *’
• In the type signature:
findPats :: Data a => a -> [Pat]
我认为构建一个包基本上编译并将文件链接在一起 - 为什么在手动编译时可能会有程序部分的编译器错误?或者,我是否应该尝试使用像这样的程序的一部分的.hs文件?
编辑:
包裹是https://github.com/Genetic-Strictness/Autobahn
Main的一个例子:
import Rewrite
import System.FilePath
import Language.Haskell.Exts
file ::FilePath
file = "test.hs"
main = placesToStrict file
其中函数placesToStrict
来自Rewrite,它调用findPats
,导致上面的编译错误。
答案 0 :(得分:1)
.cabal文件指定了几种语言扩展名:other-extensions: BangPatterns, FlexibleInstances, MultiParamTypeClasses, TypeSynonymInstances
您可以在源文件的顶部添加:{-# LANGUAGE BangPatterns, FlexibleInstances, ... #-}
,从而在每个文件的基础上启用这些功能。您也可以将-XBangPatterns -XFlexibleInstances ...
传递给ghc,但不鼓励这样做。