gpt4 book ai didi

haskell - 在 haskell 中使用自定义数据类型

转载 作者:行者123 更新时间:2023-12-05 08:22:08 26 4
gpt4 key购买 nike

我制作了这些自定义数据类型:

data BakedGoods = Muffin
| Croissant
| Cookie
deriving (Eq, Show)

data Muffin = Blueberry
| SaltedCaramel
| Cheesecake

然后我尝试在返回 BakedGoods 价格的函数中使用它们:

price :: BakedGoods -> Int
price a
| a == Blueberry = 2

[...]

我一直收到这个错误:

 Couldn't match expected type ‘BakedGoods’ with actual type ‘Muffin’

我明白了,但不幸的是我不知道如何解决它,你有什么想法吗? :)

最佳答案

这对初学者来说有点困惑。

代数数据类型的形式为:data typename = constructor1 | constructor2

类型可以与构造函数同名,甚至可以是不同类型。因此您的代码有两个不同 Muffin -一个名为Muffin类型(带有构造函数BlueberrySaltedCaramelCheescake),以及类型 BakedGoods构造函数 Muffin。就编译器而言,它们完全没有联系。

您想要的代码如下所示:

data BakedGoods = Muffin Muffin
| ...

这意味着:类型 BakedGoods 有一个名为Muffin构造函数,它包含一个字段 类型 Muffin

然后您可以像这样对其进行模式匹配:

price :: BakedGoods -> Int
price (Muffin Blueberry) = 2
...

这意味着:当参数(必须是 BakedGoods)具有匹配 Muffin 的顶级构造函数时,其字段(Muffin 类型) code>) 匹配 Blueberry,然后返回 2。

Haskelling 快乐!

关于haskell - 在 haskell 中使用自定义数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64954165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com