Spec-Zone.ru › Haskell 9

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

data Maybe a Source

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

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

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

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

Since: base-4.9.0.0

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

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

Методы

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

Ord1 Maybe Source

Since: base-4.9.0.0

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

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

Методы

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

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

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

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

Методы

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Maybe a -> ShowS Source

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Maybe a] -> ShowS Source

Alternative Maybe Source

Выбирает самое левое значение Just, или, в качестве альтернативы, Nothing.

Since: base-2.1

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

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

Методы

empty :: Maybe a Source

(<|>) :: Maybe a -> Maybe a -> Maybe a Source

some :: Maybe a -> Maybe [a] Source

many :: Maybe a -> Maybe [a] Source

Applicative Maybe Source

Since: base-2.1

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

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

Методы

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

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

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

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

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

Functor Maybe Исходный код

С версии: base-2.1

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

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

Методы

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

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

Monad Maybe Исходный код

С версии: base-2.1

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

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

Методы

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

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

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

MonadPlus Maybe Исходный код

Выбирает самое левое Just значение или, в качестве альтернативы, Nothing.

С версии: base-2.1

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

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

Методы

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

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

MonadFail Maybe Исходный код

С версии: base-4.9.0.0

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

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

Методы

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

MonadFix Maybe Исходный код

С версии: base-2.1

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

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

Методы

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

MonadZip Maybe Исходный код

С версии: ghc-internal-4.8.0.0

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

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

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

sum :: Num a => Maybe a -> a Source

product :: Num a => Maybe a -> a Source

Traversable Maybe Source

Since: base-2.1

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

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

Методы

traverse :: Применимый f => (a -> f b) -> Maybe a -> f (Maybe b) Source

sequenceA :: Применимый f => Maybe (f a) -> f (Maybe a) Source

mapM :: Моноид m => (a -> m b) -> Maybe a -> m (Maybe b) Source

sequence :: Моноид m => Maybe (m a) -> m (Maybe a) Source

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

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

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

type Rep1 Maybe

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

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

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

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

Методы

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

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

Lift a => Lift (Maybe a :: Type) Исходный код
Подробности экземпляра

Определено в GHC.Internal.TH.Lift

Методы

lift :: Quote m => Maybe a -> m Exp Исходный код

liftTyped :: forall (m :: Type -> Type). Quote m => Maybe a -> Code m (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.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

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

type Rep (Maybe a)

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

Детали экземпляра

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

type Rep (Maybe a) = D1 ('MetaData "Maybe" "GHC.Internal.Maybe" "ghc-internal" 'False) (C1 ('MetaCons "Nothing" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Just" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

Методы

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

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

type DemoteRep (Maybe a)
Подробные сведения об экземпляре

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

type DemoteRep (Maybe a) = Maybe (DemoteRep a)

Методы

fromSing :: forall (a0 :: Maybe a). Sing a0 -> DemoteRep (Maybe a)

Read a => Read (Maybe a) Источник

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

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

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

Методы

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

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

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

Eq a => Eq (Maybe a) Источник

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

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

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

Методы

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

(/=) :: Maybe a -> Maybe a -> Bool Источник

Ord a => Ord (Maybe a) Источник

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

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

Определено в GHC.Internal.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 Источник

SingI ('Nothing :: Maybe a)

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

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

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

Методы

sing :: Sing ('Nothing :: Maybe a)

SingI a2 => SingI ('Just a2 :: Maybe a1)

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

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

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

Методы

sing :: Sing ('Just a2)

type Rep1 Maybe Источник

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

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

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

type Rep1 Maybe = D1 ('MetaData "Maybe" "GHC.Internal.Maybe" "ghc-internal" 'False) (C1 ('MetaCons "Nothing" 'PrefixI 'False) (U1 :: Тип -> Тип) :+: C1 ('MetaCons "Just" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Символ) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))
type DemoteRep (Maybe a) Источник
Подробности экземпляра

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

type DemoteRep (Maybe a) = Maybe (DemoteRep a)
type Rep (Maybe a) Источник

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

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

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

type Rep (Maybe a) = D1 ('MetaData "Maybe" "GHC.Internal.Maybe" "ghc-internal" 'False) (C1 ('MetaCons "Nothing" 'PrefixI 'False) (U1 :: Тип -> Тип) :+: C1 ('MetaCons "Just" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Символ) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))
data Sing (b :: Maybe a) Источник
Подробности экземпляра

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

data Sing (b :: Maybe a) where
  • SNothing :: forall {a}. Sing ('Nothing :: Maybe a)
  • SJust :: forall {a} (a1 :: a). Sing a1 -> Sing ('Just a1)

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 :: 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.12.1/docs/libraries/base-4.21.0.0-8e62/Data-Maybe.html

Spec-Zone.ru

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