Safe Haskell | None |
---|---|
Language | Haskell2010 |
Documentation
newtype Cases fs xs r Source #
Contains a Many
of handlers/continuations for all the types in the xs
typelist.
This uses fetch
to get the unique handler for the type at the Head
of xs
.
Use cases
to construct this with SameLength
constraint to reduce programming confusion.
However, the Cases
constructor is still exported to allow creating a master-of-all-Case
.
cases :: SameLength fs (Distinct xs) => Many fs -> Cases fs xs r Source #
Create an instance of Case
for either handling switch
ing a Which
.
let y =pick
(5 :: Int) ::Which
'[Int, Bool]switch
y (cases
(show @Bool./
show @Int./
nul
)) `shouldBe` "5"
Or for handling collect
from a Many
.
let x = (5 :: Int)./
False./
'X'./
Just 'O'./
(6 :: Int)./
Just 'A'./
nul
y = show @Int./
show @Char./
show @(Maybe Char)./
show @Bool./
nul
afoldr
(:) [] (collect
x (cases
y)) `shouldBe` ["5", "False", "X
", "Just 'O'", "6", "Just 'A'"]
This function imposes additional SameLength
constraints than when using the Cases
constructor directly.
It is better practice to use cases
to prevent programming confusion with dead code.
However, the Cases
constructor is still exported to allow creating a master-of-all-Case
.
casesN :: SameLength fs xs => Many fs -> CasesN fs 0 xs r Source #
Safe Constructor for CasesN
ensuring that the n
Nat starts at 0.
It is an instance of CaseN
for either handling switchN
ing a Which
in index order.
let y =pickN
@0 Proxy (5 :: Int) :: Which '[Int, Bool, Bool, Int]switchN
y (casesN
(show @Int./
show @Bool./
show @Bool./
show @Int./
nul
)) `shouldBe` "5"
Or for handling collectN
from a Many
.
let x = (5 :: Int)./
False./
'X'./
Just 'O'./
(6 :: Int)./
Just 'A'./
nul
y = show @Int./
show @Bool./
show @Char./
show @(Maybe Char)./
show @Int./
show @(Maybe Char)./
nul
afoldr
(:) [] (collectN
x (casesN
y)) `shouldBe` ["5", "False", "X
", "Just 'O'", "6", "Just 'A'"]