【问题标题】:Haskell type class confusion [duplicate]Haskell类型类混淆[重复]
【发布时间】:2014-10-31 06:42:44
【问题描述】:

我开始学习 Haskell,虽然它通常很棒,但类型类系统的一些特殊性在专注于数字的项目中导致了很多挫败感。作为一个具体的例子,如果我打开 ghci 并检查添加的类型,我会得到:

Prelude> :t (+)
(+) :: Num a => a -> a -> a

Addition 是超通用的,Num 是最通用的类​​型类,等等,所以一切都有意义。但是,如果我声明某个函数是要添加的,然后检查 that 函数的类型,则类型类会减少到 Integer!

Prelude> let add = (+)
Prelude> :t add
add :: Integer -> Integer -> Integer

那么……这是怎么回事?

【问题讨论】:

    标签: haskell type-conversion


    【解决方案1】:

    你遇到了可怕的单态限制。您可以禁用它并获取通用功能。

    Prelude> let x = (+)
    Prelude> :t x
    x :: Integer -> Integer -> Integer
    Prelude> :set -XNoMonomorphismRestriction
    Prelude> let y = (+)
    Prelude> :t y
    y :: Num a => a -> a -> a
    

    这里的概念是单态限制将使类型限制为单个(单)具体部分。您可以使用 NoMonomorphismRestriction 扩展来禁用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      相关资源
      最近更新 更多