是DeriveFunctor公认的延伸?惊天动地似乎混淆
-
25-09-2019 - |
题
卡瓦尔是给我混合消息。当我说:
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-extensions
和other-extensions
。这解决约翰指出了他的答案,那以前的行为是所有分机都活跃了所有模块,我们承认是一个错误的问题。所述other-extensions
字段允许在一些模块中使用(即,与LANGUAGE
编译指示)中列出的扩展名。惊天动地最终的执行的,他们都是上市,就像它要求所有的包相关上市。语言依赖性是依赖太