Home

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"