我想定义数据类型Currency,它由其他三种数据类型组成。我遇到的问题是 Haskell 无法将数据类型识别为货币的一部分,这会破坏一切。
我的想法是将不同的货币定义为它们自己的数据类型,然后将它们添加到货币类型中,我尝试过:
data Euro = MkEuro Integer Integer
data Dollar = MkDollar Integer Integer
data Yen = MkYen Integer
data Currency = Euro | Dollar | Yen
如果我想在任何函数中使用货币类型,我会收到以下错误消息的变体:
Couldn't match expected type `Currency' with actual type `Dollar'
遗憾的是,我必须使用货币类型,并且无法为所有三种货币创建不同的函数。
最佳答案
目前,您的货币
被构造为三个值,不带任何参数。因此,Euro
是一个值,Dollar
是一个值,Yen
是一个值,但 MkYen 15
不是。
您可以向数据构造函数添加参数,例如:
data Currency = Euro <b>Euro</b> | Dollar <b>Dollar</b> | Yen <b>Yen</b>
然后您可以使用以下方式构建货币
:
<b>Euro</b> (MkEuro 14 25) :: Currency
::货币
不是必需的。因此,MkEuro
将构造一个 Euro
类型的对象,然后我们使用类型为 Euro
data 的构造函数欧元 -> 货币
构建货币
。
Sadly I have to use the type
Currency
and can't create different functions for all three currencies.
您可能想要创建一个 Currency
typeclass,它提供一个接口(interface)来说明货币应实现哪些功能,然后创建 Euro
、Dollar
和 Yen
该类型类的实例。
关于haskell - 如何定义由其他数据类型组成的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58780928/