【问题标题】:Haskell From First Principles Ch5, Ex 7,8Haskell 来自第一原理 Ch5,Ex 7,8
【发布时间】:2021-04-19 19:49:19
【问题描述】:

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

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

问题来了

你可以找到问题和解决方案here

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

  1. 整数
  2. 内部
  3. 一个
  4. (Num a, Ord a) => a
  5. Ord a => a
  6. Num 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也是如此

【问题讨论】:

    标签: haskell ghci


    【解决方案1】:

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

    【讨论】:

    • 感谢您的快速回答是的,通过 kessel [] 2 它确实消失了,Num b 是错误信号,但我仍然不明白为什么它是 (Num a, Ord a) ? b 对 a 有影响吗?为什么问题是我从图片中遗漏的东西
    • “Num a 约束是因为你为 a 类型传递了一个数字文字,而那些需要 Num 类型类”那为什么当我们通过 [] 时它消失了?
    • @hanan 数字文字的类型为Num a => a(注意约束Num a),而[] 的类型为[a],没有额外的约束。在您的示例中,kessel 还要求 aOrd,除此之外,我们添加了 Num,因为我们使用了数字文字。结果:(Num a, Ord a) => a.
    • 谢谢,我明白了
    猜你喜欢
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2017-10-10
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2011-05-26
    相关资源
    最近更新 更多