@@ -67,7 +67,7 @@ import qualified Control.Categorical.Functor as Cat
6767import Control.Categorical.Bifunctor
6868import Control.Lens (Identity (..), Prism', makePrisms, itraverse, imap, prism, (^.), re, matching, (^?))
6969import Control.Monad.Except
70−import Data.Dependent.Sum (DSum (..), ShowTag (..))
70+import Data.Dependent.Sum (DSum (..))
7171import Data.Dependent.Map (DMap)
7272import qualified Data.Dependent.Map as DMap
7373import Data.Either.Validation (Validation (..))
@@ -76,7 +76,6 @@ import Data.Functor.Sum
7676import Data.GADT.Compare
7777import Data.GADT.Compare.TH
7878import Data.GADT.Show
79−import Data.GADT.Show.TH
8079import Data.List.NonEmpty (NonEmpty (..))
8180import Data.Map (Map)
8281import qualified Data.Map as Map
@@ -90,6 +89,7 @@ import qualified Data.Text as T
9089import Data.Text.Encoding
9190import Data.Universe
9291import Network.HTTP.Types.URI
92+import Obelisk.Route.TH
9393
9494-- Design goals:
9595-- No start-up time on the frontend (not yet met)
@@ -462,14 +462,6 @@ data ResourceRoute :: * -> * where
462462 ResourceRoute_Ghcjs :: ResourceRoute [Text]
463463 ResourceRoute_JSaddleWarp :: ResourceRoute (R JSaddleWarpRoute)
464464
465−--TODO: Generate this
466−instance Universe (Some ResourceRoute) where
467− universe =
468− [ Some.This ResourceRoute_Static
469− , Some.This ResourceRoute_Ghcjs
470− , Some.This ResourceRoute_JSaddleWarp
471− ]
472−
473465--TODO: Figure out a way to check this
474466obeliskComponentEncoder :: (Applicative check, Applicative parse) => Encoder check parse (Some (ObeliskRoute f)) (Either (Some ResourceRoute) (Some f))
475467obeliskComponentEncoder = Encoder $ pure $ ValidEncoder
@@ -551,13 +543,6 @@ data JSaddleWarpRoute :: * -> * where
551543 JSaddleWarpRoute_WebSocket :: JSaddleWarpRoute ()
552544 JSaddleWarpRoute_Sync :: JSaddleWarpRoute [Text]
553545
554−instance Universe (Some JSaddleWarpRoute) where
555− universe =
556− [ Some.This JSaddleWarpRoute_JavaScript
557− , Some.This JSaddleWarpRoute_WebSocket
558− , Some.This JSaddleWarpRoute_Sync
559− ]
560−
561546jsaddleWarpRouteComponentEncoder :: (MonadError Text check, MonadError Text parse) => Encoder check parse (Some JSaddleWarpRoute) (Maybe Text)
562547jsaddleWarpRouteComponentEncoder = enum1Encoder $ \case
563548 JSaddleWarpRoute_JavaScript -> Just "jsaddle.js"
@@ -570,29 +555,6 @@ jsaddleWarpRouteEncoder = pathComponentEncoder jsaddleWarpRouteComponentEncoder
570555 JSaddleWarpRoute_WebSocket -> endValidEncoder mempty
571556 JSaddleWarpRoute_Sync -> pathOnlyValidEncoder
572557
573−instance ShowTag appRoute Identity => ShowTag (ObeliskRoute appRoute) Identity where
574− showTaggedPrec = \case
575− ObeliskRoute_App a -> showTaggedPrec a
576− ObeliskRoute_Resource r -> showTaggedPrec r
577−
578−instance ShowTag ResourceRoute Identity where
579− showTaggedPrec = \case
580− ResourceRoute_Static -> showsPrec
581− ResourceRoute_Ghcjs -> showsPrec
582− ResourceRoute_JSaddleWarp -> showsPrec
583−
584−instance ShowTag JSaddleWarpRoute Identity where
585− showTaggedPrec = \case
586− JSaddleWarpRoute_JavaScript -> showsPrec
587− JSaddleWarpRoute_WebSocket -> showsPrec
588− JSaddleWarpRoute_Sync -> showsPrec
589−
590−instance Universe (Some appRoute) => Universe (Some (ObeliskRoute appRoute)) where
591− universe = mconcat
592− [ mapSome ObeliskRoute_App <$> universe
593− , mapSome ObeliskRoute_Resource <$> universe
594− ]
595−
596558instance GShow appRoute => GShow (ObeliskRoute appRoute) where
597559 gshowsPrec prec = \case
598560 ObeliskRoute_App appRoute -> showParen (prec > 10) $
@@ -604,9 +566,6 @@ instance GShow appRoute => GShow (ObeliskRoute appRoute) where
604566data IndexOnlyRoute :: * -> * where
605567 IndexOnlyRoute :: IndexOnlyRoute ()
606568
607−instance Universe (Some IndexOnlyRoute) where
608− universe = [Some.This IndexOnlyRoute]
609−
610569indexOnlyRouteComponentEncoder :: (MonadError Text check, MonadError Text parse) => Encoder check parse (Some IndexOnlyRoute) (Maybe Text)
611570indexOnlyRouteComponentEncoder = enum1Encoder $ \case
612571 IndexOnlyRoute -> Nothing
@@ -623,10 +582,6 @@ constLaxValidEncoder a = ValidEncoder
623582 , _validEncoder_decode = \_ -> pure ()
624583 }
625584
626−instance ShowTag IndexOnlyRoute Identity where
627− showTaggedPrec = \case
628− IndexOnlyRoute -> showsPrec
629−
630585someSumEncoder :: (Applicative check, Applicative parse) => Encoder check parse (Some (Sum a b)) (Either (Some a) (Some b))
631586someSumEncoder = Encoder $ pure $ ValidEncoder
632587 { _validEncoder_encode = \(Some.This t) -> case t of
@@ -653,15 +608,13 @@ instance GShow Void1 where
653608 gshowsPrec _ = \case {}
654609
655610makePrisms ''ObeliskRoute
656−deriveGShow ''ResourceRoute
657−deriveGEq ''ResourceRoute
658−deriveGCompare ''ResourceRoute
659−deriveGShow ''JSaddleWarpRoute
660−deriveGEq ''JSaddleWarpRoute
661−deriveGCompare ''JSaddleWarpRoute
662−deriveGShow ''IndexOnlyRoute
663−deriveGEq ''IndexOnlyRoute
664−deriveGCompare ''IndexOnlyRoute
611+
612+concat <$> mapM deriveRouteComponent
613+ [ ''ResourceRoute
614+ , ''JSaddleWarpRoute
615+ , ''IndexOnlyRoute
616+ ]
617+
665618deriveGEq ''Void1
666619deriveGCompare ''Void1
667620