Haskell,创建结构化数据类型

时间:2012-10-22 11:08:33

标签: haskell functional-programming

我想创建一个名为 Structured 的结构数据类型,可用于表示 String,Int List 。例如,结构类似于:[ Int String Int ,[ Int ]]。

问题1:如何创建此数据类型?

data Structured = ...

问题2:一个名为确认的函数确认输入满足限制,并且签名类型为 confirm :: Restriction - >结构 - >也许Bool

1 个答案:

答案 0 :(得分:8)

data Structured = Structured Int String Int [Int]

会起作用。

confirm :: (Structured -> Bool) -> Structured -> Bool

似乎是一种更合理的类型,但有一个简单的实现id

我认为您不需要从评论函数返回Maybe Bool - Maybe a适用于您通常会重新设置a,但有时不会。 (这对于非常简单的错误处理很有用,例如 - 如果出现错误,请给Nothing。)在这种情况下,您总是可以得出输入是否有效的结论,因此您可以随时回馈{ {1}}或True - 无需False

也许你可以拥有像

这样的东西
Maybe

此处confirm :: (String -> Bool) -> (Int -> Bool) -> Structured -> Bool confirm okString okInt (Structured int1 string int2 ints) = all okInt (int1:int2:ints) && okString string 是在int1:int2:ints前面int1前面int2的列表。

定义Structured的更好的方法是:

ints

然后你有

data Structured = Structured {
           length ::Int,
           name   ::String,
           width  ::Int,
           somenumbers :: [Int]}

它与第一个数据声明完成相同的工作,但为您提供了获取内部结构的功能。