含义=>和(Ord a)

时间:2017-02-08 11:56:17

标签: haskell

首先,请注意我在网上(在stackoverflow和Hoogle中)查看我是否能找到这个主题的任何内容!

我一直在通过自己的工作来学习自己的一个哈克尔"我经常磕磕绊绊的有两件事我并不理解。使用=>和(Ord a)在几个重要的功能。

举个例子:

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

并使用" Ordering"与(Ord a)相同,如:

compareWith :: Int -> Ordering

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

2 个答案:

答案 0 :(得分:6)

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

考虑max

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

我们对xy的唯一了解是,他们必须满足Ord类型类。这反过来允许我们使用<函数进行比较,其签名为:

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

如果您要忽略Ord a定义中的max约束,那么它就不会编译,因为max的主体不能够使用比较功能。

答案 1 :(得分:3)

部分(Ord a) =>是一个类型约束,表示a是序数类型(可以订购)。

您可以将max :: (Ord a) => a -> a -> a视为:

其中a是序数类型,“max”采用类型a的2个参数并返回类型