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 | Safe |
| Language | Haskell2010 |
Описание
Тип Maybe и связанные операции.
Тип Maybe инкапсулирует необязательное значение. Значение типа Maybe a либо содержит значение типа a (представленное как Just a), либо пусто (представлено как Nothing). Использование Maybe — хороший способ обработки ошибок или исключительных ситуаций без прибегания к радикальным мерам, таким как error.
Тип Maybe также является монадой. Это простой вид монады ошибок, где все ошибки представлены как Nothing. Более богатую монад ошибок можно построить, используя тип Either.
Экземпляры
| Eq1 Maybe Source | Since: base-4.9.0.0 |
| Ord1 Maybe Source | Since: base-4.9.0.0 |
Определено в Data.Functor.Classes | |
| Read1 Maybe Source | Since: base-4.9.0.0 |
Определено в Data.Functor.Classes МетодыliftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Maybe a) Source liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Maybe a] Source liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (Maybe a) Source liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [Maybe a] Source | |
| Show1 Maybe Source | Since: base-4.9.0.0 |
| Alternative Maybe Source |
Выбирает самое левое значение Since: base-2.1 |
| Applicative Maybe Source | Since: base-2.1 |
| Foldable Maybe Source | Since: base-2.1 |
Определено в GHC.Internal.Data.Foldable Методыfold :: Моноид m => Maybe m -> m Source foldMap :: Моноид m => (a -> m) -> Maybe a -> m Source foldMap' :: Моноид m => (a -> m) -> Maybe a -> m Source foldr :: (a -> b -> b) -> b -> Maybe a -> b Source foldr' :: (a -> b -> b) -> b -> Maybe a -> b Source foldl :: (b -> a -> b) -> b -> Maybe a -> b Source foldl' :: (b -> a -> b) -> b -> Maybe a -> b Source foldr1 :: (a -> a -> a) -> Maybe a -> a Source foldl1 :: (a -> a -> a) -> Maybe a -> a Source toList :: Maybe a -> [a] Source null :: Maybe a -> Булево Source length :: Maybe a -> Целое Source elem :: Eq a => a -> Maybe a -> Булево Source maximum :: Ord a => Maybe a -> a Source minimum :: Ord a => Maybe a -> a Source | |
| Traversable Maybe Source | Since: base-2.1 |
Определено в GHC.Internal.Data.Traversable | |
| Generic1 Maybe Source | |
Определено в GHC.Internal.Generics Связанные типы
| |||||
| Lift a => Lift (Maybe a :: Type) Исходный код | |||||
Определено в GHC.Internal.TH.Lift | |||||
| Semigroup a => Monoid (Maybe a) Исходный код |
Поднятие полугруппы в С момента 4.11.0: ограничение на внутреннее значение С момента: base-2.1 |
||||
Определено в GHC.Internal.Base Методыmempty :: Maybe a Исходный код mappend :: Maybe a -> Maybe a -> Maybe a Исходный код mconcat :: [Maybe a] -> Maybe a Исходный код | |||||
| Semigroup a => Semigroup (Maybe a) Исходный код | С момента: base-4.9.0.0 |
||||
Определено в GHC.Internal.Base Методы(<>) :: Maybe a -> Maybe a -> Maybe a Исходный код sconcat :: NonEmpty (Maybe a) -> Maybe a Исходный код stimes :: Integral b => b -> Maybe a -> Maybe a Исходный код | |||||
| Data a => Data (Maybe a) Исходный код | С момента: base-4.0.0.0 |
||||
Определено в GHC.Internal.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) Исходный код | |||||
| Generic (Maybe a) Исходный код | |||||
Определено в GHC.Internal.Generics Связанные типы
Методыfrom :: Maybe a -> Rep (Maybe a) x Исходный код to :: Rep (Maybe a) x -> Maybe a Исходный код | |||||
| SingKind a => SingKind (Maybe a) | С момента: base-4.9.0.0 |
||||
Определено в GHC.Internal.Generics Связанные типы
| |||||
| Read a => Read (Maybe a) Источник | С момента: base-2.1 |
||||
| Show a => Show (Maybe a) Источник | С момента: base-2.1 |
||||
| Eq a => Eq (Maybe a) Источник | С момента: base-2.1 |
||||
| Ord a => Ord (Maybe a) Источник | С момента: base-2.1 |
||||
Определено в GHC.Internal.Maybe | |||||
| SingI ('Nothing :: Maybe a) | С момента: base-4.9.0.0 |
||||
Определено в GHC.Internal.Generics | |||||
| SingI a2 => SingI ('Just a2 :: Maybe a1) | С момента: base-4.9.0.0 |
||||
Определено в GHC.Internal.Generics | |
| type Rep1 Maybe Источник | С момента: base-4.6.0.0 |
Определено в GHC.Internal.Generics | |
| type DemoteRep (Maybe a) Источник | |
Определено в GHC.Internal.Generics | |
| type Rep (Maybe a) Источник | С момента: base-4.6.0.0 |
Определено в GHC.Internal.Generics | |
| data Sing (b :: Maybe a) Источник | |
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 GHC.Internal.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 -> Булево Источник
Функция isJust возвращает True тогда и только тогда, когда её аргумент имеет вид Just _.
Примеры
Базовое использование:
>>> isJust (Just 3) True
>>> isJust (Just ()) True
>>> isJust Nothing False
Учитывается только внешний конструктор:
>>> isJust (Just Nothing) True
isNothing :: Maybe a -> Булево Источник
Функция 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 принимает значение по умолчанию и значение Maybe. Если значение Maybe равно Nothing, она возвращает значение по умолчанию; в противном случае, она возвращает значение, содержащееся в Maybe.
Примеры
Базовое использование:
>>> fromMaybe "" (Just "Hello, World!") "Hello, World!"
>>> fromMaybe "" Nothing ""
Чтение целого числа из строки с помощью readMaybe. Если нам не удаётся разобрать целое число, мы хотим вернуть значение по умолчанию 0:
>>> import GHC.Internal.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 GHC.Internal.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 GHC.Internal.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 GHC.Internal.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/9.12.1/docs/libraries/base-4.21.0.0-8e62/Data-Maybe.html