如何将'Real World Haskell'列表数据类型转换为使用Maybe?

时间:2013-10-09 17:02:12

标签: haskell maybe

我一直在研究'真实世界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)

2 个答案:

答案 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]。不过,我不知道它是最优雅还是最容易使用的。