Опубликован: 19.09.2008 | Доступ: свободный | Студентов: 659 / 71 | Оценка: 4.50 / 5.00 | Длительность: 21:25:00
Тема: Программирование
Специальности: Программист, Архитектор программного обеспечения
Лекция 19:
Утилиты Maybe
< Лекция 18 || Лекция 19 || Лекция 20 >
Аннотация: В этой лекции вы получите сведения о конструкторе типа Maybe. Узнаете каким образом он определен в Prelude, а так же затроним библиотеку, которую он использует
module Maybe(
isJust, isNothing,
fromJust, fromMaybe, listToMaybe, maybeToList,
catMaybes, mapMaybe,
- ...и то, что экспортирует Prelude
Maybe(Nothing, Just),
maybe
) where
isJust, isNothing :: Maybe a -> Bool
fromJust :: Maybe a -> a
fromMaybe :: a -> Maybe a -> a
listToMaybe :: [a] -> Maybe a
maybeToList :: Maybe a -> [a]
catMaybes :: [Maybe a] -> [a]
mapMaybe :: (a -> Maybe b) -> [a] -> [b]Конструктор типа Maybe определен в Prelude следующим образом:
data Maybe a = Nothing | Just a
Назначение типа Maybe заключается в том, чтобы предоставить метод обработки неправильных или необязательных значений без завершения программы, что произошло бы, если бы использовалась функция error, и без использования функции IOError из монады IO, которая потребовала бы, чтобы выражение стало монадическим. Правильный результат инкапсулируется путем обертывания его в Just ; неправильный результат возвращается в виде Nothing.
Другие операции над Maybe предусмотрены как часть монадических классов в Prelude.
18.1. Библиотека Maybe
module Maybe(
isJust, isNothing,
fromJust, fromMaybe, listToMaybe, maybeToList,
catMaybes, mapMaybe,
- ... и то, что экспортирует Prelude
Maybe(Nothing, Just),
maybe
) where
isJust :: Maybe a -> Bool
isJust (Just a) = True
isJust Nothing = False
isNothing :: Maybe a -> Bool
isNothing = not . isJust
fromJust :: Maybe a -> a
fromJust (Just a) = a
fromJust Nothing = error "Maybe.fromJust: Nothing"
fromMaybe :: a -> Maybe a -> a
fromMaybe d Nothing = d
fromMaybe d (Just a) = a
maybeToList :: Maybe a -> [a]
maybeToList Nothing = []
maybeToList (Just a) = [a]
listToMaybe :: [a] -> Maybe a
listToMaybe [] = Nothing
listToMaybe (a:_) = Just a
catMaybes :: [Maybe a] -> [a]
catMaybes ms = [ m | Just m <- ms ]
mapMaybe :: (a -> Maybe b) -> [a] -> [b]
mapMaybe f = catMaybes . map f< Лекция 18 || Лекция 19 || Лекция 20 >