Data.Maybe
| Авторские права | (c) The University of Glasgow 2001 |
|---|---|
| Лицензия | BSD-подобная (см. файл libraries/base/LICENSE) |
| Сопровождающий | libraries@haskell.org |
| Стабильность | стабильный |
| Переносимость | переносимый |
| Безопасный Haskell | Безопасный |
| Язык | Haskell2010 |
Описание
Тип Maybe и связанные с ним операции.
Тип Maybe инкапсулирует необязательное значение. Значение типа Maybe a либо содержит значение типа a (представленное как Just a), либо является пустым (представлено как Nothing). Использование Maybe — хороший способ обрабатывать ошибки или исключительные ситуации, не прибегая к радикальным мерам, таким как error.
Тип Maybe также является монадой. Это простой вид монады ошибок, в которой все ошибки представлены значением Nothing. Более развитую монаду ошибок можно построить с помощью типа Either.
Экземпляры
| Eq1 Maybe Источник | Начиная с: base-4.9.0.0 |
| Ord1 Maybe Источник | Начиная с: base-4.9.0.0 |
Определён в Data.Functor.Classes | |
| Read1 Maybe Источник | Начиная с: base-4.9.0.0 |
Определён в Data.Functor.Classes МетодыliftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Maybe a) Источник liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Maybe a] Источник liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (Maybe a) Источник liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [Maybe a] Источник | |
| Show1 Maybe Источник | Начиная с: base-4.9.0.0 |
| Alternative Maybe Источник |
Выбирает крайнее левое значение Начиная с: base-2.1 |
| Applicative Maybe Источник | Начиная с: base-2.1 |
| Functor Maybe Источник | Начиная с: base-2.1 |
| Monad Maybe Источник | Начиная с: base-2.1 |
| MonadPlus Maybe Источник |
Выбирает крайнее левое значение Начиная с: base-2.1 |
| MonadFail Maybe Источник | Начиная с: base-4.9.0.0 |
Определён в GHC.Internal.Control.Monad.Fail Методыfail :: HasCallStack => String -> Maybe a Источник | |
| MonadFix Maybe Источник | Начиная с: base-2.1 |
Определён в GHC.Internal.Control.Monad.Fix | |
| MonadZip Maybe Источник | Начиная с: ghc-internal-4.8.0.0 |
| Foldable Maybe Источник | Начиная с: base-2.1 |
Определён в GHC.Internal.Data.Foldable Методыfold :: Monoid m => Maybe m -> m Источник foldMap :: Monoid m => (a -> m) -> Maybe a -> m Источник foldMap' :: Monoid m => (a -> m) -> Maybe a -> m Источник foldr :: (a -> b -> b) -> b -> Maybe a -> b Источник foldr' :: (a -> b -> b) -> b -> Maybe a -> b Источник foldl :: (b -> a -> b) -> b -> Maybe a -> b Источник foldl' :: (b -> a -> b) -> b -> Maybe a -> b Источник foldr1 :: (a -> a -> a) -> Maybe a -> a Источник foldl1 :: (a -> a -> a) -> Maybe a -> a Источник toList :: Maybe a -> [a] Источник null :: Maybe a -> Bool Источник length :: Maybe a -> Int Источник elem :: Eq a => a -> Maybe a -> Bool Источник maximum :: Ord a => Maybe a -> a Источник minimum :: Ord a => Maybe a -> a Источник | |
| Traversable Maybe Источник | Начиная с: base-2.1 |
Определён в GHC.Internal.Data.Traversable | |
| Generic1 Maybe Источник | |
Определено в GHC.Internal.Generics Ассоциированные типы
| |||||
| Lift a => Lift (Maybe a :: Type) Источник | |||||
| Semigroup a => Monoid (Maybe a) Источник |
Расширяет полугруппу до Начиная с версии 4.11.0: ограничение на внутреннее значение Начиная с: base-2.1 |
||||
| Semigroup a => Semigroup (Maybe a) Источник | Начиная с: base-4.9.0.0 |
||||
| Eq a => Eq (Maybe a) Источник | Начиная с: base-2.1 |
||||
| Ord a => Ord (Maybe a) Источник | Начиная с: base-2.1 |
||||
Определено в GHC.Internal.Maybe | |||||
| 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 Ассоциированные типы
| |||||
| 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 |
||||
Определено в GHC.Internal.Show МетодыshowsPrec :: Int -> Maybe a -> ShowS Исходный код show :: Maybe a -> String Исходный код showList :: [Maybe a] -> ShowS Исходный код | |
| 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 -> Bool Исходный код
isJust x возвращает True, когда x имеет вид Just _, и False в противном случае.
Примеры
Простое использование:
>>> isJust (Just 3) True
>>> isJust (Just ()) True
>>> isJust Nothing False
Учитывается только внешний конструктор:
>>> isJust (Just Nothing) True
isNothing :: Maybe a -> Bool Исходный код
isNothing x возвращает True, когда x равно Nothing, и False в противном случае.
Примеры
Простое использование:
>>> 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 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.14.1/docs/libraries/base-4.22.0.0-66f8/Data-Maybe.html