Spec-Zone.ru › Haskell 9

Data.Tuple

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

Описание

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

data Solo a Источник

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

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

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 Source

Since: base-4.15

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

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

Методы

pure :: a -> Solo a Source

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

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

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

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

Functor Solo Source

Since: base-4.15

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

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

Методы

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

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

Monad Solo Source

Since: base-4.15

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

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

Методы

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

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

return :: a -> Solo a Source

MonadFix Solo Source

Since: base-4.15

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

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

Методы

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

MonadZip Solo Source

Since: ghc-internal-4.15.0.0

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

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

Методы

mzip :: Solo a -> Solo b -> Solo (a, b) Source

mzipWith :: (a -> b -> c) -> Solo a -> Solo b -> Solo c Source

munzip :: Solo (a, b) -> (Solo a, Solo b) Source

Foldable Solo Source

Since: 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.Tuple" "ghc-prim" '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 Исходный код

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) Source
Подробности экземпляра

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

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

type Rep (Solo a)

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

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

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

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

Методы

from :: Solo a -> Rep (Solo a) x Source

to :: Rep (Solo a) x -> Solo a Source

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

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

Методы

range :: (Solo a, Solo a) -> [Solo a] Source

index :: (Solo a, Solo a) -> Solo a -> Int Source

unsafeIndex :: (Solo a, Solo a) -> Solo a -> Int Source

inRange :: (Solo a, Solo a) -> Solo a -> Bool Source

rangeSize :: (Solo a, Solo a) -> Int Source

unsafeRangeSize :: (Solo a, Solo a) -> Int Source

Read a => Read (Solo a) Source

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

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

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

Методы

readsPrec :: Int -> ReadS (Solo a) Source

readList :: ReadS [Solo a] Source

readPrec :: ReadPrec (Solo a) Source

readListPrec :: ReadPrec [Solo a] Source

Show a => Show (Solo a) Source

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

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

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

Методы

showsPrec :: Int -> Solo a -> ShowS Source

show :: Solo a -> String Source

showList :: [Solo a] -> ShowS Source

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

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

Методы

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

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

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

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

type Rep1 Solo Исходный код

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

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

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

type Rep1 Solo = D1 ('MetaData "Solo" "GHC.Tuple" "ghc-prim" '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.Tuple" "ghc-prim" '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.12.1/docs/libraries/base-4.21.0.0-8e62/Data-Tuple.html

Spec-Zone.ru

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