Spec-Zone.ru › Haskell 8

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 и связанные операции.

data Maybe a Source

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

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

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

Nothing
Just a
Экземпляры
Подробности о экземплярах
Monad Maybe

Since: base-2.1

Подробности о экземпляре

Определено в GHC.Base

Методы

(>>=) :: Maybe a -> (a -> Maybe b) -> Maybe b Source

(>>) :: Maybe a -> Maybe b -> Maybe b Source

return :: a -> Maybe a Source

Functor Maybe

Since: base-2.1

Подробности о экземпляре

Определено в GHC.Base

Методы

fmap :: (a -> b) -> Maybe a -> Maybe b Source

(<$) :: a -> Maybe b -> Maybe a Source

MonadFix Maybe

Since: base-2.1

Подробности о экземпляре

Определено в Control.Monad.Fix

Методы

mfix :: (a -> Maybe a) -> Maybe a Source

MonadFail Maybe

Since: base-4.9.0.0

Подробности о экземпляре

Определено в Control.Monad.Fail

Методы

fail :: String -> Maybe a Source

Applicative Maybe

Since: base-2.1

Подробности о экземпляре

Определено в GHC.Base

Методы

pure :: a -> Maybe a Source

(<*>) :: Maybe (a -> b) -> Maybe a -> Maybe b Source

liftA2 :: (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c Source

(*>) :: Maybe a -> Maybe b -> Maybe b Source

(<*) :: Maybe a -> Maybe b -> Maybe a Source

Foldable Maybe

Since: base-2.1

Подробности экземпляра

Определено в 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 Исходный код

sum :: Num a => Maybe a -> a Исходный код

product :: Num a => Maybe a -> a Исходный код

Traversable Maybe

С: base-2.1

Подробности экземпляра

Определено в Data.Traversable

Методы

traverse :: Applicative f => (a -> f b) -> Maybe a -> f (Maybe b) Исходный код

sequenceA :: Applicative f => Maybe (f a) -> f (Maybe a) Исходный код

mapM :: Monad m => (a -> m b) -> Maybe a -> m (Maybe b) Исходный код

sequence :: Monad m => Maybe (m a) -> m (Maybe a) Исходный код

MonadPlus Maybe

С: base-2.1

Подробности экземпляра

Определено в GHC.Base

Методы

mzero :: Maybe a Исходный код

mplus :: Maybe a -> Maybe a -> Maybe a Исходный код

Alternative Maybe

С: base-2.1

Подробности экземпляра

Определено в GHC.Base

Методы

empty :: Maybe a Исходный код

(<|>) :: Maybe a -> Maybe a -> Maybe a Исходный код

some :: Maybe a -> Maybe [a] Исходный код

many :: Maybe a -> Maybe [a] Исходный код

MonadZip Maybe

С: base-4.8.0.0

Подробные сведения об экземпляре

Определено в Control.Monad.Zip

Методы

mzip :: Maybe a -> Maybe b -> Maybe (a, b) Исходный код

mzipWith :: (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c Исходный код

munzip :: Maybe (a, b) -> (Maybe a, Maybe b) Исходный код

Show1 Maybe

С момента: base-4.9.0.0

Подробные сведения об экземпляре

Определено в Data.Functor.Classes

Методы

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Maybe a -> ShowS Исходный код

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Maybe a] -> ShowS Исходный код

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] Исходный код

Ord1 Maybe

С момента: base-4.9.0.0

Подробные сведения об экземпляре

Определено в Data.Functor.Classes

Методы

liftCompare :: (a -> b -> Ordering) -> Maybe a -> Maybe b -> Ordering Исходный код

Eq1 Maybe

С момента: base-4.9.0.0

Подробные сведения об экземпляре

Определено в Data.Functor.Classes

Методы

liftEq :: (a -> b -> Bool) -> Maybe a -> Maybe b -> Bool Исходный код

Eq a => Eq (Maybe a)

С момента: base-2.1

Подробные сведения об экземпляре

Определено в GHC.Maybe

Методы

(==) :: Maybe a -> Maybe a -> Bool Исходный код

(/=) :: Maybe a -> Maybe a -> Bool Исходный код

Data a => Data (Maybe a)

С момента: base-4.0.0.0

Подробности экземпляра

Определено в 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

Подробности экземпляра

Определено в GHC.Show

Методы

showsPrec :: Int -> Maybe a -> ShowS Источник

show :: Maybe a -> String Источник

showList :: [Maybe a] -> ShowS Источник

Generic (Maybe a)

С момента: base-4.6.0.0

Подробности экземпляра

Определено в GHC.Generics

Связанные типы

type Rep (Maybe a) :: Type -> Type Источник

Методы

from :: Maybe a -> Rep (Maybe a) x Источник

to :: Rep (Maybe a) x -> Maybe a Источник

Semigroup a => Semigroup (Maybe a)

С момента: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Base

Методы

(<>) :: Maybe a -> Maybe a -> Maybe a Источник

sconcat :: NonEmpty (Maybe a) -> Maybe a Источник

stimes :: Integral b => b -> Maybe a -> Maybe a Источник

Semigroup 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».

С версии 4.11.0: ограничение на внутреннее a значение обобщено с Monoid на Semigroup.

С момента: base-2.1

Подробности экземпляра

Определено в GHC.Base

Методы

mempty :: Maybe a Источник

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

mconcat :: [Maybe a] -> Maybe a Источник

Generic1 Maybe

С момента: base-4.6.0.0

Подробности экземпляра

Определено в GHC.Generics

Связанные типы

type Rep1 Maybe :: k -> Type Источник

Методы

from1 :: forall (a :: k). Maybe a -> Rep1 Maybe a Источник

to1 :: forall (a :: k). Rep1 Maybe a -> Maybe a Источник

type Rep (Maybe a)
Подробности экземпляра

Определено в GHC.Generics

type Rep (Maybe a) = D1 ('MetaData "Maybe" "GHC.Maybe" "base" 'False) (C1 ('MetaCons "Nothing" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Just" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))
type Rep1 Maybe
Подробности экземпляра

Определено в GHC.Generics

type Rep1 Maybe = D1 ('MetaData "Maybe" "GHC.Maybe" "base" 'False) (C1 ('MetaCons "Nothing" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Just" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))

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

Spec-Zone.ru

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