hoistCofree' :: forall state f. Functor f => (f (Cofree f state) -> f (Cofree f state)) -> Cofree f state -> Cofree f state
A version of
nat does not need to come from
a natural transformation. This corresponds to
in the redux library.
You can use this function to add effects to your interpreter, like
logging, optimistic updates, undo/redo stack, delayed actions...
mkIncInterp :: forall f state. Functor f => Store state -> Cofree f state -> Cofree f state
Make interpreter which updates the store on every step of computation.
You have to supply the store and interperter of type
Cofree f state.
Check out tests how you can use it. Note that it does not run
runSubscriptions for that.
runSubscriptions :: forall f state. Functor f => Store state -> Cofree f state -> Cofree f state
Run subscriptions on each leaf of the
Cofree interpreter. You'll likely
want to use
mkIncInterp first so that the subscriptions run on the updated
runSubscriptions store <<< mkIncInterp store
or even better
hoistCofree' (map $ runSubscriptionsNat store <<< mkIncInterpNat store)
Add logger to the interpreter which logs updates on each leaf.
Note that leaves of the cofree interpreter might be visited more often
than when subsciptions run. If you are using
runSubscriptions the store will be updated only when
Free DSL are reached, while this logger will log on
every leaf of your cofree interpreter.