Data.Maybe
| Copyright | (c) The University of Glasgow 2001 |
|---|---|
| License | BSD-style (see the file libraries/base/LICENSE) |
| Maintainer | libraries@haskell.org |
| Stability | stable |
| Portability | portable |
| Safe Haskell | Trustworthy |
| Language | Haskell2010 |
Описание
Тип Maybe и связанные операции.
Тип Maybe инкапсулирует необязательное значение. Значение типа Maybe a либо содержит значение типа a (представленное как Just a), либо оно пустое (представленное как Nothing). Использование Maybe — хороший способ обработки ошибок или исключительных ситуаций без использования таких радикальных мер, как error.
Тип Maybe также является монадой. Это простой вид монады ошибок, где все ошибки представлены как Nothing. Более богатую монаду ошибок можно построить с помощью типа Either.
Экземпляры
| Monad Maybe | Since: base-2.1 |
| Functor Maybe | Since: base-2.1 |
| MonadFix Maybe | Since: base-2.1 |
Определено в Control.Monad.Fix | |
| MonadFail Maybe | Since: base-4.9.0.0 |
Определено в Control.Monad.Fail | |
| Applicative Maybe | Since: base-2.1 |
| Foldable Maybe | Since: base-2.1 |
Определено в Data.Data Методыgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Maybe a -> c (Maybe a) Исходный код gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Maybe a) Исходный код toConstr :: Maybe a -> Constr Исходный код dataTypeOf :: Maybe a -> DataType Исходный код dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Maybe a)) Исходный код dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Maybe a)) Исходный код gmapT :: (forall b. Data b => b -> b) -> Maybe a -> Maybe a Исходный код gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Maybe a -> r Исходный код gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Maybe a -> r Исходный код gmapQ :: (forall d. Data d => d -> u) -> Maybe a -> [u] Исходный код gmapQi :: Int -> (forall d. Data d => d -> u) -> Maybe a -> u Исходный код gmapM :: Monad m => (forall d. Data d => d -> m d) -> Maybe a -> m (Maybe a) Исходный код gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Maybe a -> m (Maybe a) Исходный код gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Maybe a -> m (Maybe a) Исходный код | |
| Ord a => Ord (Maybe a) | С момента: base-2.1 |
Определено в GHC.Maybe Методыcompare :: Maybe a -> Maybe a -> Ordering Исходный код (<) :: Maybe a -> Maybe a -> Bool Исходный код (<=) :: Maybe a -> Maybe a -> Bool Исходный код (>) :: Maybe a -> Maybe a -> Bool Исходный код (>=) :: Maybe a -> Maybe a -> Bool Исходный код max :: Maybe a -> Maybe a -> Maybe a Исходный код min :: Maybe a -> Maybe a -> Maybe a Исходный код | |
| Read a => Read (Maybe a) | С момента: base-2.1 |
Определено в GHC.Read МетодыreadsPrec :: Int -> ReadS (Maybe a) Исходный код readList :: ReadS [Maybe a] Исходный код readPrec :: ReadPrec (Maybe a) Исходный код readListPrec :: ReadPrec [Maybe a] Исходный код | |
| Show a => Show (Maybe a) | С момента: base-2.1 |
| Generic (Maybe a) | С момента: base-4.6.0.0 |
| Semigroup a => Semigroup (Maybe a) | С момента: base-4.9.0.0 |
| Semigroup a => Monoid (Maybe a) |
Поднять полугруппу в С версии 4.11.0: ограничение на внутреннее С момента: base-2.1 |
| Generic1 Maybe | С момента: base-4.6.0.0 |
| type Rep (Maybe a) | |
Определено в GHC.Generics | |
| type Rep1 Maybe | |
Определено в GHC.Generics |
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 :: HasCallStack => 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, или одиночный список, если ей подано Just.
Примеры
Базовое использование:
>>> maybeToList (Just 7) [7]
>>> maybeToList Nothing []
Можно использовать maybeToList для избежания шаблонов сопоставления при сочетании с функцией, которая (безопасно) работает со списками:
>>> import Text.Read ( readMaybe ) >>> sum $ maybeToList (readMaybe "3") 3 >>> sum $ maybeToList (readMaybe "") 0
catMaybes :: [Maybe a] -> [a] Источник
Функция 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] Источник
Функция 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/8.10.2/docs/html/libraries/base-4.14.1.0/Data-Maybe.html