卡瓦尔是给我混合消息。当我说:

Extensions: DeriveFunctor

它说:

Warning: Unknown extensions: DeriveFunctor

但是,当我说:

GHC-Options: -XDeriveFunctor

它说:

Warning: Instead of 'ghc-options: -XDeriveFunctor' use 'extensions:
DeriveFunctor'

现在我只是要使用{-# LANGUAGE DeriveFunctor #-}编译。

$ cabal --version
cabal-install version 0.8.2
using version 1.8.0.6 of the Cabal library 
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 6.12.3
$ basename $(mdfind haskell-platform | grep .dmg)
haskell-platform-2010.2.0.0.i386.dmg
有帮助吗?

解决方案

按照 Hackage文档,作为惊天动地-1.8.0.6 DeriveFunctor的不被认可。这是一个相对较新的GHC,它似乎并不具有广泛的应用,所以我并不感到惊讶它会一直忽略了惊天动地。这可能应该针对卡瓦尔日提交的作为一个错误(特征请求?)。

@汤姆Lokhorst是正确的语言编译是最好的选择。我不喜欢用惊天动地的扩展字段,因为那时所有的扩展是所有的模块,我常常不想活跃。

其他提示

您仍然可以使用extensions: DeriveFunctor在.cabal文件。是的,这是不是当前已知惊天动地的延伸,但你仍然可以使用它,只要编译器可以识别它,然后它会工作。事实上,惊天动地将检查的编译器识别扩展,即使惊天动地本身并不知道这一点。

有在模块Language.Haskell.Extension扩展的中央登记。此注册表的目的是让不同的编译器可以在同一个名字同意时,他们实现了相同的扩展。我们曾在不同的编译器作者不小心给不同的名称相同的延伸概念,过去的情况。并非所有的扩展需要注册。这是有道理不登记仍在高度实验性的,例如DPH扩展名“帕尔”仍是未注册扩展。 Hackage要求所有上载的包仅使用已知的注册的扩展,这是有意义的,因为如果一个扩展是充分准备在分布式包被使用,那么它是确定注册。

在这个特定的情况下,开发者GHC似乎忘记到注册扩展。

这也是值得注意的是,作为卡瓦尔-1.10的extensions字段被分割为两个:default-extensionsother-extensions。这解决约翰指出了他的答案,那以前的行为是所有分机都活跃了所有模块,我们承认是一个错误的问题。所述other-extensions字段允许在一些模块中使用(即,与LANGUAGE编译指示)中列出的扩展名。惊天动地最终的执行的,他们都是上市,就像它要求所有的包相关上市。语言依赖性是依赖太

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top