Как преобразовать тип данных списка 'Real World Haskell' в использование Maybe?
Я изучал "Real World 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 ответа
Посмотри на это:
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 -}))
data List a = List a (Maybe (List a))
сделал бы это. Вы бы имели List 1 (Just (List 2 Nothing))
представлять [1, 2]
, Я не знаю, является ли он самым элегантным или самым простым в использовании.