data-diverse-0.10.0.0: Extensible records and polymorphic variants.

Safe HaskellSafe
LanguageHaskell2010

Data.Diverse.Reduce

Synopsis

Documentation

type family Reduced handler Source #

Convert something v into r using handlers. This class is required in order to step through all the different types in a variant.

Instances

type Reduced (Switcher c xs r) Source # 
type Reduced (Switcher c xs r) = r
type Reduced (SwitcherN c n xs r) Source # 
type Reduced (SwitcherN c n xs r) = r

class Reduce v handler where Source #

Minimal complete definition

reduce

Methods

reduce :: handler -> v -> Reduced handler Source #

Instances

Case c ((:) Type x ([] Type)) r => Reduce (Which ((:) Type x ([] Type))) (Switcher c ((:) Type x ([] Type)) r) Source #

Terminating case of the loop, ensuring that a instance of Case '[] with an empty typelist is not required. You can't reduce zilch

Methods

reduce :: Switcher c ((Type ': x) [Type]) r -> Which ((Type ': x) [Type]) -> Reduced (Switcher c ((Type ': x) [Type]) r) Source #

(Case c ((:) Type x ((:) Type x' xs)) r, Reduce (Which ((:) Type x' xs)) (Switcher c ((:) Type x' xs) r), Reiterate * c ((:) Type x ((:) Type x' xs))) => Reduce (Which ((:) Type x ((:) Type x' xs))) (Switcher c ((:) Type x ((:) Type x' xs)) r) Source #

trial0 each type in a Which, and either handle the case' with value discovered, or reiterate trying the next type in the type list.

Methods

reduce :: Switcher c ((Type ': x) ((Type ': x') xs)) r -> Which ((Type ': x) ((Type ': x') xs)) -> Reduced (Switcher c ((Type ': x) ((Type ': x') xs)) r) Source #

Case (c n) ((:) Type x ([] Type)) r => Reduce (Which ((:) Type x ([] Type))) (SwitcherN c n ((:) Type x ([] Type)) r) Source #

Terminating case of the loop, ensuring that a instance of Case '[] with an empty typelist is not required. You can't reduce zilch

Methods

reduce :: SwitcherN c n ((Type ': x) [Type]) r -> Which ((Type ': x) [Type]) -> Reduced (SwitcherN c n ((Type ': x) [Type]) r) Source #

(Case (c n) ((:) Type x ((:) Type x' xs)) r, Reduce (Which ((:) Type x' xs)) (SwitcherN c ((+) n 1) ((:) Type x' xs) r), ReiterateN * c n ((:) Type x ((:) Type x' xs))) => Reduce (Which ((:) Type x ((:) Type x' xs))) (SwitcherN c n ((:) Type x ((:) Type x' xs)) r) Source #

trial0 each type in a Which, and either handle the case' with value discovered, or reiterateN trying the next type in the type list.

Methods

reduce :: SwitcherN c n ((Type ': x) ((Type ': x') xs)) r -> Which ((Type ': x) ((Type ': x') xs)) -> Reduced (SwitcherN c n ((Type ': x) ((Type ': x') xs)) r) Source #