首先,请注意我在网上(在stackoverflow和Hoogle中)查看我是否能找到这个主题的任何内容!
我一直在通过自己的工作来学习自己的一个哈克尔"我经常磕磕绊绊的有两件事我并不理解。使用=>和(Ord a)在几个重要的功能。
举个例子:
max :: (Ord a) => a -> a -> a
并使用" Ordering"与(Ord a)相同,如:
compareWith :: Int -> Ordering
感谢您抽出宝贵时间帮助我解决这个(可能)简单的问题!
答案 0 :(得分:6)
=>
符号用于在函数上构建类约束。在max
示例中,这意味着a
类型的所有参数都需要实现Ord
类型类。
考虑max
max :: (Ord a) => a -> a -> a
max x y = if x < y then y else x
我们对x
和y
的唯一了解是,他们必须满足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个参数并返回类型