Safe Haskell | None |
---|---|
Language | Haskell2010 |
- newtype Gadget s m a c = Gadget {}
- class HasGadget s a | s -> a where
- hoistGadget :: Monad m => (forall b. m b -> n b) -> Gadget s m a c -> Gadget s n a c
- _Gadget :: Iso (Gadget s m a c) (Gadget s' m' a' c') (a -> s -> m (c, s)) (a' -> s' -> m' (c', s'))
- _Gadget' :: Iso' (Gadget s m a c) (a -> s -> m (c, s))
Documentation
newtype Gadget s m a c Source #
The Elm update function is a -> s -> (s, c)
This is isomorphic to ReaderT a (State s) c
ie, given an action "a", and a current state "s", return the new state "s"
and any commands "c" that need to be interpreted externally (eg. download file).
This is named Gadget instead of Update to avoid confusion with update from Data.Map
hoistGadget :: Monad m => (forall b. m b -> n b) -> Gadget s m a c -> Gadget s n a c Source #
NB lift can be simulated: liftGadget :: (MonadTrans t, Monad m) => Gadget s m a c -> Gadget s (t m) a c liftGadget = _Wrapping Gadget %~ hoist (hoist lift)
_Gadget :: Iso (Gadget s m a c) (Gadget s' m' a' c') (a -> s -> m (c, s)) (a' -> s' -> m' (c', s')) Source #
This Iso gives the following functions:
underGadget :: (ReaderT a (StateT s m) c -> ReaderT a' (StateT s' m') c') -> Gadget s m a c -> Gadget s' m' a' c' underGadget f = _Wrapping Gadget %~ f overGadget :: (Gadget s m a c -> Gadget s' m' a' c') -> ReaderT a (StateT s m) c -> ReaderT a' (StateT s' m') c' overGadget f = _Unwrapping Gadget %~ f belowGadget :: (a -> s -> m (c, s)) (a' -> s' -> m' (c', s')) -> Gadget s m a c -> Gadget s' m' a' c' belowGadget f = _Gadget %~ f aboveGadget :: (Gadget s m a c -> Gadget s' m' a' c') -> (a -> s -> m (c, s)) (a' -> s' -> m' (c', s')) aboveGadget f = from _Gadget %~ f mkGadget' :: (a -> s -> m (c, s)) -> Gadget s m a c mkGadget' = review _Gadget runGadget' :: Gadget s m a c -> (a -> s -> m (c, s)) runGadget' = view _Gadget