@@ -120,13 +120,12 @@ import Data.Maybe
120import Data.Monoid ((<>))
120import Data.Monoid ((<>))
121import Data.Set (Set)
121import Data.Set (Set)
122import qualified Data.Set as Set
122import qualified Data.Set as Set
123−import Data.Some (Some)
123+import Data.Some (Some(Some))
124−import qualified Data.Some as Some
125−import Data.Some.Universe.Orphans ()
126import Data.Text (Text)
124import Data.Text (Text)
127import qualified Data.Text as T
125import qualified Data.Text as T
128−import Data.Text.Encoding
126+import qualified Data.Text.Encoding as T
129import Data.Universe
127import Data.Universe
128+import Data.Universe.Some
130import Network.HTTP.Types.URI
129import Network.HTTP.Types.URI
131import qualified Numeric.Lens
130import qualified Numeric.Lens
132import Obelisk.Route.TH
131import Obelisk.Route.TH
@@ -165,7 +164,7 @@ pattern (:/) :: f a -> a -> R f
165pattern a :/ b = a :=> Identity b
164pattern a :/ b = a :=> Identity b
167mapSome :: (forall a. f a -> g a) -> Some f -> Some g
166mapSome :: (forall a. f a -> g a) -> Some f -> Some g
168−mapSome f (Some.This a) = Some.This $ f a
167+mapSome f (Some a) = Some $ f a
170hoistR :: (forall x. f x -> g x) -> R f -> R g
169hoistR :: (forall x. f x -> g x) -> R f -> R g
171hoistR f (x :=> Identity y) = f x :/ y
170hoistR f (x :=> Identity y) = f x :/ y
@@ -359,8 +358,8 @@ nothingEncoder = prismEncoder _Nothing
360someConstEncoder :: (Applicative check, Applicative parse) => Encoder check parse (Some (Const a)) a
359someConstEncoder :: (Applicative check, Applicative parse) => Encoder check parse (Some (Const a)) a
361someConstEncoder = unsafeMkEncoder $ EncoderImpl
360someConstEncoder = unsafeMkEncoder $ EncoderImpl
362− { _encoderImpl_encode = \(Some.This (Const a)) -> a
361+ { _encoderImpl_encode = \(Some (Const a)) -> a
363− , _encoderImpl_decode = pure . Some.This . Const
362+ , _encoderImpl_decode = pure . Some . Const
366-- | WARNING: This is only safe if the Show and Read instances for 'a' are
365-- | WARNING: This is only safe if the Show and Read instances for 'a' are
@@ -388,7 +387,7 @@ checkEnum1EncoderFunc
388 -> check (EncoderFunc check' parse p r)
387 -> check (EncoderFunc check' parse p r)
389checkEnum1EncoderFunc f = do
388checkEnum1EncoderFunc f = do
390 (encoderImpls :: DMap p (Flip (EncoderImpl parse) r)) <- DMap.fromList <$>
389 (encoderImpls :: DMap p (Flip (EncoderImpl parse) r)) <- DMap.fromList <$>
391− traverse (\(Some.This p) -> (p :=>) . Flip <$> unEncoder (f p)) universe
390+ traverse (\(Some p) -> (p :=>) . Flip <$> unEncoder (f p)) universe
392 pure $ EncoderFunc $ \p -> unsafeMkEncoder . unFlip $
391 pure $ EncoderFunc $ \p -> unsafeMkEncoder . unFlip $
393 DMap.findWithDefault (error "checkEnum1EncoderFunc: EncoderImpl not found (should be impossible)") p encoderImpls
392 DMap.findWithDefault (error "checkEnum1EncoderFunc: EncoderImpl not found (should be impossible)") p encoderImpls
@@ -443,11 +442,11 @@ chainEncoder cons this rest = Encoder $ do
443 pure $ EncoderImpl
442 pure $ EncoderImpl
444 { _encoderImpl_decode = \v -> do
443 { _encoderImpl_decode = \v -> do
445 (here, following) <- _encoderImpl_decode consValid v
444 (here, following) <- _encoderImpl_decode consValid v
446− Some.This r <- _encoderImpl_decode thisValid here
445+ Some r <- _encoderImpl_decode thisValid here
447 (r :/) <$> _encoderImpl_decode (runIdentity . unEncoder $ rest r) following
446 (r :/) <$> _encoderImpl_decode (runIdentity . unEncoder $ rest r) following
448 , _encoderImpl_encode = \(r :/ s) ->
447 , _encoderImpl_encode = \(r :/ s) ->
449 _encoderImpl_encode consValid
448 _encoderImpl_encode consValid
450− ( _encoderImpl_encode thisValid $ Some.This r
449+ ( _encoderImpl_encode thisValid $ Some r
451 , _encoderImpl_encode (runIdentity . unEncoder $ rest r) s)
450 , _encoderImpl_encode (runIdentity . unEncoder $ rest r) s)
@@ -514,7 +513,7 @@ enum1Encoder
516 => (forall a. p a -> r) -> Encoder check parse (Some p) r
515 => (forall a. p a -> r) -> Encoder check parse (Some p) r
517−enum1Encoder f = enumEncoder $ \(Some.This p) -> f p
516+enum1Encoder f = enumEncoder $ \(Some p) -> f p
519-- | Encode an enumerable, bounded type. WARNING: Don't use this on types that
518-- | Encode an enumerable, bounded type. WARNING: Don't use this on types that
520-- have a large number of values - it will use a lot of memory.
519-- have a large number of values - it will use a lot of memory.
@@ -603,10 +602,10 @@ queryParametersTextEncoder = Encoder $ pure $ EncoderImpl
603 in (urlDecodeText True k, urlDecodeText True <$> mv)
602 in (urlDecodeText True k, urlDecodeText True <$> mv)
605urlEncodeText :: Bool -> Text -> Text
604urlEncodeText :: Bool -> Text -> Text
606−urlEncodeText q = decodeUtf8 . urlEncode q . encodeUtf8
605+urlEncodeText q = T.decodeUtf8 . urlEncode q . T.encodeUtf8
608urlDecodeText :: Bool -> Text -> Text
607urlDecodeText :: Bool -> Text -> Text
609−urlDecodeText q = decodeUtf8 . urlDecode q . encodeUtf8
608+urlDecodeText q = T.decodeUtf8 . urlDecode q . T.encodeUtf8
611listToNonEmptyEncoder :: (Applicative check, Applicative parse, Monoid a, Eq a) => Encoder check parse [a] (NonEmpty a)
610listToNonEmptyEncoder :: (Applicative check, Applicative parse, Monoid a, Eq a) => Encoder check parse [a] (NonEmpty a)
612listToNonEmptyEncoder = Encoder $ pure $ EncoderImpl
611listToNonEmptyEncoder = Encoder $ pure $ EncoderImpl
@@ -718,9 +717,11 @@ data ObeliskRoute :: (* -> *) -> * -> * where
718 ObeliskRoute_App :: f a -> ObeliskRoute f a
717 ObeliskRoute_App :: f a -> ObeliskRoute f a
719 ObeliskRoute_Resource :: ResourceRoute a -> ObeliskRoute f a
718 ObeliskRoute_Resource :: ResourceRoute a -> ObeliskRoute f a
721−instance Universe (Some f) => Universe (Some (ObeliskRoute f)) where
720+instance UniverseSome f => UniverseSome (ObeliskRoute f) where
721+ universeSome = concat
722− universe = fmap (\(Some.This x) -> Some.This (ObeliskRoute_App x)) universe
722+ [ (\(Some x) -> Some (ObeliskRoute_App x)) <$> universe
723− ++ fmap (\(Some.This x) -> Some.This (ObeliskRoute_Resource x)) universe
723+ , (\(Some x) -> Some (ObeliskRoute_Resource x)) <$> universe
725instance GEq f => GEq (ObeliskRoute f) where
726instance GEq f => GEq (ObeliskRoute f) where
726 geq (ObeliskRoute_App x) (ObeliskRoute_App y) = geq x y
727 geq (ObeliskRoute_App x) (ObeliskRoute_App y) = geq x y
@@ -808,12 +809,12 @@ indexOnlyRouteEncoder = pathComponentEncoder indexOnlyRouteSegment
809someSumEncoder :: (Applicative check, Applicative parse) => Encoder check parse (Some (Sum a b)) (Either (Some a) (Some b))
810someSumEncoder :: (Applicative check, Applicative parse) => Encoder check parse (Some (Sum a b)) (Either (Some a) (Some b))
810someSumEncoder = Encoder $ pure $ EncoderImpl
811someSumEncoder = Encoder $ pure $ EncoderImpl
811− { _encoderImpl_encode = \(Some.This t) -> case t of
812+ { _encoderImpl_encode = \(Some t) -> case t of
812− InL l -> Left $ Some.This l
813+ InL l -> Left $ Some l
813− InR r -> Right $ Some.This r
814+ InR r -> Right $ Some r
814 , _encoderImpl_decode = pure . \case
815 , _encoderImpl_decode = pure . \case
815− Left (Some.This l) -> Some.This (InL l)
816+ Left (Some l) -> Some (InL l)
816− Right (Some.This r) -> Some.This (InR r)
817+ Right (Some r) -> Some (InR r)
819data Void1 :: * -> * where {}
820data Void1 :: * -> * where {}
@@ -824,7 +825,7 @@ instance Universe (Some Void1) where
824void1Encoder :: (Applicative check, MonadError Text parse) => Encoder check parse (Some Void1) a
825void1Encoder :: (Applicative check, MonadError Text parse) => Encoder check parse (Some Void1) a
825void1Encoder = Encoder $ pure $ EncoderImpl
826void1Encoder = Encoder $ pure $ EncoderImpl
826 { _encoderImpl_encode = \case
827 { _encoderImpl_encode = \case
827− Some.This f -> case f of {}
828+ Some f -> case f of {}
828 , _encoderImpl_decode = \_ -> throwError "void1Encoder: can't decode anything"
829 , _encoderImpl_decode = \_ -> throwError "void1Encoder: can't decode anything"
@@ -900,18 +901,18 @@ dmapEncoder :: forall check parse k k' v.
900 -> Encoder check parse (DMap k' Identity) (Map k v)
901 -> Encoder check parse (DMap k' Identity) (Map k v)
901dmapEncoder keyEncoder' valueEncoderFor = unsafeEncoder $ do
902dmapEncoder keyEncoder' valueEncoderFor = unsafeEncoder $ do
902 keyEncoder :: Encoder Identity parse (Some k') k <- checkEncoder keyEncoder'
903 keyEncoder :: Encoder Identity parse (Some k') k <- checkEncoder keyEncoder'
903− valueDecoders :: DMap k' (Decoder Identity parse v) <- fmap DMap.fromList . forM universe $ \(Some.This (k' :: k' t)) -> do
904+ valueDecoders :: DMap k' (Decoder Identity parse v) <- fmap DMap.fromList . forM universe $ \(Some (k' :: k' t)) -> do
904 ve :: Encoder Identity parse t v <- checkEncoder (valueEncoderFor k')
905 ve :: Encoder Identity parse t v <- checkEncoder (valueEncoderFor k')
905 return $ (k' :: k' t) :=> (Decoder ve :: Decoder Identity parse v t)
906 return $ (k' :: k' t) :=> (Decoder ve :: Decoder Identity parse v t)
906 let keyError k = "dmapEncoder: key `" <> k <> "' was missing from the Universe instance for its type."
907 let keyError k = "dmapEncoder: key `" <> k <> "' was missing from the Universe instance for its type."
907 return $ EncoderImpl
908 return $ EncoderImpl
908 { _encoderImpl_encode = \dm -> Map.fromList $ do
909 { _encoderImpl_encode = \dm -> Map.fromList $ do
909 ((k' :: k' t) :=> Identity v') <- DMap.toList dm
910 ((k' :: k' t) :=> Identity v') <- DMap.toList dm
910− return ( encode keyEncoder (Some.This k')
911+ return ( encode keyEncoder (Some k')
911 , encode (toEncoder (DMap.findWithDefault (error . keyError $ gshow k') k' valueDecoders)) v'
912 , encode (toEncoder (DMap.findWithDefault (error . keyError $ gshow k') k' valueDecoders)) v'
913 , _encoderImpl_decode = \m -> fmap DMap.fromList . forM (Map.toList m) $ \(k,v) -> do
914 , _encoderImpl_decode = \m -> fmap DMap.fromList . forM (Map.toList m) $ \(k,v) -> do
914− Some.This (k' :: k' t) <- tryDecode keyEncoder k
915+ Some (k' :: k' t) <- tryDecode keyEncoder k
915 case DMap.lookup k' valueDecoders of
916 case DMap.lookup k' valueDecoders of
916 Nothing -> throwError . T.pack . keyError $ gshow k'
917 Nothing -> throwError . T.pack . keyError $ gshow k'
917 Just (Decoder e) -> do
918 Just (Decoder e) -> do
@@ -930,7 +931,7 @@ fieldMapEncoder :: forall check parse r.
930 => Encoder check parse r (DMap (Field r) Identity)
931 => Encoder check parse r (DMap (Field r) Identity)
931fieldMapEncoder = unsafeEncoder $ do
932fieldMapEncoder = unsafeEncoder $ do
932 pure $ EncoderImpl
933 pure $ EncoderImpl
933− { _encoderImpl_encode = \r -> DMap.fromList [ f :=> Identity (indexField r f) | Some.This f <- universe ]
934+ { _encoderImpl_encode = \r -> DMap.fromList [ f :=> Identity (indexField r f) | Some f <- universe ]
934 , _encoderImpl_decode = \dm -> tabulateFieldsA $ \f -> do
935 , _encoderImpl_decode = \dm -> tabulateFieldsA $ \f -> do
935 case DMap.lookup f dm of
936 case DMap.lookup f dm of
936 Nothing -> throwError $ "fieldMapEncoder: Couldn't find key for `" <> T.pack (gshow f) <> "' in DMap."
937 Nothing -> throwError $ "fieldMapEncoder: Couldn't find key for `" <> T.pack (gshow f) <> "' in DMap."
@@ -947,8 +948,8 @@ jsonEncoder :: forall check parse r.
947 => Encoder check parse r Text
948 => Encoder check parse r Text
948jsonEncoder = unsafeEncoder $ do
949jsonEncoder = unsafeEncoder $ do
949 pure $ EncoderImpl
950 pure $ EncoderImpl
950− { _encoderImpl_encode = \r -> decodeUtf8 . BSL.toStrict $ Aeson.encode r
951+ { _encoderImpl_encode = \r -> T.decodeUtf8 . BSL.toStrict $ Aeson.encode r
951− , _encoderImpl_decode = \t -> case Aeson.eitherDecodeStrict $ encodeUtf8 t of
952+ , _encoderImpl_decode = \t -> case Aeson.eitherDecodeStrict $ T.encodeUtf8 t of
952 Left err -> throwError ("jsonEncoder: " <> T.pack err)
953 Left err -> throwError ("jsonEncoder: " <> T.pack err)
953 Right x -> return x
954 Right x -> return x