Haskell 从第一原则第 5 章,前 7,8

问题描述

我是 Haskell 的新手,正在阅读 Haskell from first principles

现在我在第 5 章。 在解决它的练习时,特别是 7,8 我不明白为什么我没有想出正确的答案

问题来了

您可以找到问题和解决方here

如果kessel的类型是(Ord a,Num b) => a -> b -> a,那么类型 凯塞尔 1 2 是:

  1. 整数
  2. 内部
  3. (Num a,Ord a) => a
  4. Ord a => a
  5. 数字 a => a

我认为它的答案是 5. Ord a => a,bcs 我提出的它的一种可能实现是完全忽略参数 b

喜欢这个

kessel ::(Ord a,Num b) => a -> b -> a
kessel a b = a
--if u have any other implementation Please share

因为它完全忽略了 b,所以它不应该影响 a 的类型,但仍然 ghci 显示它的类型是

:t kessel 1 2       
kessel 1 2 :: (Ord a,Num a) => a

我错过了什么? 同 Q:8

解决方法

Num b 是一条红鲱鱼。 Num a 约束是因为您为 a 类型传递了一个数字文字,而那些需要 Num 类型类。尝试 :t kessel [] 2 让它消失。