【发布时间】: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。这是正确的阅读方式吗?
【问题讨论】:
所以我把这个声明放在我的 ghci 上
jkl x f y = f (map (+y) x)
我把这个放回去了。
jkl :: Num b => [b] -> ([b] -> t) -> b -> t
但是当我读到它时我很困惑。据我了解,jkl 是类型 num,它采用 [b]、[b] 和 t 以及 b。最后它会输出 t。这是正确的阅读方式吗?
【问题讨论】:
jkl :: Num b => [b] -> ([b] -> t) -> b -> t
打电话给jkl的人都得打
b 和t
b 在数字类型中被选择(Num b 约束)[b](b 列表)作为第一个参数传递[b] -> t 作为第二个参数传递(即采用[b] 并返回t)b 作为第三个参数传递t 作为最终结果【讨论】:
双冒号:: 和粗箭头=> 之间的内容称为约束。在这种情况下,您有一个约束:Num b。这个约束要求,无论b 是什么类型,它都必须是类型类Num 的一个实例。
在粗箭头之后,您将获得函数参数的类型,以及其结果的最后类型。
参数:
[b] - b 类型的值列表,不管是什么。[b] -> t - 一个函数,它接受 b 的列表并生成单个 t。b - b 类型的单个值。最后,函数结果是t。
【讨论】: