packages feed

nested-routes 0.0.2 → 0.0.3.1

raw patch · 3 files changed

+34/−17 lines, 3 filesdep ~pseudo-triePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: pseudo-trie

API changes (from Hackage documentation)

- Web.Routes.Nested.FileExtListener: FileExtListenerT :: WriterT (FileExts r) m a -> FileExtListenerT r m a
- Web.Routes.Nested.FileExtListener: FileExts :: Map FileExt a -> FileExts a
- Web.Routes.Nested.FileExtListener: Html :: FileExt
- Web.Routes.Nested.FileExtListener: Json :: FileExt
- Web.Routes.Nested.FileExtListener: Text :: FileExt
- Web.Routes.Nested.FileExtListener: runFileExtListenerT :: FileExtListenerT r m a -> WriterT (FileExts r) m a
- Web.Routes.Nested.FileExtListener: unFileExts :: FileExts a -> Map FileExt a
- Web.Routes.Nested.VerbListener: Delete :: Verb
- Web.Routes.Nested.VerbListener: Get :: Verb
- Web.Routes.Nested.VerbListener: Post :: Verb
- Web.Routes.Nested.VerbListener: Put :: Verb
- Web.Routes.Nested.VerbListener: VerbListenerT :: WriterT (Verbs z r) m a -> VerbListenerT z r m a
- Web.Routes.Nested.VerbListener: Verbs :: Map Verb (Maybe (ReqBodyT z), FileExts a) -> Verbs z a
- Web.Routes.Nested.VerbListener: instance Foldable (Verbs z)
- Web.Routes.Nested.VerbListener: instance Functor (Verbs z)
- Web.Routes.Nested.VerbListener: instance Monoid (Verbs z a)
- Web.Routes.Nested.VerbListener: instance Traversable (Verbs z)
- Web.Routes.Nested.VerbListener: runVerbListenerT :: VerbListenerT z r m a -> WriterT (Verbs z r) m a
- Web.Routes.Nested.VerbListener: type ReqBodyT z = ByteString -> z
- Web.Routes.Nested.VerbListener: unVerbs :: Verbs z a -> Map Verb (Maybe (ReqBodyT z), FileExts a)
+ Web.Routes.Nested.FileExtListener: [FileExtListenerT] :: WriterT (FileExts r) m a -> FileExtListenerT r m a
+ Web.Routes.Nested.FileExtListener: [FileExts] :: Map FileExt a -> FileExts a
+ Web.Routes.Nested.FileExtListener: [Html] :: FileExt
+ Web.Routes.Nested.FileExtListener: [Json] :: FileExt
+ Web.Routes.Nested.FileExtListener: [Text] :: FileExt
+ Web.Routes.Nested.FileExtListener: [runFileExtListenerT] :: FileExtListenerT r m a -> WriterT (FileExts r) m a
+ Web.Routes.Nested.FileExtListener: [unFileExts] :: FileExts a -> Map FileExt a
+ Web.Routes.Nested.VerbListener: [Delete] :: Verb
+ Web.Routes.Nested.VerbListener: [Get] :: Verb
+ Web.Routes.Nested.VerbListener: [Post] :: Verb
+ Web.Routes.Nested.VerbListener: [Put] :: Verb
+ Web.Routes.Nested.VerbListener: [VerbListenerT] :: WriterT (Verbs z m r) m a -> VerbListenerT z r m a
+ Web.Routes.Nested.VerbListener: [Verbs] :: Map Verb (Maybe (ReaderT ByteString m z), FileExts r) -> Verbs z m r
+ Web.Routes.Nested.VerbListener: [runVerbListenerT] :: VerbListenerT z r m a -> WriterT (Verbs z m r) m a
+ Web.Routes.Nested.VerbListener: [unVerbs] :: Verbs z m r -> Map Verb (Maybe (ReaderT ByteString m z), FileExts r)
+ Web.Routes.Nested.VerbListener: instance Foldable (Verbs z m)
+ Web.Routes.Nested.VerbListener: instance Functor (Verbs z m)
+ Web.Routes.Nested.VerbListener: instance Monoid (Verbs z m a)
+ Web.Routes.Nested.VerbListener: instance Traversable (Verbs z m)
- Web.Routes.Nested: handle :: Monad m => [Text] -> VerbListenerT z Response m () -> HandlerT z m ()
+ Web.Routes.Nested: handle :: Monad m => [Text] -> VerbListenerT z Response m () -> [HandlerT z m ()] -> HandlerT z m ()
- Web.Routes.Nested: route :: (Functor m, Monad m, MonadIO m) => HandlerT z m a -> Request -> (Response -> m b) -> m b
+ Web.Routes.Nested: route :: (Functor m, Monad m, MonadIO m) => Response -> HandlerT z m a -> Request -> (Response -> m b) -> m b
- Web.Routes.Nested.FileExtListener: blaze :: Monad m => Html -> FileExtListenerT Response m ()
+ Web.Routes.Nested.FileExtListener: blaze :: (Monad m) => Html -> FileExtListenerT Response m ()
- Web.Routes.Nested.FileExtListener: builder :: Monad m => Builder -> RequestHeaders -> FileExt -> FileExtListenerT Response m ()
+ Web.Routes.Nested.FileExtListener: builder :: (Monad m) => Builder -> RequestHeaders -> FileExt -> FileExtListenerT Response m ()
- Web.Routes.Nested.FileExtListener: bytestring :: Monad m => ByteString -> RequestHeaders -> FileExt -> FileExtListenerT Response m ()
+ Web.Routes.Nested.FileExtListener: bytestring :: (Monad m) => ByteString -> RequestHeaders -> FileExt -> FileExtListenerT Response m ()
- Web.Routes.Nested.FileExtListener: lucid :: Monad m => HtmlT m () -> FileExtListenerT Response m ()
+ Web.Routes.Nested.FileExtListener: lucid :: (Monad m) => HtmlT m () -> FileExtListenerT Response m ()
- Web.Routes.Nested.FileExtListener: text :: Monad m => Text -> FileExtListenerT Response m ()
+ Web.Routes.Nested.FileExtListener: text :: (Monad m) => Text -> FileExtListenerT Response m ()
- Web.Routes.Nested.VerbListener: delete :: Monad m => FileExtListenerT Response m a -> VerbListenerT z Response m ()
+ Web.Routes.Nested.VerbListener: delete :: (Monad m) => FileExtListenerT Response m a -> VerbListenerT z Response m ()
- Web.Routes.Nested.VerbListener: get :: Monad m => FileExtListenerT Response m a -> VerbListenerT z Response m ()
+ Web.Routes.Nested.VerbListener: get :: (Monad m) => FileExtListenerT Response m a -> VerbListenerT z Response m ()
- Web.Routes.Nested.VerbListener: newtype Verbs z a
+ Web.Routes.Nested.VerbListener: newtype Verbs z m r
- Web.Routes.Nested.VerbListener: post :: (Monad m, MonadIO m) => (ByteString -> z) -> FileExtListenerT Response m a -> VerbListenerT z Response m ()
+ Web.Routes.Nested.VerbListener: post :: (Monad m, MonadIO m) => (ByteString -> m z) -> FileExtListenerT Response m a -> VerbListenerT z Response m ()
- Web.Routes.Nested.VerbListener: put :: (Monad m, MonadIO m) => (ByteString -> z) -> FileExtListenerT Response m a -> VerbListenerT z Response m ()
+ Web.Routes.Nested.VerbListener: put :: (Monad m, MonadIO m) => (ByteString -> m z) -> FileExtListenerT Response m a -> VerbListenerT z Response m ()

Files

nested-routes.cabal view
@@ -1,5 +1,5 @@ Name:                   nested-routes-Version:                0.0.2+Version:                0.0.3.1 Author:                 Athan Clark <athan.clark@gmail.com> Maintainer:             Athan Clark <athan.clark@gmail.com> License:                BSD3@@ -24,7 +24,7 @@                       , transformers                       , semigroups                       , containers-                      , pseudo-trie >= 0.0.4+                      , pseudo-trie >= 0.0.4.2                       , text                       , aeson                       , blaze-html
src/Web/Routes/Nested.hs view
@@ -25,38 +25,54 @@ import           Control.Monad.IO.Class import           Control.Monad.Trans import           Control.Monad.Writer+import           Control.Monad.Reader import qualified Data.List.NonEmpty                as NE import           Data.Monoid import           Data.Trie.Pseudo+import qualified Data.Trie.Pseudo                  as P import           Data.Trie.Rooted import qualified Data.Trie.Rooted                  as R import           Data.Traversable import qualified Data.Text                         as T import qualified Data.Map.Lazy                     as M+import qualified Data.ByteString.Lazy              as BL   newtype HandlerT z m a = HandlerT-  { runHandler :: WriterT (MergeRooted T.Text (Verbs z Response)) m a }+  { runHandler :: WriterT (MergeRooted T.Text (Verbs z m Response)) m a }   deriving (Functor)  deriving instance Applicative m => Applicative (HandlerT z m) deriving instance Monad m =>       Monad       (HandlerT z m) deriving instance MonadIO m =>     MonadIO     (HandlerT z m)-deriving instance                  MonadTrans  (HandlerT z)+instance MonadTrans (HandlerT z) where+  lift ma = HandlerT $ lift ma   handle :: Monad m =>           [T.Text]        -> VerbListenerT z Response m ()+       -> [HandlerT z m ()]        -> HandlerT z m ()-handle ts vl = do+handle ts vl [] = do   vfrs <- lift $ execWriterT $ runVerbListenerT vl    HandlerT $ tell $     case ts of       [] -> MergeRooted $ Rooted (Just vfrs) []       _  -> MergeRooted $ Rooted Nothing [Rest (NE.fromList ts) vfrs]+handle ts vl cs = do+  vfrs <- lift $ execWriterT $ runVerbListenerT vl+  child <- lift $ foldM (\acc c -> (acc <>) <$> (execWriterT $ runHandler c)) mempty cs +  HandlerT $ tell $+    case ts of+      [] -> case unMergeRooted child of+              Rooted _ xs -> MergeRooted $ Rooted (Just vfrs) xs+      _  -> let child' = push (unMergeRooted child) $ NE.fromList ts in+            MergeRooted $ Rooted Nothing [P.assign (NE.fromList ts) (Just vfrs) child']++ route :: (Functor m, Monad m, MonadIO m) =>          HandlerT z m a       -> Request -> (Response -> m b) -> m b@@ -78,7 +94,7 @@                 Nothing    -> respond r                 Just reqbf -> do                   body <- liftIO $ strictRequestBody req-                  return $ reqbf body+                  (runReaderT $ reqbf) body                   respond r             Nothing -> respond notFound         Nothing -> respond notFound
src/Web/Routes/Nested/VerbListener.hs view
@@ -14,6 +14,7 @@ import           Control.Applicative hiding (empty) import           Control.Monad.Trans import           Control.Monad.Writer+import           Control.Monad.Reader import           Data.Monoid import           Data.Foldable import           Data.Traversable@@ -27,22 +28,21 @@           | Delete   deriving (Show, Eq, Ord) -type ReqBodyT z = BL.ByteString -> z--newtype Verbs z a = Verbs { unVerbs :: Map Verb (Maybe (ReqBodyT z), FileExts a) }+newtype Verbs z m r = Verbs { unVerbs :: Map Verb (Maybe (ReaderT BL.ByteString m z), FileExts r) }   deriving (Functor, Traversable) -deriving instance             Monoid    (Verbs z a)-deriving instance             Foldable  (Verbs z)+deriving instance                  Monoid    (Verbs z m a)+deriving instance                  Foldable  (Verbs z m)  newtype VerbListenerT z r m a =-  VerbListenerT { runVerbListenerT :: WriterT (Verbs z r) m a }+  VerbListenerT { runVerbListenerT :: WriterT (Verbs z m r) m a }     deriving (Functor)  deriving instance Applicative m => Applicative (VerbListenerT z r m) deriving instance Monad m =>       Monad       (VerbListenerT z r m) deriving instance MonadIO m =>     MonadIO     (VerbListenerT z r m)-deriving instance                  MonadTrans  (VerbListenerT z r)+instance MonadTrans (VerbListenerT z r) where+  lift ma = VerbListenerT $ lift ma   get :: (Monad m) =>@@ -56,25 +56,26 @@   post :: (Monad m, MonadIO m) =>-        (BL.ByteString -> z)+        (BL.ByteString -> m z)      -> FileExtListenerT Response m a      -> VerbListenerT z Response m () post handle flistener = do   (fileexts :: FileExts Response) <- lift $ execWriterT $                                      runFileExtListenerT flistener-  let new = singleton Post (Just handle, fileexts)+  let new = singleton Post (Just $ ReaderT handle, fileexts)   VerbListenerT $ tell $ Verbs new   put :: (Monad m, MonadIO m) =>-       (BL.ByteString -> z)+       (BL.ByteString -> m z)     -> FileExtListenerT Response m a     -> VerbListenerT z Response m () put handle flistener = do   (fileexts :: FileExts Response) <- lift $ execWriterT $                                      runFileExtListenerT flistener-  let new = singleton Put (Just handle, fileexts)+  let new = singleton Put (Just $ ReaderT handle, fileexts)   VerbListenerT $ tell $ Verbs new+  delete :: (Monad m) =>           FileExtListenerT Response m a