ouroboros-consensus-0.1.0.2: Consensus layer for the Ouroboros blockchain protocol
Safe HaskellNone
LanguageHaskell2010

Ouroboros.Consensus.Util.OptNP

Description

NP with optional values

Intended for qualified import

import           Ouroboros.Consensus.Util.OptNP (OptNP (..), ViewOptNP (..))
import qualified Ouroboros.Consensus.Util.OptNP as OptNP
Synopsis

Documentation

data OptNP (empty ∷ Bool) (f ∷ k → Type) (xs ∷ [k]) where Source #

Like an NP, but with optional values

Constructors

OptNilOptNP 'True f '[] 
OptCons ∷ !(f x) → !(OptNP empty f xs) → OptNP 'False f (x ': xs) 
OptSkip ∷ !(OptNP empty f xs) → OptNP empty f (x ': xs) 

Instances

Instances details
HAp (OptNP empty ∷ (k → Type) → [k] → Type) Source # 
Instance details

Defined in Ouroboros.Consensus.Util.OptNP

Methods

hap ∷ ∀ (f ∷ k0 → Type) (g ∷ k0 → Type) (xs ∷ l). Prod (OptNP empty) (f -.-> g) xs → OptNP empty f xs → OptNP empty g xs #

HSequence (OptNP empty ∷ (k → Type) → [k] → Type) Source # 
Instance details

Defined in Ouroboros.Consensus.Util.OptNP

Methods

hsequence' ∷ ∀ (xs ∷ l) f (g ∷ k0 → Type). (SListIN (OptNP empty) xs, Applicative f) ⇒ OptNP empty (f :.: g) xs → f (OptNP empty g xs) #

hctraverse' ∷ ∀ c (xs ∷ l) g proxy f f'. (AllN (OptNP empty) c xs, Applicative g) ⇒ proxy c → (∀ (a ∷ k0). c a ⇒ f a → g (f' a)) → OptNP empty f xs → g (OptNP empty f' xs) #

htraverse' ∷ ∀ (xs ∷ l) g f f'. (SListIN (OptNP empty) xs, Applicative g) ⇒ (∀ (a ∷ k0). f a → g (f' a)) → OptNP empty f xs → g (OptNP empty f' xs) #

All (Compose Eq f) xs ⇒ Eq (OptNP empty f xs) Source # 
Instance details

Defined in Ouroboros.Consensus.Util.OptNP

Methods

(==)OptNP empty f xs → OptNP empty f xs → Bool Source #

(/=)OptNP empty f xs → OptNP empty f xs → Bool Source #

All (Compose Show f) xs ⇒ Show (OptNP empty f xs) Source # 
Instance details

Defined in Ouroboros.Consensus.Util.OptNP

Methods

showsPrecIntOptNP empty f xs → ShowS Source #

showOptNP empty f xs → String Source #

showList ∷ [OptNP empty f xs] → ShowS Source #

type Prod (OptNP empty ∷ (k → Type) → [k] → Type) Source # 
Instance details

Defined in Ouroboros.Consensus.Util.OptNP

type Prod (OptNP empty ∷ (k → Type) → [k] → Type) = NP ∷ (k → Type) → [k] → Type
type SListIN (OptNP empty ∷ (k → Type) → [k] → Type) Source # 
Instance details

Defined in Ouroboros.Consensus.Util.OptNP

type SListIN (OptNP empty ∷ (k → Type) → [k] → Type) = SListI ∷ [k] → Constraint
type AllN (OptNP empty ∷ (k → Type) → [k] → Type) (c ∷ k → Constraint) Source # 
Instance details

Defined in Ouroboros.Consensus.Util.OptNP

type AllN (OptNP empty ∷ (k → Type) → [k] → Type) (c ∷ k → Constraint) = All c

atSListI xs ⇒ f x → Index xs x → NonEmptyOptNP f xs Source #

empty ∷ ∀ f xs. SListI xs ⇒ OptNP 'True f xs Source #

fromNP ∷ (∀ empty. OptNP empty f xs → r) → NP f xs → r Source #

fromNonEmptyNP ∷ ∀ f xs. IsNonEmpty xs ⇒ NP f xs → NonEmptyOptNP f xs Source #

fromSingletonNonEmptyOptNP f '[x] → f x Source #

If OptNP is not empty, it must contain at least one value

singleton ∷ f x → NonEmptyOptNP f '[x] Source #

toNPOptNP empty f xs → NP (Maybe :.: f) xs Source #

View

data ViewOptNP f xs where Source #

Constructors

OptNP_ExactlyOne ∷ f x → ViewOptNP f '[x] 
OptNP_AtLeastTwoViewOptNP f (x ': (y ': zs)) 

view ∷ ∀ f xs. NonEmptyOptNP f xs → ViewOptNP f xs Source #

Combining

combine ∷ ∀ (f ∷ TypeType) xs. (SListI xs, HasCallStack) ⇒ Maybe (NonEmptyOptNP f xs) → Maybe (NonEmptyOptNP f xs) → Maybe (NonEmptyOptNP f xs) Source #

Precondition: there is no overlap between the two given lists: if there is a Just at a given position in one, it must be Nothing at the same position in the other.

combineWithSListI xs ⇒ (∀ a. These1 f g a → h a) → Maybe (NonEmptyOptNP f xs) → Maybe (NonEmptyOptNP g xs) → Maybe (NonEmptyOptNP h xs) Source #

zipWith ∷ ∀ f g h xs. (∀ a. These1 f g a → h a) → NonEmptyOptNP f xs → NonEmptyOptNP g xs → NonEmptyOptNP h xs Source #