jon*_*nas 2 haskell haskell-stack
我想定义数据类型Currency,它由其他三个数据类型组成。我有一个问题,Haskell无法将数据类型识别为货币的一部分,这破坏了一切。
我的想法是将不同的货币定义为它们自己的数据类型,然后将它们添加到“货币”类型,我尝试使用:
data Euro = MkEuro Integer Integer
data Dollar = MkDollar Integer Integer
data Yen = MkYen Integer
data Currency = Euro | Dollar | Yen
Run Code Online (Sandbox Code Playgroud)
如果要在任何函数中使用货币类型,则会得到以下错误消息的变体:
Couldn't match expected type `Currency' with actual type `Dollar'
Run Code Online (Sandbox Code Playgroud)
可悲的是,我必须使用货币类型,并且不能为所有三种货币创建不同的功能。
当前,您Currency将构造为三个不带参数的值。因此Euro,值Dollar是,是值,并且Yen是值,但不是MkYen 15。
您可以将参数添加到数据构造函数中,例如:
data Currency = Euro Euro | Dollar Dollar | Yen YenRun Code Online (Sandbox Code Playgroud)
然后,您可以使用构造一个Currency:
Euro (MkEuro 14 25) :: CurrencyRun Code Online (Sandbox Code Playgroud)
该:: Currency是没有必要的。因此,MkEuro会构造一个Euro类型的对象,然后我们使用具有类型的Euro 数据构造Euro -> Currency函数构造一个Currency。
可悲的是,我必须使用该类型
Currency,并且不能为所有三种货币创建不同的函数。
你可能想使一个Currency 类型类然而,规定说什么功能的货币应该实现一个接口,然后进行Euro,Dollar以及Yen该类型类的实例。