Safe Haskell | Safe |
---|---|

Language | Haskell2010 |

## Synopsis

- newtype CaseFunc (k :: Type -> Constraint) r (xs :: [Type]) = CaseFunc (forall x. k x => x -> r)
- newtype CaseFunc' (k :: Type -> Constraint) (xs :: [Type]) = CaseFunc' (forall x. k x => x -> x)
- newtype CaseFunc1 (k :: Type -> Constraint) (k1 :: (Type -> Type) -> Constraint) (k0 :: Type -> Constraint) r (xs :: [Type]) = CaseFunc1 (forall f x. (k (f x), k1 f, k0 x) => f x -> f r)
- newtype CaseFunc1_ (k :: Type -> Constraint) (k1 :: (Type -> Type) -> Constraint) (k0 :: Type -> Constraint) r x (xs :: [Type]) = CaseFunc1_ (forall f. (k (f x), k1 f, k0 x) => f x -> f r)
- newtype CaseFunc1' (k :: Type -> Constraint) (k1 :: (Type -> Type) -> Constraint) (k0 :: Type -> Constraint) (xs :: [Type]) = CaseFunc1' (forall f x. (k (f x), k1 f, k0 x) => f x -> f x)

# Documentation

newtype CaseFunc (k :: Type -> Constraint) r (xs :: [Type]) Source #

This handler stores a polymorphic function that returns a different type.

let y =`pick`

(5 :: Int) ::`Which`

'[Int, Bool]`switch`

y (`CaseFunc`

@`Typeable`

(show . typeRep . (pure @Proxy))) `shouldBe` Int

let x = (5 :: Int)`./`

False`./`

'X'`./`

Just 'O'`./`

(6 :: Int)`./`

Just 'A'`./`

`nul`

`afoldr`

(:) [] (`forMany`

(`CaseFunc`

@`Typeable`

(show . typeRep . (pure @Proxy))) x) `shouldBe` ["Int", "Bool", "Char", "Maybe Char", "Int", "Maybe Char"]

CaseFunc (forall x. k x => x -> r) |

newtype CaseFunc' (k :: Type -> Constraint) (xs :: [Type]) Source #

This handler stores a polymorphic function that doesn't change the type.

let x = (5 :: Int)`./`

(6 :: Int8)`./`

(7 :: Int16)`./`

(8 :: Int32)`./`

`nil`

y = (15 :: Int)`./`

(16 :: Int8)`./`

(17 :: Int16)`./`

(18 :: Int32)`./`

`nil`

`afmap`

(`CaseFunc'`

@`Num`

(+10)) x `shouldBe` y

CaseFunc' (forall x. k x => x -> x) |

newtype CaseFunc1 (k :: Type -> Constraint) (k1 :: (Type -> Type) -> Constraint) (k0 :: Type -> Constraint) r (xs :: [Type]) Source #

This handler stores a polymorphic function that work on higher kinds, eg `Functor`

You may want to use `C0 for `

k@

CaseFunc1 (forall f x. (k (f x), k1 f, k0 x) => f x -> f r) |

newtype CaseFunc1_ (k :: Type -> Constraint) (k1 :: (Type -> Type) -> Constraint) (k0 :: Type -> Constraint) r x (xs :: [Type]) Source #

CaseFunc1_ (forall f. (k (f x), k1 f, k0 x) => f x -> f r) |

## Instances

Reiterate (CaseFunc1_ k k1 k0 r x) xs Source # | |

Defined in Data.Diverse.CaseFunc reiterate :: CaseFunc1_ k k1 k0 r x xs -> CaseFunc1_ k k1 k0 r x (Tail xs) Source # | |

(k (f x), k1 f, k0 x) => Case (CaseFunc1_ k k1 k0 r x) (f x ': xs) Source # | |

Defined in Data.Diverse.CaseFunc case' :: CaseFunc1_ k k1 k0 r x (f x ': xs) -> Head (f x ': xs) -> CaseResult (CaseFunc1_ k k1 k0 r x) (Head (f x ': xs)) Source # | |

type CaseResult (CaseFunc1_ k k1 k0 r x :: [Type] -> Type) (f x :: Type) Source # | |

Defined in Data.Diverse.CaseFunc |

newtype CaseFunc1' (k :: Type -> Constraint) (k1 :: (Type -> Type) -> Constraint) (k0 :: Type -> Constraint) (xs :: [Type]) Source #

A varation of `CaseFunc1`

that doesn't change the return type

CaseFunc1' (forall f x. (k (f x), k1 f, k0 x) => f x -> f x) |

## Instances

Reiterate (CaseFunc1' k k1 k0) xs Source # | |

Defined in Data.Diverse.CaseFunc reiterate :: CaseFunc1' k k1 k0 xs -> CaseFunc1' k k1 k0 (Tail xs) Source # | |

(k (f x), k1 f, k0 x) => Case (CaseFunc1' k k1 k0) (f x ': xs) Source # | |

Defined in Data.Diverse.CaseFunc case' :: CaseFunc1' k k1 k0 (f x ': xs) -> Head (f x ': xs) -> CaseResult (CaseFunc1' k k1 k0) (Head (f x ': xs)) Source # | |

type CaseResult (CaseFunc1' k k1 k0 :: [Type] -> Type) (f x :: Type) Source # | |

Defined in Data.Diverse.CaseFunc |