为什么可以使用无法单独编译的.hs文件构建Haskell程序?

时间:2017-08-26 22:12:23

标签: haskell

我对Haskell和编译/构建过程相对较新。我从Github克隆了一个使用cabal文件构建的Haskell包。我可以使用stack buildstack 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,导致上面的编译错误。

1 个答案:

答案 0 :(得分:1)

.cabal文件指定了几种语言扩展名:other-extensions: BangPatterns, FlexibleInstances, MultiParamTypeClasses, TypeSynonymInstances

您可以在源文件的顶部添加:{-# LANGUAGE BangPatterns, FlexibleInstances, ... #-},从而在每个文件的基础上启用这些功能。您也可以将-XBangPatterns -XFlexibleInstances ...传递给ghc,但不鼓励这样做。