{-# LANGUAGE Rank2Types #-}
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 m a
-> Lens' a b -> ReactiveFieldReadWrite m b
reactiveFromLens rv :: ReactiveFieldReadWrite m a
rv@(ReactiveFieldReadWrite FieldSetter m a
_setter FieldGetter m a
getter FieldNotifier m a
notifier) Lens' a b
l =
FieldSetter m b
-> FieldGetter m b
-> FieldNotifier m a
-> ReactiveFieldReadWrite m b
forall (m :: * -> *) a.
FieldSetter m a
-> FieldGetter m a
-> FieldNotifier m a
-> ReactiveFieldReadWrite m a
ReactiveFieldReadWrite FieldSetter m b
setter' FieldGetter m b
getter' FieldNotifier m a
notifier
where setter' :: FieldSetter m b
setter' b
v = ReactiveFieldReadWrite m a -> (a -> a) -> m ()
forall (m :: * -> *) a b.
(Monad m, ReactiveValueReadWrite a b m) =>
a -> (b -> b) -> m ()
reactiveValueModify ReactiveFieldReadWrite m a
rv (ASetter a a b b -> b -> a -> a
forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter a a b b
Lens' a b
l b
v)
getter' :: FieldGetter m b
getter' = (a -> b) -> FieldGetter m a -> FieldGetter m b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Getting b a b -> a -> b
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting b a b
Lens' a b
l) FieldGetter m a
getter
(<$$$>) :: (Monad m, Functor m)
=> Lens' a b -> ReactiveFieldReadWrite m a -> ReactiveFieldReadWrite m b
<$$$> :: Lens' a b
-> ReactiveFieldReadWrite m a -> ReactiveFieldReadWrite m b
(<$$$>) Lens' a b
l rv :: ReactiveFieldReadWrite m a
rv@(ReactiveFieldReadWrite FieldSetter m a
_setter FieldGetter m a
getter FieldNotifier m a
notifier) =
FieldSetter m b
-> FieldGetter m b
-> FieldNotifier m a
-> ReactiveFieldReadWrite m b
forall (m :: * -> *) a.
FieldSetter m a
-> FieldGetter m a
-> FieldNotifier m a
-> ReactiveFieldReadWrite m a
ReactiveFieldReadWrite FieldSetter m b
setter' FieldGetter m b
getter' FieldNotifier m a
notifier
where setter' :: FieldSetter m b
setter' b
v = ReactiveFieldReadWrite m a -> (a -> a) -> m ()
forall (m :: * -> *) a b.
(Monad m, ReactiveValueReadWrite a b m) =>
a -> (b -> b) -> m ()
reactiveValueModify ReactiveFieldReadWrite m a
rv (ASetter a a b b -> b -> a -> a
forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter a a b b
Lens' a b
l b
v)
getter' :: FieldGetter m b
getter' = (a -> b) -> FieldGetter m a -> FieldGetter m b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Getting b a b -> a -> b
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting b a b
Lens' a b
l) FieldGetter m a
getter