cardano-data-1.4.1.0: Specialized data for Cardano project
Safe HaskellNone
LanguageHaskell2010

Data.SimpleOMap.Strict

Synopsis

Documentation

data OMap k v where Source #

A general-purpose finite, insert-ordered, map that is strict in its keys and values.

The strictness is enforced by the underlying strict Map, and the ordering is maintained by the constructing functions, leveraging StrictSeq to hold the insert-order of the keys.

TODO: DecShareCBOR instance

Bundled Patterns

pattern Empty ∷ OMap k v

\(O(1)\)

pattern (:<|:) ∷ Ord k ⇒ (k, v) → OMap k v → OMap k v infixr 5

\(O(\log n)\).

pattern (:|>:) ∷ Ord k ⇒ OMap k v → (k, v) → OMap k v infixl 5

\(O(\log n)\).

Instances

Instances details
Ord k ⇒ Foldable (OMap k) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

Methods

fold ∷ Monoid m ⇒ OMap k m → m #

foldMap ∷ Monoid m ⇒ (a → m) → OMap k a → m #

foldMap' ∷ Monoid m ⇒ (a → m) → OMap k a → m #

foldr ∷ (a → b → b) → b → OMap k a → b #

foldr' ∷ (a → b → b) → b → OMap k a → b #

foldl ∷ (b → a → b) → b → OMap k a → b #

foldl' ∷ (b → a → b) → b → OMap k a → b #

foldr1 ∷ (a → a → a) → OMap k a → a #

foldl1 ∷ (a → a → a) → OMap k a → a #

toList ∷ OMap k a → [a] #

null ∷ OMap k a → Bool #

length ∷ OMap k a → Int #

elem ∷ Eq a ⇒ a → OMap k a → Bool #

maximum ∷ Ord a ⇒ OMap k a → a #

minimum ∷ Ord a ⇒ OMap k a → a #

sum ∷ Num a ⇒ OMap k a → a #

product ∷ Num a ⇒ OMap k a → a #

(Ord k, ToJSON k, ToJSON v) ⇒ ToJSON (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

Methods

toJSON ∷ OMap k v → Value Source #

toEncoding ∷ OMap k v → Encoding Source #

toJSONList ∷ [OMap k v] → Value Source #

toEncodingList ∷ [OMap k v] → Encoding Source #

omitField ∷ OMap k v → Bool Source #

(Ord k, DecCBOR k, DecCBOR v, Eq v) ⇒ DecCBOR (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

Methods

decCBOR ∷ Decoder s (OMap k v) Source #

dropCBOR ∷ Proxy (OMap k v) → Decoder s () Source #

label ∷ Proxy (OMap k v) → Text Source #

(EncCBOR k, EncCBOR v, Ord k) ⇒ EncCBOR (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

Methods

encCBOR ∷ OMap k v → Encoding Source #

Default (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

Methods

def ∷ OMap k v Source #

(NFData k, NFData v) ⇒ NFData (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

Methods

rnf ∷ OMap k v → () #

Ord k ⇒ Monoid (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

Methods

mempty ∷ OMap k v #

mappend ∷ OMap k v → OMap k v → OMap k v #

mconcat ∷ [OMap k v] → OMap k v #

Ord k ⇒ Semigroup (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

Methods

(<>) ∷ OMap k v → OMap k v → OMap k v #

sconcat ∷ NonEmpty (OMap k v) → OMap k v #

stimes ∷ Integral b ⇒ b → OMap k v → OMap k v #

Generic (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

Associated Types

type Rep (OMap k v) 
Instance details

Defined in Data.SimpleOMap.Strict

type Rep (OMap k v) = D1 ('MetaData "OMap" "Data.SimpleOMap.Strict" "cardano-data-1.4.1.0-inplace" 'False) (C1 ('MetaCons "OMap" 'PrefixI 'True) (S1 ('MetaSel ('Just "omSSeq") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (StrictSeq k)) :*: S1 ('MetaSel ('Just "omMap") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Map k v))))

Methods

from ∷ OMap k v → Rep (OMap k v) x #

to ∷ Rep (OMap k v) x → OMap k v #

Ord k ⇒ IsList (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

Associated Types

type Item (OMap k v) 
Instance details

Defined in Data.SimpleOMap.Strict

type Item (OMap k v) = (k, v)

Methods

fromList ∷ [Item (OMap k v)] → OMap k v #

fromListN ∷ Int → [Item (OMap k v)] → OMap k v #

toList ∷ OMap k v → [Item (OMap k v)] #

(Show v, Ord k, Show k) ⇒ Show (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

Methods

showsPrec ∷ Int → OMap k v → ShowS #

show ∷ OMap k v → String #

showList ∷ [OMap k v] → ShowS #

(Eq k, Eq v) ⇒ Eq (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

Methods

(==) ∷ OMap k v → OMap k v → Bool #

(/=) ∷ OMap k v → OMap k v → Bool #

(NoThunks k, NoThunks v) ⇒ NoThunks (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

type Rep (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

type Rep (OMap k v) = D1 ('MetaData "OMap" "Data.SimpleOMap.Strict" "cardano-data-1.4.1.0-inplace" 'False) (C1 ('MetaCons "OMap" 'PrefixI 'True) (S1 ('MetaSel ('Just "omSSeq") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (StrictSeq k)) :*: S1 ('MetaSel ('Just "omMap") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Map k v))))
type Item (OMap k v) Source # 
Instance details

Defined in Data.SimpleOMap.Strict

type Item (OMap k v) = (k, v)

null ∷ OMap k v → Bool Source #

\(O(1)\).

size ∷ OMap k v → Int Source #

\(O(1)\).

empty ∷ OMap k v Source #

\(O(1)\).

singleton ∷ k → v → OMap k v Source #

\(O(1)\). Strict in its arguments.

lookup ∷ Ord k ⇒ k → OMap k v → Maybe v Source #

\(O(\log n)\). If the key is not present lookup returns Nothing.

member ∷ Ord k ⇒ k → OMap k v → Bool Source #

\(O(\log n)\). Key membership check.

(!?) ∷ Ord k ⇒ OMap k v → k → Maybe v Source #

fliped version of lookup

fromSet ∷ Ord k ⇒ Set (k, v) → OMap k v Source #

\(O(n \log n)\).

fromFoldable ∷ (Foldable f, Ord k) ⇒ f (k, v) → OMap k v Source #

\(O(n \log n)\). Checks membership before snoc'ing. De-duplicates the StrictSeq without overwriting. Starts from the left or head, using foldl'

fromFoldableDuplicates ∷ (Foldable f, Ord k, Ord v) ⇒ f (k, v) → (Set (k, v), OMap k v) Source #

\(O(n \log n)\). Checks membership before snoc'ing. De-duplicates the StrictSeq and collects and returns the duplicates found. Starts from the left or head, using foldl'

toMap ∷ OMap k v → Map k v Source #

\(O(1)\).

assocList ∷ Ord k ⇒ OMap k v → [(k, v)] Source #

elems ∷ Ord k ⇒ OMap k v → [v] Source #

toStrictSeq ∷ Ord k ⇒ OMap k v → StrictSeq v Source #

\(O(n \log n)\).

toStrictSeqOKeys ∷ OMap k v → StrictSeq k Source #

\(O(1)\).

toStrictSeqOfPairs ∷ Ord k ⇒ OMap k v → StrictSeq (k, v) Source #

\(O(n \log n)\).

invariantHolds ∷ OMap k v → Bool Source #

\(O(1)\). Shallow invariant using just length and size.

invariantHolds' ∷ Ord k ⇒ OMap k v → Bool Source #

\(O(n \log n)\). Deep, costly invariant using membership check for each value. By the pigeon-hole principle, this check is exhaustive.

(|>) ∷ Ord k ⇒ OMap k v → (k, v) → OMap k v infixl 5 Source #

\(O(\log n)\). Checks membership before snoc'ing.

(<|) ∷ Ord k ⇒ (k, v) → OMap k v → OMap k v infixr 5 Source #

\(O(\log n)\). Checks membership before cons'ing.

(<||) ∷ Ord k ⇒ (k, v) → OMap k v → OMap k v infixr 5 Source #

\(O(\log n)\). Checks membership before cons'ing. Overwrites a duplicate.

(||>) ∷ Ord k ⇒ OMap k v → (k, v) → OMap k v infixl 5 Source #

\(O(\log n)\). Checks membership before snoc'ing. Overwrites a duplicate.

(|><) ∷ Ord k ⇒ OMap k v → OMap k v → OMap k v infixl 5 Source #

\( O(n \log m) \). For every uncons-ed element from the sequence on the right, check its membership in the sequence on the left, before snoc'ing it. Preserve order. Remove duplicates from sequence on the right.

(><|) ∷ Ord k ⇒ OMap k v → OMap k v → OMap k v infixr 5 Source #

\( O(m \log n) \). For every unsnoc-ed element from the sequence on the left, check its membership in the sequence on the right, before cons'ing it. Preserve order. Remove duplicates from sequence on the left.

elem ∷ (Ord k, Eq v) ⇒ k → v → OMap k v → Bool Source #

\(O(\log n)\). Key-value pair membership check.

extractKeys ∷ Ord k ⇒ Set k → OMap k v → (OMap k v, Map k v) Source #

\(O(n)\). Given a Set of ks, and an OMap k v return a pair of Map and OMap where the ks in the Set have been removed from the OMap and presented as a separate Map.

adjust ∷ Ord k ⇒ (v → v) → k → OMap k v → OMap k v Source #

\(O(\log n)\). Like adjust.

Update a value at a specific key with the result of the provided function. Returns the original OMap unaltered when the key does not exist.

Examples:

>>> import Data.SimpleOMap.Strict
>>> let m = fromFoldable $ zip [1,2] ['a','b'] :: OMap Int Char
>>> m
StrictSeq {fromStrict = fromList [(1,'a'),(2,'b')]}
>>> adjust succ 1 m
StrictSeq {fromStrict = fromList [(1,'b'),(2,'b')]}
>>> adjust succ 3 m
StrictSeq {fromStrict = fromList [(1,'a'),(2,'b')]}

filter ∷ Ord k ⇒ (v → Bool) → OMap k v → OMap k v Source #

\( O(n \log n) \)

decodeOMap ∷ Ord k ⇒ Decoder s (k, v) → Decoder s (OMap k v) Source #