nested-routes 8.2.0 → 9.0.0
raw patch · 2 files changed
+15/−140 lines, 2 filesdep −bifunctorsdep −bytestringdep −hashtablesdep ~pred-triedep ~triesdep ~wai-middleware-content-typePVP ok
version bump matches the API change (PVP)
Dependencies removed: bifunctors, bytestring, hashtables, pred-set, semigroups, transformers
Dependency ranges changed: pred-trie, tries, wai-middleware-content-type, wai-middleware-verbs
API changes (from Hackage documentation)
Files
- nested-routes.cabal +11/−23
- src/Web/Routes/Nested.hs +4/−117
nested-routes.cabal view
@@ -2,12 +2,12 @@ -- -- see: https://github.com/sol/hpack ----- hash: c5052b8557dda01bdd0835fdee96270827420d90308a2f409b2f64c317f8e3d4+-- hash: c01d97006f99cd2296688bd70d1bff61663c843911d5c92a8484e2e578934d31 name: nested-routes-version: 8.2.0+version: 9.0.0 synopsis: Declarative, compositional Wai responses-description: This library attempts to make it easier to write nice Wai response handlers by giving us a Sinatra/ <https://hackage.haskell.org/package/scotty Scotty>-like syntax for declaring HTTP-verb oriented routes, in addition to file-extension handling and rose-tree like composition. Not only do we have literal route specification, like <https://hackage.haskell.org/package/scotty Scotty> & <https://hackage.haskell.org/package/spock Spock>, but we can also embed <https://hackage.haskell.org/package/attoparsec Attoparsec> parsers and <https://hackage.haskell.org/package/regex-compat Regular Expressions> /directly/ in our routes, with our handlers reflecting their results.+description: Please see the README on Github at <https://git.localcooking.com/tooling/pred-trie#readme> category: Web homepage: https://github.com/athanclark/nested-routes#readme bug-reports: https://github.com/athanclark/nested-routes/issues@@ -34,26 +34,20 @@ build-depends: attoparsec , base >=4.9 && <5- , bifunctors- , bytestring , errors , exceptions , extractable-singleton , hashable- , hashtables , monad-control-aligned , mtl , poly-arity >=0.0.7- , pred-set >=0.0.1- , pred-trie >=0.5.1+ , pred-trie >=0.6.0 , regex-compat- , semigroups , text- , transformers- , tries+ , tries >=0.0.5 , unordered-containers- , wai-middleware-content-type >=0.5.0.1- , wai-middleware-verbs >=0.3.1+ , wai-middleware-content-type >=0.6.0+ , wai-middleware-verbs >=0.3.2 , wai-transformers >=0.0.7 default-language: Haskell2010 @@ -71,13 +65,10 @@ build-depends: attoparsec , base- , bifunctors- , bytestring , errors , exceptions , extractable-singleton , hashable- , hashtables , hspec , hspec-wai , http-types@@ -85,17 +76,14 @@ , mtl , nested-routes , poly-arity >=0.0.7- , pred-set >=0.0.1- , pred-trie >=0.5.1+ , pred-trie >=0.6.0 , regex-compat- , semigroups , tasty , tasty-hspec , text- , transformers- , tries+ , tries >=0.0.5 , unordered-containers- , wai-middleware-content-type >=0.5.0.1- , wai-middleware-verbs >=0.3.1+ , wai-middleware-content-type >=0.6.0+ , wai-middleware-verbs >=0.3.2 , wai-transformers >=0.0.7 default-language: Haskell2010
src/Web/Routes/Nested.hs view
@@ -84,7 +84,7 @@ import Network.Wai.Middleware.ContentType hiding (responseStatus, responseHeaders, responseData) import Data.Trie.Pred.Base (RootedPredTrie (..), PredTrie (..))-import Data.Trie.Pred.Base.Step (PredStep (..), PredSteps (..))+import Data.Trie.Pred.Base.Step (PredStep (..), Pred (..)) import qualified Data.Trie.Pred.Interface as Interface import Data.Trie.Pred.Interface.Types (Singleton (..), Extrude (..), CatMaybes) import Data.Trie.HashMap (HashMapStep (..), HashMapChildren (..))@@ -356,7 +356,7 @@ lookupWithLPT :: ( Hashable s , Eq s ) => (s -> s) -> NonEmpty s -> PredTrie s a -> Maybe ([s], a)-lookupWithLPT f tss (PredTrie (HashMapStep ls) (PredSteps ps)) =+lookupWithLPT f tss (PredTrie (HashMapStep ls) (PredStep ps)) = getFirst $ First (goLit f tss ls) <> foldMap (First . goPred f tss) ps @@ -379,99 +379,16 @@ , Eq s ) => (s -> s) -> NonEmpty s- -> PredStep s PredTrie s a+ -> Pred PredTrie s a -> Maybe ([s], a)-goPred f (t:|ts) (PredStep _ predicate mx xs) = do+goPred f (t:|ts) (Pred predicate mx xs) = do d <- predicate t if null ts then (([t],) . ($ d)) <$> mx else bimap (t:) ($ d) <$> lookupWithLPT f (fromList ts) xs --- lookupWithLPT :: ( Eq k--- , Hashable k--- , Typeable s--- , Typeable k--- ) => PredSet s k--- -> (k -> k)--- -> NonEmpty k--- -> PredTrie k a--- -> ST s (Maybe a)--- lookupWithLPT predSet f (k:|ks) (HashTableTrie raw preds) = do--- mx <- HT.lookup raw $ if null ks then f k else k--- case mx of--- Just (RawValue mx' children) ->--- case ks of--- [] -> pure mx'--- (k':ks') -> lookupWithLPT predSet f (k':|ks') children--- Nothing ->--- let -- go :: Typeable t => Maybe t -> PredStep s k t -> ST s (Maybe t)--- go solution@(Just _) _ = pure solution--- go Nothing (MPT.PredStep predKey mHandler children) = do--- mx' <- HS.lookup predKey k predSet--- case mx' of--- Nothing -> pure Nothing--- Just x ->--- case ks of--- [] ->--- pure $! ($ x) <$> mHandler--- (k':ks') -> do--- mf <- lookupWithLPT predSet f (k':|ks') children--- pure $! ($ x) <$> mf--- in foldlM go Nothing preds --- lookupWithLPT :: ( Eq k--- , Hashable k--- , Typeable s--- , Typeable k--- ) => PredSet s k--- -> (k -> k)--- -> NonEmpty k--- -> HashTableTrie s k a--- -> ST s (Maybe (NonEmpty k, a, [k]))--- lookupWithLPT predSet f (k:|ks) (HashTableTrie raw preds) = do--- mLit <- goLit raw--- case mLit of--- Just _ -> pure mLit--- Nothing ->--- let go solution@(Just _) _ = pure solution--- go Nothing pred = goPred pred--- in foldlM go Nothing preds--- where--- goLit xs = do--- mx' <- if null ks--- then HT.lookup raw (f k)--- else HT.lookup raw k--- case mx' of--- Nothing -> pure Nothing--- Just (RawValue mx children) ->--- let mFoundHere = (\x -> (k:|[], x, ks)) <$> mx--- prependAncestry (pre,x,suff) = (k:|NE.toList pre,x,suff)--- in case ks of--- [] -> pure mFoundHere--- (k':ks') -> do--- mFoundThere <- MPT.match predSet (k':|ks') children--- pure $! getFirst $--- First (prependAncestry <$> mFoundThere)--- <> First mFoundHere------ goPred (MPT.PredStep predKey mx children) = do--- mr' <- HS.lookup predKey k predSet--- case mr' of--- Nothing -> pure Nothing--- Just r ->--- let mFoundHere = (\x -> (k:|[], x r, ks)) <$> mx--- prependAncestryAndApply (pre,f,suff) =--- (k:|NE.toList pre,f r,suff)--- in case ks of--- [] -> pure mFoundHere--- (k':ks') -> do--- mFoundThere <- MPT.match predSet (k':|ks') children--- pure $! getFirst $--- First (prependAncestryAndApply <$> mFoundThere)--- <> First mFoundHere -- {-# INLINEABLE lookupWithLPT #-} @@ -480,36 +397,6 @@ ) => (s -> s) -> [s] -> RootedPredTrie s a -> Maybe ([s], a) lookupWithLRPT _ [] (RootedPredTrie mx _) = ([],) <$> mx lookupWithLRPT f ts (RootedPredTrie _ xs) = lookupWithLPT f (fromList ts) xs---- lookupWithLRPT :: ( Eq k--- , Hashable k--- , Typeable s--- , Typeable k--- , Typeable a--- ) => (k -> k)--- -> [k]--- -> RootedHashTableTrie s k a--- -> ST s (Maybe ([k],a,[k]))--- lookupWithLRPT _ [] (RootedHashTableTrie mx _ _) =--- pure $! (\x -> ([],x,[])) <$> mx--- lookupWithLRPT f (k:ks) (RootedHashTableTrie mx xs predSet) = do--- mFoundThere <- lookupWithLPT predSet f (k:|ks) xs--- pure $! getFirst $--- First ((\(pre,x,suff) -> (NE.toList pre,x,suff)) <$> mFoundThere)--- <> First ((\x -> ([],x,k:ks)) <$> mx)---- lookupWithLRPT :: ( Eq k--- , Hashable k--- , Typeable s--- , Typeable k--- , Typeable a--- ) => (k -> k)--- -> [k]--- -> RootedHashTableTrie s k a--- -> ST s (Maybe a)--- lookupWithLRPT _ [] (RootedHashTableTrie mx _ _) = pure mx--- lookupWithLRPT f (k:ks) (RootedHashTableTrie _ xs predSet) =--- lookupWithLPT predSet f (k:|ks) xs