【问题标题】:Meaning of => and (Ord a)=> 和 (Ord a) 的含义
【发布时间】:2017-02-08 22:25:38
【问题描述】:

首先,请注意我在网上(在 stackoverflow 和 Hoogle 中)查看是否可以找到与该主题相关的任何内容!

我一直在通过“自学haskell”来锻炼自己,有两件事我经常绊倒,我并不真正理解。 => 和 (Ord a) 在几个重要函数中的使用。

举个例子:

max :: (Ord a) => a -> a -> a

并且是“Ordering”的使用与(Ord a)相同,如:

compareWith :: Int -> Ordering

感谢您抽出宝贵时间帮助我解决这个(可能)简单的问题!

【问题讨论】:

  • 您可以几乎(=>) 视为一种Constraint -> * 的运算符,除非受约束的类型不是类型注释之外的有效表达式。 (另外,=> “接受”单个 ConstraintConstraints 的“元组”。)

标签: haskell


【解决方案1】:

=> 符号用于在函数上构建类约束。在max例子中,表示a类型的所有参数都需要实现Ord类型类。

考虑max的实现

max :: (Ord a) => a -> a -> a
max x y = if x < y then y else x

关于xy,我们唯一知道的是它们必须满足Ord 类型类。这反过来又允许我们使用&lt; 函数进行比较,其签名是:

(<) :: Ord a => a -> a -> Bool

如果你在max 的定义中省略了Ord a 约束,那么它将无法编译,因为max 的主体将无法使用比较功能。

【讨论】:

【解决方案2】:

(Ord a) =&gt;部分是类型约束,表示a是序数类型(可以排序)。

你可以将max :: (Ord a) =&gt; a -&gt; a -&gt; a读作:

其中 a 是一个序数类型,“max”接受 2 个 a 类型的参数并返回 a 类型

【讨论】:

    猜你喜欢
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多