Data.Maybe
| Авторские права | (c) Университет Глазго 2001 |
|---|---|
| Лицензия | BSD (см. файл libraries/base/LICENSE) |
| Поддерживающий | libraries@haskell.org |
| Стабильность | стабильная |
| Переносимость | переносимая |
| Safe Haskell | Надежная |
| Язык | Haskell2010 |
Описание
Тип Maybe и связанные с ним операции.
Тип Maybe инкапсулирует необязательное значение. Значение типа Maybe a либо содержит значение типа a (представленное как Just a), либо оно пусто (представленное как Nothing). Использование Maybe — хороший способ обработки ошибок или исключительных случаев без радикальных мер, таких как error.
Тип Maybe также является монадой. Это простой тип монады ошибок, где все ошибки представлены значением Nothing. Более богатую монаду ошибок можно построить, используя тип Either.
Примеры использования
| Монада Maybe | |
| Функтор Maybe | |
| MonadFix Maybe | |
| Применимый Maybe | |
| Складываемый Maybe | |
| Переходимый Maybe | |
| Generic1 Maybe | |
| MonadPlus Maybe | |
| Альтернатива Maybe | |
| Eq a => Eq (Maybe a) | |
| Data a => Data (Maybe a) | |
| Ord a => Ord (Maybe a) | |
| Read a => Read (Maybe a) | |
| Show a => Show (Maybe a) | |
| Generic (Maybe a) | |
| Monoid a => Monoid (Maybe a) | Поднятие полугруппы в |
| type Rep1 Maybe | |
| type Rep (Maybe a) | |
| type (==) (Maybe k) a b |
maybe :: b -> (a -> b) -> Maybe a -> b Источник
Функция maybe принимает значение по умолчанию, функцию и значение типа Maybe. Если значение типа Maybe равно Nothing, функция возвращает значение по умолчанию. В противном случае она применяет функцию к значению внутри Just и возвращает результат.
Примеры
Основное использование:
>>>maybe False odd (Just 3)True
>>>maybe False odd NothingFalse
Чтение целого числа из строки с помощью readMaybe. Если нам удалось, вернём удвоенное целое число, то есть применим (*2) к нему. Если же нам не удалось проанализировать целое число, вернём 0 по умолчанию:
>>>import Text.Read ( readMaybe )>>>maybe 0 (*2) (readMaybe "5")10>>>maybe 0 (*2) (readMaybe "")0
Применение show к Maybe Int. Если у нас есть Just n, мы хотим показать основополагающее Int n. Но если у нас есть Nothing, мы вернём пустую строку вместо (например) "Nothing":
>>>maybe "" show (Just 5)"5">>>maybe "" show Nothing""
isJust :: Maybe a -> Bool Источник
Функция isJust возвращает True тогда и только тогда, когда её аргумент имеет вид Just _.
Примеры
Основное использование:
>>>isJust (Just 3)True
>>>isJust (Just ())True
>>>isJust NothingFalse
Учитывается только внешний конструктор:
>>>isJust (Just Nothing)True
isNothing :: Maybe a -> Bool Источник
Функция isNothing возвращает True тогда и только тогда, когда её аргумент равен Nothing.
Примеры
Основное использование:
>>>isNothing (Just 3)False
>>>isNothing (Just ())False
>>>isNothing NothingTrue
Учитывается только внешний конструктор:
>>>isNothing (Just Nothing)False
fromJust :: Maybe a -> a Источник
Функция fromJust извлекает элемент из Just и генерирует ошибку, если её аргумент равен Nothing.
Примеры
Основное использование:
>>>fromJust (Just 1)1
>>>2 * (fromJust (Just 10))20
>>>2 * (fromJust Nothing)*** Exception: Maybe.fromJust: Nothing
fromMaybe :: a -> Maybe a -> a Источник
Функция fromMaybe принимает значение по умолчанию и значение типа Maybe. Если значение типа Maybe равно Nothing, функция возвращает значение по умолчанию; в противном случае она возвращает значение, содержащееся в Maybe.
Примеры
Основное использование:
>>>fromMaybe "" (Just "Hello, World!")"Hello, World!"
>>>fromMaybe "" Nothing""
Чтение целого числа из строки с помощью readMaybe. Если нам не удалось проанализировать целое число, мы хотим вернуть 0 по умолчанию:
>>>import Text.Read ( readMaybe )>>>fromMaybe 0 (readMaybe "5")5>>>fromMaybe 0 (readMaybe "")0
listToMaybe :: [a] -> Maybe a Источник
Функция listToMaybe возвращает Nothing для пустого списка или Just a, где a — первый элемент списка.
Примеры
Основное использование:
>>>listToMaybe []Nothing
>>>listToMaybe [9]Just 9
>>>listToMaybe [1,2,3]Just 1
Композиция maybeToList с listToMaybe должна быть тождественной на списках с одним или нулевыми элементами:
>>>maybeToList $ listToMaybe [5][5]>>>maybeToList $ listToMaybe [][]
Но не на списках с более чем одним элементом:
>>>maybeToList $ listToMaybe [1,2,3][1]
maybeToList :: Maybe a -> [a] Источник
Функция maybeToList возвращает пустой список, если ей передан Nothing, или список из одного элемента, если не передан Nothing.
Примеры
Базовое использование:
>>>maybeToList (Just 7)[7]
>>>maybeToList Nothing[]
Можно использовать maybeToList для избежания сопоставления с образцом, когда это сочетается с функцией, которая (безопасно) работает со списками:
>>>import Text.Read ( readMaybe )>>>sum $ maybeToList (readMaybe "3")3>>>sum $ maybeToList (readMaybe "")0
catMaybes :: [Maybe a] -> [a] Source
Функция catMaybes принимает список Maybe и возвращает список всех Just значений.
Примеры
Базовое использование:
>>>catMaybes [Just 1, Nothing, Just 3][1,3]
При построении списка Maybe значений, catMaybes можно использовать для возврата всех результатов «успеха» (если список является результатом map, то mapMaybe было бы более уместно):
>>>import Text.Read ( readMaybe )>>>[readMaybe x :: Maybe Int | x <- ["1", "Foo", "3"] ][Just 1,Nothing,Just 3]>>>catMaybes $ [readMaybe x :: Maybe Int | x <- ["1", "Foo", "3"] ][1,3]
mapMaybe :: (a -> Maybe b) -> [a] -> [b] Source
Функция mapMaybe является версией map, которая может отбрасывать элементы. В частности, функциональный аргумент возвращает что-то типа Maybe b. Если это Nothing, ни один элемент не добавляется в результирующий список. Если это Just b, то b включается в результирующий список.
Примеры
Использование mapMaybe f x является сокращением для catMaybes $ map f x в большинстве случаев:
>>>import Text.Read ( readMaybe )>>>let readMaybeInt = readMaybe :: String -> Maybe Int>>>mapMaybe readMaybeInt ["1", "Foo", "3"][1,3]>>>catMaybes $ map readMaybeInt ["1", "Foo", "3"][1,3]
Если мы отображаем конструктор Just, весь список должен быть возвращен:
>>>mapMaybe Just [1,2,3][1,2,3]
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/base-4.8.2.0/Data-Maybe.html