Some slide improvements
This commit is contained in:
parent
d9b75a78fe
commit
fadde0d137
1 changed files with 24 additions and 4 deletions
|
@ -37,7 +37,7 @@ title: Everything you didn't want to know about monad transformer state
|
||||||
|
|
||||||
*No trick question here*
|
*No trick question here*
|
||||||
|
|
||||||
* I have `foo :: IO a` and `bar :: IO b`. I want to run both at the same
|
I have `foo :: IO a` and `bar :: IO b`. I want to run both at the same
|
||||||
time in separate threads. How do I do that?
|
time in separate threads. How do I do that?
|
||||||
|
|
||||||
```haskell
|
```haskell
|
||||||
|
@ -48,16 +48,35 @@ concurrently foo bar :: IO (a, b)
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
## An extra argument
|
||||||
|
|
||||||
|
Let's slightly modify things:
|
||||||
|
|
||||||
|
```haskell
|
||||||
|
foo :: MyEnv -> IO a
|
||||||
|
bar :: MyEnv -> IO b
|
||||||
|
|
||||||
|
baz :: MyEnv -> IO (a, b)
|
||||||
|
baz myEnv = concurrently (foo myEnv) (bar myEnv)
|
||||||
|
```
|
||||||
|
|
||||||
|
So far so good?
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
## What about ReaderT?
|
## What about ReaderT?
|
||||||
|
|
||||||
* Let's change the game a bit:
|
Explicit arguments are so boring! Let's move over to `ReaderT`.
|
||||||
|
|
||||||
```haskell
|
```haskell
|
||||||
foo :: ReaderT MyEnv IO a
|
foo :: ReaderT MyEnv IO a
|
||||||
bar :: ReaderT MyEnv IO b
|
bar :: ReaderT MyEnv IO b
|
||||||
|
|
||||||
|
baz :: ReaderT MyEnv IO (a, b)
|
||||||
|
baz = concurrently foo bar -- bad!
|
||||||
```
|
```
|
||||||
|
|
||||||
* Now `concurrently` doesn't type match!
|
* Now `concurrently` doesn't type check!
|
||||||
* Can we make this work anyway?
|
* Can we make this work anyway?
|
||||||
|
|
||||||
----
|
----
|
||||||
|
@ -137,7 +156,8 @@ main = do
|
||||||
print res
|
print res
|
||||||
```
|
```
|
||||||
|
|
||||||
What happened to 3?
|
* Outputs `4`
|
||||||
|
* What happened to `3`?
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue