{-# LANGUAGE RankNTypes #-}
module Data.ProtoLens.Combinators
( has
, clear
, make
, modifyInState
) where
import Control.Monad.Trans.State (State, execState)
import Data.ProtoLens (Message(..))
import Data.Maybe (isJust)
import Lens.Family2 (LensLike, Phantom, Setter, to, (.~))
has :: Phantom f => LensLike f a a' (Maybe b) b' -> LensLike f a a' Bool b''
has :: forall (f :: * -> *) a a' b b' b''.
Phantom f =>
LensLike f a a' (Maybe b) b' -> LensLike f a a' Bool b''
has = (forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall s a t b. (s -> a) -> Getter s t a b
to forall a. Maybe a -> Bool
isJust)
clear :: Setter a a' b (Maybe b') -> a -> a'
clear :: forall a a' b b'. Setter a a' b (Maybe b') -> a -> a'
clear Setter a a' b (Maybe b')
setter = Setter a a' b (Maybe b')
setter forall s t a b. Setter s t a b -> b -> s -> t
.~ forall a. Maybe a
Nothing
make :: Message msg => State msg a -> msg
make :: forall msg a. Message msg => State msg a -> msg
make = forall s a. s -> State s a -> s
modifyInState forall msg. Message msg => msg
defMessage
modifyInState :: s -> State s a -> s
modifyInState :: forall s a. s -> State s a -> s
modifyInState = forall a b c. (a -> b -> c) -> b -> a -> c
flip forall s a. State s a -> s -> s
execState