【问题标题】:Haskell - data type functionsHaskell - 数据类型函数
【发布时间】:2019-09-23 00:46:19
【问题描述】:

我正在学习 Haskell 并开始研究数据类型。我尝试做一个简单的示例,将 Yard 和英尺转换为英寸,数据类型定义为 LengthUnit。我想添加两个 LengthUnit 变量,所以我创建了一个名为 convert 的辅助函数,它将接收 LengthUnit 并将其转换为英寸。

我尝试执行以下操作,但不断收到错误消息“无法将预期类型 LengthUnit 与 Int 类型匹配。

这是我所拥有的:

data LengthUnit =  INCH  Int | FOOT  Int | YARD  Int
                   deriving (Show, Read, Eq)

convert :: LengthUnit -> Int    
convert (INCH x) = x 
convert (FOOT x) = x * 12
convert (YARD x) = x * 36

-- addLengths 
addLengths :: LengthUnit -> LengthUnit -> LengthUnit
addLengths (INCH x) (INCH y) = convert(x) + convert(y)
-- I tried this as well and still receive same error
addLengths (INCH x) (INCH y) = x + y
addLengths (INCH x) (FOOT y) = convert(x) + convert(y)
.
.
.

我似乎找不到:

addLengths (LengthUnit x) (LengthUnit y) = convert(x) + convert(y)

感谢任何帮助,谢谢!

【问题讨论】:

    标签: haskell


    【解决方案1】:

    你的意思是这样的:

    addLengths x y = INCH ((convert x) + (convert y))
    

    括号可能比要求的多。

    使用 INCH 构造函数不是类型转换。

    【讨论】:

    • @Alex 这不是类型转换。它使用INCH 构造函数从Int 值生成LengthUnit 值。举一个与类型转换的区别的简单示例,构造函数可以接受多个参数(这只是区别的一个轻微、快速的动机。它们总体上是完全不同的东西)。 Haskell 并没有像 C 这样的语言那样进行类型转换。
    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 2013-08-14
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多