Update tutorial (NT changes)
This commit is contained in:
parent
b1ac9dc450
commit
34166ae749
1 changed files with 6 additions and 6 deletions
|
@ -1044,17 +1044,17 @@ If we have a function that gets us from an `m a` to an `n a`, for any `a`, what
|
||||||
do we have?
|
do we have?
|
||||||
|
|
||||||
``` haskell ignore
|
``` haskell ignore
|
||||||
newtype m :~> n = Nat { unNat :: forall a. m a -> n a}
|
newtype m :~> n = NT { ($$) :: forall a. m a -> n a}
|
||||||
```
|
```
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
``` haskell
|
``` haskell
|
||||||
listToMaybeNat :: [] :~> Maybe
|
listToMaybeNT :: [] :~> Maybe
|
||||||
listToMaybeNat = Nat listToMaybe -- from Data.Maybe
|
listToMaybeNT = NT listToMaybe -- from Data.Maybe
|
||||||
```
|
```
|
||||||
|
|
||||||
(`Nat` comes from "natural transformation", in case you're wondering.)
|
(`NT` comes from "natural transformation", in case you're wondering.)
|
||||||
|
|
||||||
So if you want to write handlers using another monad/type than `Handler`, say the `Reader String` monad, the first thing you have to
|
So if you want to write handlers using another monad/type than `Handler`, say the `Reader String` monad, the first thing you have to
|
||||||
prepare is a function:
|
prepare is a function:
|
||||||
|
@ -1066,14 +1066,14 @@ readerToHandler :: Reader String :~> Handler
|
||||||
Let's start with `readerToHandler'`. We obviously have to run the `Reader`
|
Let's start with `readerToHandler'`. We obviously have to run the `Reader`
|
||||||
computation by supplying it with a `String`, like `"hi"`. We get an `a` out
|
computation by supplying it with a `String`, like `"hi"`. We get an `a` out
|
||||||
from that and can then just `return` it into `ExceptT`. We can then just wrap
|
from that and can then just `return` it into `ExceptT`. We can then just wrap
|
||||||
that function with the `Nat` constructor to make it have the fancier type.
|
that function with the `NT` constructor to make it have the fancier type.
|
||||||
|
|
||||||
``` haskell
|
``` haskell
|
||||||
readerToHandler' :: forall a. Reader String a -> Handler a
|
readerToHandler' :: forall a. Reader String a -> Handler a
|
||||||
readerToHandler' r = return (runReader r "hi")
|
readerToHandler' r = return (runReader r "hi")
|
||||||
|
|
||||||
readerToHandler :: Reader String :~> Handler
|
readerToHandler :: Reader String :~> Handler
|
||||||
readerToHandler = Nat readerToHandler'
|
readerToHandler = NT readerToHandler'
|
||||||
```
|
```
|
||||||
|
|
||||||
We can write some simple webservice with the handlers running in `Reader String`.
|
We can write some simple webservice with the handlers running in `Reader String`.
|
||||||
|
|
Loading…
Reference in a new issue