-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Routing and retractable back button for reflex-dom -- -- Library that automates widget switches and back button retract stack. -- See README.md @package reflex-dom-retractable @version 0.1.7.0 -- | Tagless final interface to the retractable stack of widgets. To use -- the API drop retractStack into your code where you want to -- display widgets with history. For instance, turn all your frontend -- into retractable widget: -- --
--   import Control.Monad
--   import Reflex.Dom
--   import Reflex.Dom.Retractable.Class
--   
--   frontend :: (MonadWidget t m, MonadRetract t m) => m ()
--   frontend = void $ retractStack $ pageA 42
--   
--   pageA :: (MonadWidget t m, MonadRetract t m) => Int -> m ()
--   pageA n = do
--      e <- button "Go page B"
--      void $ nextWidget $ ffor e $ const Retractable {
--          retractableNext = pageB $ n + 1
--        , retractablePrev = Just $ pure $ pageA n
--        }
--   
--   pageB :: (MonadWidget t m, MonadRetract t m) => Int -> m ()
--   pageB n = do
--     e <- button "Go page A"
--     void $ nextWidget $ ffor e $ const  Retractable {
--          retractableNext = pageA $ n + 1
--        , retractablePrev = Just $ pure $ pageB n
--        }
--   
module Reflex.Dom.Retractable.Class -- | Information about widget that attaches information how to return to -- the widget. data Retractable t m Retractable :: m () -> Maybe (Dynamic t (m ())) -> Retractable t m -- | Which widget we are switching in [retractableNext] :: Retractable t m -> m () -- | Possible return to the current widget. Nothing means that the -- current widget is not rembered in retract stack and is forgoten. -- Dynamic allows to save internal state of widget on return. [retractablePrev] :: Retractable t m -> Maybe (Dynamic t (m ())) -- | Helper to transform underlying monad in Retractable morphRetractable :: Reflex t => (forall a. n a -> m a) -> Retractable t n -> Retractable t m -- | Defines context of widget that can switch control to next widget and -- can be returned back with preserving of state. class (MonadHold t m, MonadFix m, Reflex t, Adjustable t m) => MonadRetract t m -- | Switch current widget to the next widget. Returns event that fires -- when the switching is about to happen. nextWidget :: MonadRetract t m => Event t (Retractable t m) -> m (Event t ()) -- | Switch to previous widget in stack. Returns event that fires when the -- switchin is about to happen. retract :: MonadRetract t m => Event t () -> m (Event t ()) -- | Wipe retract history to the given amount of items (or all if -- Nothing is passed). Returns event that fires when the history -- was changed. wipeRetract :: MonadRetract t m => Event t (Maybe Int) -> m (Event t ()) -- | Get event that fires when any of input events in nextWidget is -- triggered. It's used for implementation of retractable stack. nextWidgetEvent :: MonadRetract t m => m (Event t (Retractable t m)) -- | Get event that fires when any of input events in retract is -- triggered. It's used for implementation of retractable stack. retractEvent :: MonadRetract t m => m (Event t ()) -- | Get event that fires when any of input events in wipeRetract is -- triggered. It's used for implementation of retractable stack. wipeRetractEvent :: MonadRetract t m => m (Event t (Maybe Int)) -- | Get current stack of widget history getRetractStack :: MonadRetract t m => m (Dynamic t [Retractable t m]) -- | Execute subcomputation with given widget history. Affects results of -- getRetractStack. withRetractStack :: MonadRetract t m => Dynamic t [Retractable t m] -> m a -> m a -- | All body of the widget will be rerendered when some subcomputation -- emits switching event. Plug the function somewhere close to the root -- of your reflex frontend and use functions from MonadRetract -- class to control switching content of the widget. retractStack :: forall t m. MonadRetract t m => m () -> m (Event t ()) instance GHC.Generics.Generic (Reflex.Dom.Retractable.Class.Retractable t m) instance Reflex.Dom.Retractable.Class.MonadRetract t m => Reflex.Dom.Retractable.Class.MonadRetract t (Control.Monad.Trans.Reader.ReaderT r m) -- | Plug-in implementation for MonadRetract using wrapper around -- ReaderT. Internal module, implementation details can be changed -- at any moment. module Reflex.Dom.Retractable.Trans.Internal -- | Helper to simplify types in RetractEnv type RetractableT t m = Retractable t (RetractT t m) -- | Internal state of retractable widget data RetractEnv t m RetractEnv :: !RetractableT t m -> IO () -> !Event t (RetractableT t m) -> !IO () -> !Event t () -> !Maybe Int -> IO () -> !Event t (Maybe Int) -> !Dynamic t [RetractableT t m] -> RetractEnv t m [renvNextFire] :: RetractEnv t m -> !RetractableT t m -> IO () [renvNextEvent] :: RetractEnv t m -> !Event t (RetractableT t m) [renvRetractFire] :: RetractEnv t m -> !IO () [renvRetractEvent] :: RetractEnv t m -> !Event t () [renvWipeFire] :: RetractEnv t m -> !Maybe Int -> IO () [renvWipeEvent] :: RetractEnv t m -> !Event t (Maybe Int) [renvStack] :: RetractEnv t m -> !Dynamic t [RetractableT t m] -- | Allocate new environment for RetractT. newRetractEnv :: (Reflex t, TriggerEvent t m) => m (RetractEnv t m) -- | Plug-in implementation of MonadRetract. newtype RetractT t m a RetractT :: ReaderT (RetractEnv t m) m a -> RetractT t m a [unRetractT] :: RetractT t m a -> ReaderT (RetractEnv t m) m a -- | Execute retractable widget with given environment. runRetractT :: RetractT t m a -> RetractEnv t m -> m a -- | Simplified version of runRetractT runRetract :: (Reflex t, TriggerEvent t m) => RetractT t m a -> m a instance GHC.Generics.Generic (Reflex.Dom.Retractable.Trans.Internal.RetractEnv t m) instance Reflex.Dom.Builder.Class.HasDocument m => Reflex.Dom.Builder.Class.HasDocument (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Foreign.JavaScript.TH.HasJSContext m => Foreign.JavaScript.TH.HasJSContext (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Control.Monad.Ref.MonadRef m => Control.Monad.Ref.MonadRef (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance GHC.Generics.Generic (Reflex.Dom.Retractable.Trans.Internal.RetractT t m a) instance GHC.Base.Monad m => GHC.Base.Monad (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance GHC.Base.Applicative m => GHC.Base.Applicative (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance GHC.Base.Functor m => GHC.Base.Functor (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Reflex.PostBuild.Class.PostBuild t m => Reflex.PostBuild.Class.PostBuild t (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Reflex.NotReady.Class.NotReady t m => Reflex.NotReady.Class.NotReady t (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Reflex.PerformEvent.Class.PerformEvent t m => Reflex.PerformEvent.Class.PerformEvent t (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Reflex.TriggerEvent.Class.TriggerEvent t m => Reflex.TriggerEvent.Class.TriggerEvent t (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Reflex.Class.MonadHold t m => Reflex.Class.MonadHold t (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Reflex.Class.MonadSample t m => Reflex.Class.MonadSample t (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Reflex.Dom.Builder.Class.DomBuilder t m => Reflex.Dom.Builder.Class.DomBuilder t (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Language.Javascript.JSaddle.Types.MonadJSM m => Language.Javascript.JSaddle.Types.MonadJSM (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance (Data.Patch.Group q, Data.Patch.Additive q, Reflex.Query.Class.Query q, GHC.Classes.Eq q, Reflex.Query.Class.MonadQuery t q m, GHC.Base.Monad m) => Reflex.Query.Class.MonadQuery t q (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance (GHC.Base.Monoid w, Reflex.DynamicWriter.Class.DynamicWriter t w m) => Reflex.DynamicWriter.Class.DynamicWriter t w (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance (GHC.Base.Monoid w, Reflex.BehaviorWriter.Class.MonadBehaviorWriter t w m) => Reflex.BehaviorWriter.Class.MonadBehaviorWriter t w (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance (GHC.Base.Semigroup w, Reflex.EventWriter.Class.EventWriter t w m) => Reflex.EventWriter.Class.EventWriter t w (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Reflex.Requester.Class.Requester t m => Reflex.Requester.Class.Requester t (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Reflex.Host.Class.MonadReflexCreateTrigger t m => Reflex.Host.Class.MonadReflexCreateTrigger t (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Control.Monad.Trans.Class.MonadTrans (Reflex.Dom.Retractable.Trans.Internal.RetractT t) instance Control.Monad.Reader.Class.MonadReader e m => Control.Monad.Reader.Class.MonadReader e (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance Reflex.Adjustable.Class.Adjustable t m => Reflex.Adjustable.Class.Adjustable t (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) instance (Reflex.PerformEvent.Class.PerformEvent t m, Reflex.Class.MonadHold t m, Reflex.Adjustable.Class.Adjustable t m, Control.Monad.Fix.MonadFix m, Control.Monad.IO.Class.MonadIO (Reflex.PerformEvent.Class.Performable m)) => Reflex.Dom.Retractable.Class.MonadRetract t (Reflex.Dom.Retractable.Trans.Internal.RetractT t m) -- | Plug-in implementation for MonadRetract using wrapper around -- ReaderT. -- -- Example of use: -- --
--   import Control.Monad
--   import Reflex.Dom
--   import Reflex.Dom.Retractable
--   
--   main :: IO ()
--   main = mainWidget $ runRetract frontend
--   
--   frontend :: (MonadWidget t m, MonadRetract t m) => m ()
--   frontend = void $ retractStack $ pageA 42
--   
--   pageA :: (MonadWidget t m, MonadRetract t m) => Int -> m ()
--   pageA n = do
--      e <- button "Go page B"
--      void $ nextWidget $ ffor e $ const Retractable {
--          retractableNext = pageB $ n + 1
--        , retractablePrev = Just $ pure $ pageA n
--        }
--   
--   pageB :: (MonadWidget t m, MonadRetract t m) => Int -> m ()
--   pageB n = do
--     e <- button "Go page A"
--     void $ nextWidget $ ffor e $ const  Retractable {
--          retractableNext = pageA $ n + 1
--        , retractablePrev = Just $ pure $ pageB n
--        }
--   
module Reflex.Dom.Retractable.Trans -- | Plug-in implementation of MonadRetract. data RetractT t m a -- | Internal state of retractable widget data RetractEnv t m -- | Allocate new environment for RetractT. newRetractEnv :: (Reflex t, TriggerEvent t m) => m (RetractEnv t m) -- | Execute retractable widget with given environment. runRetractT :: RetractT t m a -> RetractEnv t m -> m a -- | Simplified version of runRetractT runRetract :: (Reflex t, TriggerEvent t m) => RetractT t m a -> m a -- | Small library that implements back button feature for reflex-dom -- widgets. See Reflex.Dom.Retractable.Trans for usage examples. module Reflex.Dom.Retractable