Awesome
Make your actions to be observable and listen to events from them, algebraically.
Let's imagine simple example: we want to listen to STDIN. We have getLine
function that can capture a list of ASCII-symbols - all we need is to make this action to be observable.
obs :: Monad f => f a -> Observable f a r
Good, now we want to subscribe on events and set up callback, if we want to listen to events forever, we need subscribe
function:
subscribe :: Applicative f => Observable f a r -> (a -> f r) -> f r
First, we make action to be observable, then set up callback and at the end, subscribe on events:
subscribe (obs getLine) handler
Our handler will count amount of characters in strings and send this into STDOUT:
handler = print . (<>) "Length of string was: " . show . length
Let's try it out:
> hello, my dear friend!
> "Length of string was: 22"