[Haskell-cafe] FRP: Why is Behavior not a Monad?
martin.drautzburg at web.de
Sat Jan 20 14:00:27 UTC 2018
it appears to be difficult to define a Monad instance for Behavior and in many (if not all) reactive libraries Behavior
is not a Monad. Why is that so?
If a Beahvior is conceptionally a function from Time to something,
newtype Behavior a = Behavior (Time -> a)
then its Monad instance should work like a Reader Monad.
Alternatively one can look at the join function
join :: Behavior (Behavior a) -> Behavior a.
This corresponds to the situation where you switch between Channels on a TV remote controle and each Channel is a
behavior of Image. Then
join Behavior (Behavior image)
should give you the video stream you see on the screen. How can one possibly live without this operation?
I assume this has something to do with the actual implementation and not so much with the semantics, because
semantically I don't see any problems.
- why is Behavior not a Monad and
- how would you express the TV-remote example without a Monad?
More information about the Haskell-Cafe