Spec-Zone.ru › Haskell 9

Data.Tuple

Авторские права (c) Университет Глазго, 2001
Лицензия в стиле BSD (см. файл libraries/base/LICENSE)
Сопровождающий libraries@haskell.org
Стабильность стабильная
Переносимость переносимая
Безопасный Haskell Безопасный
Язык Haskell2010

Описание

Функции, связанные с типами данных кортежей.

data Solo a Источник

Solo — это канонический поднятый 1-кортеж, подобно тому как (,) — канонический поднятый 2-кортеж (пара), а (,,) — канонический поднятый 3-кортеж (тройка).

Важнейшее свойство Solo состоит в том, что его «внешнюю часть» можно вычислить (обычно сопоставлением с образцом), не вычисляя «внутреннюю часть», поскольку он определён как тип данных, а не как newtype. Это может пригодиться, например, при написании функции для извлечения значения из структуры данных. Предположим, вы реализуете массивы и предоставляете только такую функцию для обращения к их элементам:

index :: Array a -> Int -> a

Теперь представьте, что кто-то хочет извлечь значение из массива и сохранить его в конечном отображении/словаре с ленивыми значениями:

insert "hello" (arr index 12) m

Это может привести к утечке памяти. Значение фактически не извлекается из массива, пока оно (теперь скрытое в отображении) не будет вычислено. Это означает, что весь массив может оставаться в памяти только из-за этого значения! Часто решением становится использование строгого отображения или вычисление значения перед сохранением, но в некоторых случаях это нежелательно.

Один из распространённых способов решения — добавить функцию индексирования, которая может возвращать результат в произвольном контексте Applicative:

indexA :: Applicative f => Array a -> Int -> f a

При использовании indexA в чистом контексте Solo служит удобным функтором Applicative для хранения результата. Например, предыдущий пример можно переписать так, чтобы избежать утечки:

case arr indexA 12 of
  Solo a -> insert "hello" a m

Хотя такие простые функции извлечения — наиболее распространённый способ применения унарных кортежей, они также полезны для тонкого управления обходом структур данных со строгим каркасом и для унификации реализаций ленивых и строгих функций отображения.

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

MkSolo a

Объединённые шаблоны

pattern Solo :: a -> Solo a

Устарело: конструктор Solo переименован в MkSolo, чтобы избежать неоднозначного использования имени.

Экземпляры
Подробности экземпляров
Foldable1 Solo Исходный код

Начиная с: base-4.18.0.0

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

Определён в Data.Foldable1

Методы

fold1 :: Semigroup m => Solo m -> m Исходный код

foldMap1 :: Semigroup m => (a -> m) -> Solo a -> m Исходный код

foldMap1' :: Semigroup m => (a -> m) -> Solo a -> m Исходный код

toNonEmpty :: Solo a -> NonEmpty a Исходный код

maximum :: Ord a => Solo a -> a Исходный код

minimum :: Ord a => Solo a -> a Исходный код

head :: Solo a -> a Исходный код

last :: Solo a -> a Исходный код

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

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

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

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

Eq1 Solo Исходный код

Начиная с: base-4.15

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

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

Методы

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

Ord1 Solo Исходный код

Начиная с: base-4.15

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

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

Методы

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

Read1 Solo Исходный код

Начиная с: base-4.15

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

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

Методы

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Solo a) Исходный код

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Solo a] Исходный код

liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (Solo a) Исходный код

liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [Solo a] Исходный код

Show1 Solo Исходный код

Начиная с: base-4.15

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

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

Методы

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

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

Applicative Solo Исходный код

Начиная с: base-4.15

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

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

Методы

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

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

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

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

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

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

Начиная с: base-4.15

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

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

Методы

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

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

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

Начиная с: base-4.15

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

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

Методы

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

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

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

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

Начиная с: base-4.15

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

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

Методы

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

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

Начиная с: ghc-internal-4.15.0.0

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

Определён в GHC.Internal.Control.Monad.Zip

Методы

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

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

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

Foldable Solo Исходный код

Начиная с: base-4.15

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

Определён в GHC.Internal.Data.Foldable

Методы

fold :: Monoid m => Solo m -> m Исходный код

foldMap :: Monoid m => (a -> m) -> Solo a -> m Исходный код

foldMap' :: Monoid m => (a -> m) -> Solo a -> m Исходный код

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

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

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

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

foldr1 :: (a -> a -> a) -> Solo a -> a Исходный код

foldl1 :: (a -> a -> a) -> Solo a -> a Исходный код

toList :: Solo a -> [a] Исходный код

null :: Solo a -> Bool Исходный код

length :: Solo a -> Int Исходный код

elem :: Eq a => a -> Solo a -> Bool Исходный код

maximum :: Ord a => Solo a -> a Исходный код

minimum :: Ord a => Solo a -> a Исходный код

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

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

Traversable Solo Исходный код

Начиная с: base-4.15

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

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

Методы

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

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

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

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

Generic1 Solo Исходный код
Подробности экземпляра

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

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

type Rep1 Solo

Начиная с: base-4.15

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

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

type Rep1 Solo = D1 ('MetaData "Solo" "GHC.Internal.Tuple" "ghc-internal" 'False) (C1 ('MetaCons "MkSolo" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))

Методы

from1 :: Solo a -> Rep1 Solo a Источник

to1 :: Rep1 Solo a -> Solo a Источник

Monoid a => Monoid (Solo a) Источник

Начиная с: base-4.15

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

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

Методы

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

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

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

Semigroup a => Semigroup (Solo a) Источник

Начиная с: base-4.15

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

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

Методы

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

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

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

Eq a => Eq (Solo a) Источник
Подробности экземпляра

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

Методы

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

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

Ord a => Ord (Solo a) Источник
Подробности экземпляра

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

Методы

compare :: Solo a -> Solo a -> Ordering Источник

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

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

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

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

max :: Solo a -> Solo a -> Solo a Источник

min :: Solo a -> Solo a -> Solo a Источник

Data a => Data (Solo a) Источник

Начиная с: base-4.15

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

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

Методы

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Solo a -> c (Solo a) Источник

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Solo a) Источник

toConstr :: Solo a -> Constr Источник

dataTypeOf :: Solo a -> DataType Источник

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Solo a)) Источник

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Solo a)) Источник

gmapT :: (forall b. Data b => b -> b) -> Solo a -> Solo a Источник

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Solo a -> r Источник

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Solo a -> r Источник

gmapQ :: (forall d. Data d => d -> u) -> Solo a -> [u] Источник

gmapQi :: Int -> (forall d. Data d => d -> u) -> Solo a -> u Источник

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Solo a -> m (Solo a) Источник

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Solo a -> m (Solo a) Источник

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Solo a -> m (Solo a) Источник

Bounded a => Bounded (Solo a) Источник
Подробности экземпляра

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

Методы

minBound :: Solo a Источник

maxBound :: Solo a Источник

Enum a => Enum (Solo a) Источник
Подробности экземпляра

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

Методы

succ :: Solo a -> Solo a Источник

pred :: Solo a -> Solo a Источник

toEnum :: Int -> Solo a Источник

fromEnum :: Solo a -> Int Источник

enumFrom :: Solo a -> [Solo a] Источник

enumFromThen :: Solo a -> Solo a -> [Solo a] Источник

enumFromTo :: Solo a -> Solo a -> [Solo a] Источник

enumFromThenTo :: Solo a -> Solo a -> Solo a -> [Solo a] Источник

Generic (Solo a) Источник
Подробности экземпляра

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

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

type Rep (Solo a)

Начиная с: base-4.15

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

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

type Rep (Solo a) = D1 ('MetaData "Solo" "GHC.Internal.Tuple" "ghc-internal" 'False) (C1 ('MetaCons "MkSolo" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

Методы

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

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

Ix a => Ix (Solo a) Источник
Подробности экземпляра

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

Методы

range :: (Solo a, Solo a) -> [Solo a] Источник

index :: (Solo a, Solo a) -> Solo a -> Int Источник

unsafeIndex :: (Solo a, Solo a) -> Solo a -> Int Источник

inRange :: (Solo a, Solo a) -> Solo a -> Bool Источник

rangeSize :: (Solo a, Solo a) -> Int Источник

unsafeRangeSize :: (Solo a, Solo a) -> Int Источник

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

Начиная с: base-4.15

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

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

Методы

readsPrec :: Int -> ReadS (Solo a) Источник

readList :: ReadS [Solo a] Источник

readPrec :: ReadPrec (Solo a) Источник

readListPrec :: ReadPrec [Solo a] Источник

Show a => Show (Solo a) Источник

Начиная с: base-4.15

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

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

Методы

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

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

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

type Rep1 Solo Источник

Начиная с: base-4.15

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

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

type Rep1 Solo = D1 ('MetaData "Solo" "GHC.Internal.Tuple" "ghc-internal" 'False) (C1 ('MetaCons "MkSolo" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))
type Rep (Solo a) Источник

Начиная с: base-4.15

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

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

type Rep (Solo a) = D1 ('MetaData "Solo" "GHC.Internal.Tuple" "ghc-internal" 'False) (C1 ('MetaCons "MkSolo" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

getSolo :: Solo a -> a Источник

Извлекает значение из Solo. Во многих случаях значения следует извлекать напрямую с помощью сопоставления с образцом, чтобы контролировать, что именно вычисляется и когда. getSolo предназначен для удобства в ситуациях, когда это не так:

Когда результат передаётся строгой функции, не имеет значения, выполняется ли сопоставление с образцом «снаружи» или «изнутри»:

Data.Set.insert (getSolo sol) set === case sol of Solo v -> Data.Set.insert v set

Обход можно выполнить в Solo, чтобы управлять вычислением внутри, используя getSolo для извлечения конечного результата. Например, строгую функцию отображения можно определить так:

map' :: Traversable t => (a -> b) -> t a -> t b
map' f = getSolo . traverse ((Solo $!) . f)

fst :: (a, b) -> a Источник

Извлекает первый компонент пары.

snd :: (a, b) -> b Источник

Извлекает второй компонент пары.

curry :: ((a, b) -> c) -> a -> b -> c Источник

Преобразует функцию без каррирования в функцию с каррированием.

Примеры
Развернуть
>>> curry fst 1 2
1

uncurry :: (a -> b -> c) -> (a, b) -> c Источник

uncurry преобразует функцию с каррированием в функцию, принимающую пары.

Примеры
Развернуть
>>> uncurry (+) (1,2)
3
>>> uncurry ($) (show, 1)
"1"
>>> map (uncurry max) [(1,2), (3,4), (6,8)]
[2,4,8]

swap :: (a, b) -> (b, a) Источник

Меняет компоненты пары местами.

© 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-Tuple.html

Spec-Zone.ru

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