我想创建一个名为 Structured 的结构数据类型,可用于表示 String,Int 和 List 。例如,结构类似于:[ Int , String , Int ,[ Int ]]。
问题1:如何创建此数据类型?
data Structured = ...
问题2:一个名为确认的函数确认输入满足限制,并且签名类型为 confirm :: Restriction - >结构 - >也许Bool
答案 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]}
它与第一个数据声明完成相同的工作,但为您提供了获取内部结构的功能。