【问题标题】:how to read haskell type signature?如何阅读haskell类型签名?
【发布时间】:2017-12-13 22:48:56
【问题描述】:

所以我把这个声明放在我的 ghci 上

jkl x f y = f (map (+y) x)

我把这个放回去了。

jkl :: Num b => [b] -> ([b] -> t) -> b -> t

但是当我读到它时我很困惑。据我了解,jkl 是类型 num,它采用 [b]、[b] 和 t 以及 b。最后它会输出 t。这是正确的阅读方式吗?

【问题讨论】:

    标签: haskell type-inference


    【解决方案1】:
    jkl :: Num b => [b] -> ([b] -> t) -> b -> t
    

    打电话给jkl的人都得打

    • 选择类型bt
    • 保证b 在数字类型中被选择(Num b 约束)
    • [b]b 列表)作为第一个参数传递
    • 将函数[b] -> t 作为第二个参数传递(即采用[b] 并返回t
    • b 作为第三个参数传递
    • 收到t 作为最终结果

    【讨论】:

      【解决方案2】:

      双冒号:: 和粗箭头=> 之间的内容称为约束。在这种情况下,您有一个约束:Num b。这个约束要求,无论b 是什么类型,它都必须是类型类Num 的一个实例。

      在粗箭头之后,您将获得函数参数的类型,以及其结果的最后类型。

      参数:

      1. [b] - b 类型的值列表,不管是什么。
      2. [b] -> t - 一个函数,它接受 b 的列表并生成单个 t
      3. b - b 类型的单个值。

      最后,函数结果是t

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-03
        • 2015-07-22
        • 2016-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-15
        相关资源
        最近更新 更多