Вы не обижаетесь, см. Maybe List
, за исключением обработки ошибок -, например, потому что списки немного Maybe
сами по себе :у них есть свои "Nothing
":[]
и свои "Just
":(:)
. Я написал тип списка, используя Maybe и функции для преобразования стандартных и «экспериментальных» списков. toStd. toExp == id
.
data List a = List a (Maybe (List a))
deriving (Eq, Show, Read)
toExp [] = Nothing
toExp (x:xs) = Just (List x (toExp xs))
toStd Nothing = []
toStd (Just (List x xs)) = x : (toStd xs)
Что вы думаете об этом, как о попытке сократить повторение, обобщить?
Деревья тоже могут быть определены с помощью этих списков :
type Tree a = List (Tree a, Tree a)
. Однако я не тестировал этот последний фрагмент кода.