module Data.ReactiveLens where
import Control.Lens
import Data.ReactiveValue
reactiveFromLens :: (Monad m, Functor m)
=> ReactiveFieldReadWrite m a
-> Lens' a b
-> ReactiveFieldReadWrite m b
reactiveFromLens (ReactiveFieldReadWrite setter getter notifier) l =
ReactiveFieldReadWrite setter' getter' notifier
where setter' v = setter.(set l v) =<< getter
getter' = fmap (view l) getter
(<$$$>) :: (Monad m, Functor m)
=> Lens' a b -> ReactiveFieldReadWrite m a -> ReactiveFieldReadWrite m b
(<$$$>) l (ReactiveFieldReadWrite setter getter notifier) =
ReactiveFieldReadWrite setter' getter' notifier
where setter' v = setter.(set l v) =<< getter
getter' = fmap (view l) getter