on master help sign in
add Requester instances, MonadFix (Performable m), and PrimMonad to RoutedT: WIP
commite17ef283ad39852f8dc09c3e56db133aa0937d33 authorhsloan <ishaqsloan@gmail.com> dateTue 17 Jul 2018, 12:37 (8 years ago) parent434afde
4 files changed+14−1
lib/frontend/obelisk-frontend.cabal+1 lib/frontend/src/Obelisk/Frontend.hs+5−1 lib/route/obelisk-route.cabal+1 lib/route/src/Obelisk/Route/Frontend.hs+7
lib/frontend/obelisk-frontend.cabal+1
@@ -11,6 +11,7 @@ library
1111 jsaddle,
1212 lens,
1313 obelisk-route,
14+ primitive,
1415 ref-tf,
1516 reflex,
1617 reflex-dom-core,
lib/frontend/src/Obelisk/Frontend.hs+5−1
@@ -22,6 +22,7 @@ import Control.Lens
2222import Control.Monad
2323import Control.Monad.Fix
2424import Control.Monad.IO.Class
25+import Control.Monad.Primitive
2526import Control.Monad.Ref
2627import Control.Monad.Trans.Class
2728import Data.Dependent.Sum (DSum (..))
@@ -57,12 +58,14 @@ type ObeliskWidget t route m =
5758 , Ref m ~ Ref IO
5859 , MonadRef (Performable m)
5960 , Ref (Performable m) ~ Ref IO
61+ , MonadFix (Performable m)
62+ , PrimMonad m
6063 , EventWriter t (Endo route) m
6164 )
6265
6366data Frontend route = Frontend
6467 { _frontend_head :: !(forall t m. ObeliskWidget t route m => RoutedT t route m ())
65− , _frontend_body :: !(forall t m x. (MonadWidget t m, HasJS x m, EventWriter t (Endo route) m) => RoutedT t route m ())
68+ , _frontend_body :: !(forall t m x. (MonadWidget t m, ObeliskWidget t route m, HasJS x m) => RoutedT t route m ())
6669 , _frontend_title :: !(route -> Text)
6770 , _frontend_notFoundRoute :: !(Text -> route) --TODO: Instead, maybe we should just require that the `parse` Monad for routeEncoder be `Identity`
6871 }
@@ -138,6 +141,7 @@ runFrontend validFullEncoder frontend = do
138141 , DOM.MonadJSM m
139142 , DOM.MonadJSM (Performable m)
140143 , MonadFix m
144+ , MonadFix (Performable m)
141145 )
142146 => RoutedT t (R route) (EventWriterT t (Endo (R route)) m) a
143147 -> m a
lib/route/obelisk-route.cabal+1
@@ -19,6 +19,7 @@ library
1919 monad-control,
2020 mtl,
2121 network-uri,
22+ primitive,
2223 ref-tf,
2324 reflex,
2425 reflex-dom,
lib/route/src/Obelisk/Route/Frontend.hs+7
@@ -41,6 +41,7 @@ import Control.Category (Category (..), (.))
4141import Control.Category.Cartesian
4242import Control.Lens hiding (Bifunctor, bimap, universe)
4343import Control.Monad.Fix
44+import Control.Monad.Primitive
4445import Control.Monad.Ref
4546import Control.Monad.Trans
4647import Control.Monad.Trans.Control
@@ -81,6 +82,12 @@ instance Monad m => Routed t r (RoutedT t r m) where
8182newtype RoutedT t r m a = RoutedT { unRoutedT :: ReaderT (Dynamic t r) m a }
8283 deriving (Functor, Applicative, Monad, MonadFix, MonadTrans, NotReady t, MonadHold t, MonadSample t, PostBuild t, TriggerEvent t, HasJSContext, MonadIO, MonadReflexCreateTrigger t, HasDocument)
8384
85+instance (Requester t m, PrimMonad m) => Requester t (RoutedT t r m) where
86+ type Request (RoutedT t r m) = Request m
87+ type Response (RoutedT t r m) = Response m
88+ requesting = RoutedT . requesting
89+ requesting_ = RoutedT . requesting_
90+
8491#ifndef ghcjs_HOST_OS
8592deriving instance MonadJSM m => MonadJSM (RoutedT t r m)
8693#endif