如果我显式启用 DerivingStrategies,Cabal 与 GHC 不同,为什么不会自动启用 GeneralizedNewtypeDeriving?

问题描述 投票:0回答:1

第一次玩这些东西。)

文档我倾向于认为,如果我启用

DerivingStrategies
扩展,我不需要启用
GeneralizedNewtypeDeriving
DeriveAnyClass
,也不需要我当前在§6.6之前列出的任何其他扩展.7.1,例如
DerivingVia

但是,这个玩具示例

{-# LANGUAGE DerivingStrategies #-}

newtype MyNum = MyNum Int
 deriving stock (Eq, Ord, Show, Read)
 deriving newtype (Num, Enum, Real, Integral)

main :: IO ()
main = print $ MyNum 0

通过

ghc this-file.hs
(GHC 9.4.8)编译得很好,但不能通过
cabal build
(Cabal 3.10.2.1),因为在后一种情况下,还需要我添加

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

知道这是为什么吗?


我使用的虚拟

foo.cabal
文件是

cabal-version:   3.8
name:            foo
version:         1.0

executable foo
    main-is:          main.hs
    build-depends:    base
haskell ghc typeclass cabal language-extension
1个回答
0
投票

GeneralizedNewtypeDeriving
GHC2021
语言扩展集的一部分。 GHC 默认使用语言扩展集
GHC2021
。 Cabal 通过组件的
default-language
字段确定它使用的语言扩展集。在你的例子中,你把它遗漏了(这是不好的做法),显然在这种情况下,Cabal 仍然默认使用
Haskell2010
。因此,要解决此问题,您只需设置
default-language
字段即可:

cabal-version:   3.8
name:            foo
version:         1.0

executable foo
    main-is:          main.hs
    build-depends:    base
    default-language: GHC2021
© www.soinside.com 2019 - 2024. All rights reserved.