Haskell - 类型,枚举和函数

时间:2013-05-03 13:22:45

标签: function haskell types enums

大家早上好,

这就是我今天正在做的事情,以及我正在努力解决的问题:

--A
data Row = A | B | C | D | E | F | G | H | I | J deriving (Enum, Ord, Show, Bounded, Eq, Read)
data Column = One | Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten  deriving (Enum, Ord, Show, Bounded, Eq, Read)
--B
data Address = Address Row Column deriving (Show, Read, Eq)

然后几行之后,我找到问题孩子:

toAddress r c = Address(toEnum r, toEnum c)

我需要输入地址行和列,但我需要将r和c转换为行和列(不是Ints)

显然,toAddress的结构不正确,无法执行此任务。要求如下:

  

写一个函数toAddress,它接受一行和一列,每个都在[0    - 9]。构造一个地址并将其返回。使用toEnum索引   你的行和列枚举列表。

有没有人对如何完成我的目标提出任何建议?

谢谢!

1 个答案:

答案 0 :(得分:3)

你的语法错了。

haskell中函数f :: A -> B -> C的函数应用程序看起来像f a b而不是f(a,b)f(a,b)仍然是正确的语法,但不是你想要的:它只将一个参数传递给函数(即由a和b组成的元组)。

所以toAddress的正确实现如下所示:

toAddress r c = Address (toEnum r) (toEnum c)