为什么5 :: Sum Integer作为文字工作?

Ped*_*olo 8 haskell literals

为什么5 :: Sum Integer在翻译工作,但给了一个

newtype NovoTipo a = NovoTipo a
Run Code Online (Sandbox Code Playgroud)

6 :: NovoTipo Integer 不起作用?

And*_*ács 16

您可以为具有Num实例的任何类型编写数字文字.Sum 拥有它,而你的新类型没有.

您可以GeneralizedNewtypeDeriving通过以下方式启用ghci:

:set -XGeneralizedNewtypeDeriving
Run Code Online (Sandbox Code Playgroud)

然后你可以写:

newtype NovoTipo a = NovoTipo a deriving (Num)
Run Code Online (Sandbox Code Playgroud)

然后6 :: NovoTipo Integer是好的打字.

  • 也许值得一提的是,没有那个扩展,实例仍然可以提供手动(un)包装. (4认同)