我一直在研究'真实世界Haskell',我一直在研究如何使用Maybe。我在第3章中编写了这个数据类型和相应的函数。本书建议尝试将其转换为使用Maybe并摆脱Nil类型。我一直在玩这个,但我无法弄清楚如何做到这一点。我尝试过在不同的地方添加,但我真的只是猜测而不是知道该怎么做。
data List a = List a (List a)
| Nil
deriving (Show)
toList :: List a -> [a]
toList (List a Nil) = a:[]
toList (List a as) = a:(toList as)
答案 0 :(得分:7)
看看这个:
data List a data Maybe a
= List a (List a) = Just a
| Nil | Nothing
当你用这种方式编写时,并行看起来很清楚 - 我们只需要在Just
方面添加一些额外的数据!要放置“额外”数据,我们可以使用元组。唯一的另一个问题是我们必须命名一个构造函数。
data List' a = List' (Maybe (a, List' a {- here's the extra bit -}))
答案 1 :(得分:2)
data List a = List a (Maybe (List a))
会这样做。您有List 1 (Just (List 2 Nothing))
代表[1, 2]
。不过,我不知道它是最优雅还是最容易使用的。