【问题标题】:How to extract information from custom data type如何从自定义数据类型中提取信息
【发布时间】:2019-10-11 23:12:18
【问题描述】:

我是 Haskell 和函数式编程的新手。我目前正在学习自定义数据类型,并且有以下内容:

data Point = Pt Double Double deriving (Show, Eq)

getValue :: Point -> Double

getValue (Pt a _) = a

我试图从自定义数据类型中仅返回一个双精度值,但遇到了问题。每当我尝试提取其中一个点值时,我的控制台都会出现以下错误:“无法匹配预期的类型Integer -> Integer -> t”。关于我做错了什么有什么想法吗?


从 OP 的 cmets 编辑:)我在 GHCi 中输入了以下内容

test Pt 1.0 1.0

这是完整的错误信息:

• Couldn't match expected type ‘Integer -> Integer -> t’ 
      with actual type ‘Double’ 
• The function ‘test’ is applied to three arguments, 
      but its type ‘Point -> Double’ has only one 
  In the expression: 
      test Pt 1 1 
  In an equation for ‘it’: 
      it = test Pt 1 1 
• Relevant bindings include 
      it :: t (bound at <interactive>:497:1)

test 是我将getValue 重命名为。

【问题讨论】:

  • 当我将代码粘贴到 GHCi 中时,它对我来说工作正常。奇怪的是,当您的代码中的所有基本类型都是Doubles 时,您报告的错误消息却提到了Integers。请提供您正在使用的确切代码(我怀疑还有更多,真正的错误在其他地方)。
  • 感谢您抽出宝贵时间提供帮助。不幸的是,我在问题中包含的是我的 .hs 文件中唯一的代码。它可以编译,但是当我尝试运行测试函数时,我得到了前面所述的错误。
  • 感谢您的澄清 - 那么问题是,当您“运行测试功能”时您在做什么?你的意思是在 GHCi 中输入一些表达式吗?如果有,准确的表达方式是什么? (事实上​​你只包含了错误信息的一部分——它还应该告诉你实际的类型,以及不匹配发生在哪个表达式中——这使得你很难猜测你可能做了什么。)
  • 是的,我在 GHCi "test Pt 1.0 1.0" 中输入了以下内容。抱歉,我不想包含整个消息,因为不包含不必要的字符。这是完整的错误消息: • 无法将预期类型 'Integer -> Integer -> t' 与实际类型 'Double' 匹配 • 函数 'test' 应用于三个参数,但其类型为 'Point -> Double'只有一个 在表达式中:test Pt 1 1 在“it”的等式中:it = test Pt 1 1 • 相关绑定包括 it :: t(绑定在 :497:1)
  • 好吧,你还没有告诉我test 是什么,但这足以找出问题所在——你显然想做test (Pt 1.0 1.0)。没有括号的test Pt 1.0 1.0 被解释为将test 函数应用于Pt1.01.0 3 个参数,这没有任何意义,这也是GHC 抱怨的原因。

标签: haskell syntax function-call custom-data-type


【解决方案1】:

你显然想做test (Pt 1.0 1.0)

不带括号的test Pt 1.0 1.0 被解释为将test 函数应用于Pt1.01.0 3 个参数,这没有任何意义,这也是GHC 抱怨的原因。 – Robin Zigmond, yesterday

【讨论】:

    猜你喜欢
    • 2017-02-17
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 2018-01-28
    • 2019-09-06
    相关资源
    最近更新 更多