on master help sign in
Move Void1 from 'obelisk-run' to 'obelisk-route'; other misc tweaks
commitbf306c00759b9150fe7bade0c4eebc6f58285de8 authorRyan Trinkle <ryan.trinkle@gmail.com> dateSun 15 Jul 2018, 23:26 (8 years ago) parent81a7814
3 files changed+23−24
lib/route/src/Obelisk/Route.hs+21 lib/route/src/Obelisk/Route/Frontend.hs+2−1 lib/run/src/Obelisk/Run.hs−23
lib/route/src/Obelisk/Route.hs+21
@@ -1,5 +1,7 @@
11{-# LANGUAGE ApplicativeDo #-}
22{-# LANGUAGE ConstraintKinds #-}
3+{-# LANGUAGE EmptyCase #-}
4+{-# LANGUAGE EmptyDataDecls #-}
35{-# LANGUAGE FlexibleContexts #-}
46{-# LANGUAGE FlexibleInstances #-}
57{-# LANGUAGE GADTs #-}
@@ -54,6 +56,8 @@ module Obelisk.Route
5456 , indexOnlyRouteComponentEncoder
5557 , indexOnlyRouteRestEncoder
5658 , someSumEncoder
59+ , Void1
60+ , void1Encoder
5761 ) where
5862
5963import Prelude hiding ((.), id)
@@ -597,6 +601,21 @@ someSumEncoder = Encoder $ pure $ ValidEncoder
597601 Right (Some.This r) -> Some.This (InR r)
598602 }
599603
604+data Void1 :: * -> * where {}
605+
606+instance Universe (Some Void1) where
607+ universe = []
608+
609+void1Encoder :: (Applicative check, MonadError Text parse) => Encoder check parse (Some Void1) a
610+void1Encoder = Encoder $ pure $ ValidEncoder
611+ { _validEncoder_encode = \case
612+ Some.This f -> case f of {}
613+ , _validEncoder_decode = \_ -> throwError "void1Encoder: can't decode anything"
614+ }
615+
616+instance GShow Void1 where
617+ gshowsPrec _ = \case {}
618+
600619makePrisms ''ObeliskRoute
601620--TODO: Prevent deriveGShow from creating this warning:
602621-- Defined but not used: ‘p’
@@ -609,5 +628,7 @@ deriveGCompare ''JSaddleWarpRoute
609628deriveGShow ''IndexOnlyRoute
610629deriveGEq ''IndexOnlyRoute
611630deriveGCompare ''IndexOnlyRoute
631+deriveGEq ''Void1
632+deriveGCompare ''Void1
612633
613634--TODO: decodeURIComponent as appropriate
lib/route/src/Obelisk/Route/Frontend.hs+2−1
@@ -52,6 +52,7 @@ import Data.Monoid
5252import Data.Text (Text)
5353import Data.Functor.Compose
5454import Reflex.Class
55+import Reflex.Host.Class
5556import Reflex.PostBuild.Class
5657import Reflex.TriggerEvent.Class
5758import Reflex.PerformEvent.Class
@@ -78,7 +79,7 @@ instance Monad m => Routed t r (RoutedT t r m) where
7879 askRoute = RoutedT ask
7980
8081newtype RoutedT t r m a = RoutedT { unRoutedT :: ReaderT (Dynamic t r) m a }
81− deriving (Functor, Applicative, Monad, MonadFix, MonadTrans, NotReady t, MonadHold t, MonadSample t, PostBuild t, TriggerEvent t, HasJSContext, MonadIO)
82+ deriving (Functor, Applicative, Monad, MonadFix, MonadTrans, NotReady t, MonadHold t, MonadSample t, PostBuild t, TriggerEvent t, HasJSContext, MonadIO, MonadReflexCreateTrigger t, HasDocument)
8283
8384#ifndef ghcjs_HOST_OS
8485deriving instance MonadJSM m => MonadJSM (RoutedT t r m)
lib/run/src/Obelisk/Run.hs−23
@@ -23,7 +23,6 @@ import Control.Category
2323import Control.Concurrent
2424import Control.Exception
2525import Control.Lens ((^?), _Just, _Right)
26−import Control.Monad.Except
2726import qualified Data.Attoparsec.ByteString.Char8 as A
2827import Data.ByteString (ByteString)
2928import qualified Data.ByteString.Char8 as BSC
@@ -34,16 +33,11 @@ import Data.Functor.Identity
3433import Data.Functor.Sum
3534import Data.List (uncons)
3635import Data.Maybe
37−import Data.GADT.Compare.TH
38−import Data.GADT.Show
3936import Data.Semigroup ((<>))
40−import Data.Some (Some)
41−import qualified Data.Some as Some
4237import Data.Streaming.Network (bindPortTCP)
4338import Data.Text (Text)
4439import qualified Data.Text as T
4540import Data.Text.Encoding
46−import Data.Universe
4741import Language.Javascript.JSaddle.Run (syncPoint)
4842import Language.Javascript.JSaddle.WebSockets
4943import Network.HTTP.Client (Manager, defaultManagerSettings, newManager)
@@ -120,18 +114,6 @@ runWidget conf frontend validFullEncoder = do
120114 app <- obeliskApp defaultConnectionOptions frontend validFullEncoder $ fallbackProxy redirectHost redirectPort man
121115 runSettingsSocket settings skt app)
122116
123−data Void1 :: * -> * where {}
124−
125−instance Universe (Some Void1) where
126− universe = []
127−
128−void1Encoder :: (Applicative check, MonadError Text parse) => Encoder check parse (Some Void1) a
129−void1Encoder = Encoder $ pure $ ValidEncoder
130− { _validEncoder_encode = \case
131− Some.This f -> case f of {}
132− , _validEncoder_decode = \_ -> throwError "void1Encoder: can't decode anything"
133− }
134−
135117obeliskApp :: forall route backendRoute. ConnectionOptions -> Frontend (R route) -> ValidEncoder (Either Text) (R (Sum backendRoute (ObeliskRoute route))) PageName -> Application -> IO Application
136118obeliskApp opts frontend validFullEncoder backend = do
137119 html <- BSLC.fromStrict <$> indexHtml blank --TODO: Something other than `blank` here?
@@ -205,8 +187,3 @@ defRunConfig = RunConfig
205187 , _runConfig_redirectPort = 3001
206188 , _runConfig_retryTimeout = 1
207189 }
208−
209−deriveGCompare ''Void1
210−deriveGEq ''Void1
211−instance GShow Void1 where
212− gshowsPrec _ = \case {}