Spec-Zone.ru › Haskell 7

Data.Maybe

Авторские права (c) Университет Глазго 2001
Лицензия BSD (см. файл libraries/base/LICENSE)
Поддерживающий libraries@haskell.org
Стабильность стабильная
Переносимость переносимая
Safe Haskell Надежная
Язык Haskell2010

Описание

Тип Maybe и связанные с ним операции.

data Maybe a Источник

Тип Maybe инкапсулирует необязательное значение. Значение типа Maybe a либо содержит значение типа a (представленное как Just a), либо оно пусто (представленное как Nothing). Использование Maybe — хороший способ обработки ошибок или исключительных случаев без радикальных мер, таких как error.

Тип Maybe также является монадой. Это простой тип монады ошибок, где все ошибки представлены значением Nothing. Более богатую монаду ошибок можно построить, используя тип Either.

Конструкторы

Nothing
Just a

Примеры использования

Монада 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)

Поднятие полугруппы в Maybe для формирования Monoid согласно http://en.wikipedia.org/wiki/Monoid: "Любую полугруппу S можно преобразовать в моноид, просто добавив элемент e, не принадлежащий S, и определив e*e = e и e*s = s = s*e для всех s ∈ S." Поскольку нет типа класса "Semigroup", предоставляющего только mappend, мы используем Monoid вместо этого.

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 Nothing
False

Чтение целого числа из строки с помощью 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 Nothing
False

Учитывается только внешний конструктор:

>>> isJust (Just Nothing)
True

isNothing :: Maybe a -> Bool Источник

Функция isNothing возвращает True тогда и только тогда, когда её аргумент равен Nothing.

Примеры

Основное использование:

>>> isNothing (Just 3)
False
>>> isNothing (Just ())
False
>>> isNothing Nothing
True

Учитывается только внешний конструктор:

>>> 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API