sop-extras-0.2.0.0: Type-level and data utilities that build upon SOP.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.SOP.OptNP

Description

NP with optional values

Intended for qualified import

import           Data.SOP.OptNP (OptNP (..), ViewOptNP (..))
import qualified Data.SOP.OptNP as OptNP
Synopsis

Documentation

data OptNP empty f xs 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
HTrans (OptNP empty ∷ (k1 → Type) → [k1] → Type) (OptNP empty ∷ (k2 → Type) → [k2] → Type) Source # 
Instance details

Defined in Data.SOP.OptNP

Methods

htrans ∷ ∀ c (xs ∷ l1) (ys ∷ l2) proxy f g. AllZipN (Prod (OptNP empty)) c xs ys ⇒ proxy c → (∀ (x ∷ k10) (y ∷ k20). c x y ⇒ f x → g y) → OptNP empty f xs → OptNP empty g ys Source #

hcoerce ∷ ∀ (f ∷ k10 → Type) (g ∷ k20 → Type) (xs ∷ l1) (ys ∷ l2). AllZipN (Prod (OptNP empty)) (LiftedCoercible f g) xs ys ⇒ OptNP empty f xs → OptNP empty g ys Source #

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

Defined in Data.SOP.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 Source #

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

Defined in Data.SOP.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) Source #

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) Source #

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) Source #

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

Defined in Data.SOP.OptNP

Methods

showsPrecIntOptNP empty f xs → ShowS #

showOptNP empty f xs → String #

showList ∷ [OptNP empty f xs] → ShowS #

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

Defined in Data.SOP.OptNP

Methods

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

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

type Same (OptNP empty ∷ (k1 → Type) → [k1] → Type) Source # 
Instance details

Defined in Data.SOP.OptNP

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

Defined in Data.SOP.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 Data.SOP.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 Data.SOP.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 #