Code cleanup and transformer instances
This commit is contained in:
parent
f6aaca7012
commit
8ab09931c4
@ -1,3 +1,4 @@
|
|||||||
|
{-# LANGUAGE CPP #-}
|
||||||
{-# LANGUAGE TypeFamilies #-}
|
{-# LANGUAGE TypeFamilies #-}
|
||||||
{-# LANGUAGE ConstraintKinds #-}
|
{-# LANGUAGE ConstraintKinds #-}
|
||||||
{-# LANGUAGE TupleSections #-}
|
{-# LANGUAGE TupleSections #-}
|
||||||
@ -15,6 +16,20 @@ import Control.Monad (liftM)
|
|||||||
import Control.Monad.IO.Class (MonadIO, liftIO)
|
import Control.Monad.IO.Class (MonadIO, liftIO)
|
||||||
import Control.Monad.Trans.Resource (MonadResource, MonadResourceBase, ExceptionT (..))
|
import Control.Monad.Trans.Resource (MonadResource, MonadResourceBase, ExceptionT (..))
|
||||||
import Control.Monad.Trans.Class (lift)
|
import Control.Monad.Trans.Class (lift)
|
||||||
|
import Data.Monoid (Monoid)
|
||||||
|
import Data.Conduit.Internal (Pipe, ConduitM)
|
||||||
|
|
||||||
|
import Control.Monad.Trans.Identity ( IdentityT)
|
||||||
|
import Control.Monad.Trans.List ( ListT )
|
||||||
|
import Control.Monad.Trans.Maybe ( MaybeT )
|
||||||
|
import Control.Monad.Trans.Error ( ErrorT, Error)
|
||||||
|
import Control.Monad.Trans.Reader ( ReaderT )
|
||||||
|
import Control.Monad.Trans.State ( StateT )
|
||||||
|
import Control.Monad.Trans.Writer ( WriterT )
|
||||||
|
import Control.Monad.Trans.RWS ( RWST )
|
||||||
|
import qualified Control.Monad.Trans.RWS.Strict as Strict ( RWST )
|
||||||
|
import qualified Control.Monad.Trans.State.Strict as Strict ( StateT )
|
||||||
|
import qualified Control.Monad.Trans.Writer.Strict as Strict ( WriterT )
|
||||||
|
|
||||||
class MonadResource m => MonadHandler m where
|
class MonadResource m => MonadHandler m where
|
||||||
type HandlerSite m
|
type HandlerSite m
|
||||||
@ -33,13 +48,45 @@ instance MonadResourceBase m => MonadHandler (WidgetT site m) where
|
|||||||
liftHandlerT (HandlerT f) = WidgetT $ liftIO . liftM (, mempty) . f . replaceToParent
|
liftHandlerT (HandlerT f) = WidgetT $ liftIO . liftM (, mempty) . f . replaceToParent
|
||||||
{-# RULES "liftHandlerT (WidgetT site IO)" forall f. liftHandlerT (HandlerT f) = WidgetT $ liftM (, mempty) . f #-}
|
{-# RULES "liftHandlerT (WidgetT site IO)" forall f. liftHandlerT (HandlerT f) = WidgetT $ liftM (, mempty) . f #-}
|
||||||
|
|
||||||
instance MonadHandler m => MonadHandler (ExceptionT m) where
|
#define GO(T) instance MonadHandler m => MonadHandler (T m) where type HandlerSite (T m) = HandlerSite m; liftHandlerT = lift . liftHandlerT
|
||||||
type HandlerSite (ExceptionT m) = HandlerSite m
|
#define GOX(X, T) instance (X, MonadHandler m) => MonadHandler (T m) where type HandlerSite (T m) = HandlerSite m; liftHandlerT = lift . liftHandlerT
|
||||||
liftHandlerT = lift . liftHandlerT
|
GO(IdentityT)
|
||||||
-- FIXME add a bunch of transformer instances
|
GO(ListT)
|
||||||
|
GO(MaybeT)
|
||||||
|
GOX(Error e, ErrorT e)
|
||||||
|
GO(ReaderT r)
|
||||||
|
GO(StateT s)
|
||||||
|
GOX(Monoid w, WriterT w)
|
||||||
|
GOX(Monoid w, RWST r w s)
|
||||||
|
GOX(Monoid w, Strict.RWST r w s)
|
||||||
|
GO(Strict.StateT s)
|
||||||
|
GOX(Monoid w, Strict.WriterT w)
|
||||||
|
GO(ExceptionT)
|
||||||
|
GO(Pipe l i o u)
|
||||||
|
GO(ConduitM i o)
|
||||||
|
#undef GO
|
||||||
|
#undef GOX
|
||||||
|
|
||||||
class MonadHandler m => MonadWidget m where
|
class MonadHandler m => MonadWidget m where
|
||||||
liftWidgetT :: WidgetT (HandlerSite m) IO a -> m a
|
liftWidgetT :: WidgetT (HandlerSite m) IO a -> m a
|
||||||
instance MonadResourceBase m => MonadWidget (WidgetT site m) where
|
instance MonadResourceBase m => MonadWidget (WidgetT site m) where
|
||||||
liftWidgetT (WidgetT f) = WidgetT $ liftIO . f . replaceToParent
|
liftWidgetT (WidgetT f) = WidgetT $ liftIO . f . replaceToParent
|
||||||
-- FIXME add a bunch of transformer instances
|
|
||||||
|
#define GO(T) instance MonadWidget m => MonadWidget (T m) where liftWidgetT = lift . liftWidgetT
|
||||||
|
#define GOX(X, T) instance (X, MonadWidget m) => MonadWidget (T m) where liftWidgetT = lift . liftWidgetT
|
||||||
|
GO(IdentityT)
|
||||||
|
GO(ListT)
|
||||||
|
GO(MaybeT)
|
||||||
|
GOX(Error e, ErrorT e)
|
||||||
|
GO(ReaderT r)
|
||||||
|
GO(StateT s)
|
||||||
|
GOX(Monoid w, WriterT w)
|
||||||
|
GOX(Monoid w, RWST r w s)
|
||||||
|
GOX(Monoid w, Strict.RWST r w s)
|
||||||
|
GO(Strict.StateT s)
|
||||||
|
GOX(Monoid w, Strict.WriterT w)
|
||||||
|
GO(ExceptionT)
|
||||||
|
GO(Pipe l i o u)
|
||||||
|
GO(ConduitM i o)
|
||||||
|
#undef GO
|
||||||
|
#undef GOX
|
||||||
|
|||||||
@ -54,9 +54,6 @@ import Data.Text.Lazy (Text, pack)
|
|||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Control.Monad (liftM)
|
import Control.Monad (liftM)
|
||||||
|
|
||||||
import qualified Data.Text.Encoding
|
|
||||||
import qualified Data.Text.Lazy.Encoding
|
|
||||||
|
|
||||||
import Blaze.ByteString.Builder (Builder, fromByteString, fromLazyByteString)
|
import Blaze.ByteString.Builder (Builder, fromByteString, fromLazyByteString)
|
||||||
import Data.Monoid (mempty)
|
import Data.Monoid (mempty)
|
||||||
|
|
||||||
|
|||||||
@ -24,6 +24,7 @@ getHomeR = do
|
|||||||
Nothing -> invalidArgs ["foo not found"]
|
Nothing -> invalidArgs ["foo not found"]
|
||||||
Just foo -> return $ RepPlain $ toContent (foo :: Text)
|
Just foo -> return $ RepPlain $ toContent (foo :: Text)
|
||||||
|
|
||||||
|
getMultiplePiecesR :: Int -> Int -> Handler ()
|
||||||
getMultiplePiecesR _ _ = return ()
|
getMultiplePiecesR _ _ = return ()
|
||||||
|
|
||||||
test :: String
|
test :: String
|
||||||
|
|||||||
@ -29,8 +29,13 @@ getBinR = do
|
|||||||
|]
|
|]
|
||||||
lift $ defaultLayout widget
|
lift $ defaultLayout widget
|
||||||
|
|
||||||
|
getOnePiecesR :: Monad m => Int -> m ()
|
||||||
getOnePiecesR _ = return ()
|
getOnePiecesR _ = return ()
|
||||||
|
|
||||||
|
getTwoPiecesR :: Monad m => Int -> Int -> m ()
|
||||||
getTwoPiecesR _ _ = return ()
|
getTwoPiecesR _ _ = return ()
|
||||||
|
|
||||||
|
getThreePiecesR :: Monad m => Int -> Int -> Int -> m ()
|
||||||
getThreePiecesR _ _ _ = return ()
|
getThreePiecesR _ _ _ = return ()
|
||||||
|
|
||||||
data Y = Y
|
data Y = Y
|
||||||
|
|||||||
@ -4,10 +4,8 @@ module YesodCoreTest.Streaming (specs) where
|
|||||||
import Yesod.Core
|
import Yesod.Core
|
||||||
import Test.Hspec
|
import Test.Hspec
|
||||||
import Network.Wai.Test
|
import Network.Wai.Test
|
||||||
import Data.Conduit
|
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import Data.ByteString (ByteString)
|
import Data.ByteString (ByteString)
|
||||||
import Blaze.ByteString.Builder (fromByteString)
|
|
||||||
|
|
||||||
app :: LiteApp
|
app :: LiteApp
|
||||||
app = dispatchTo $ respondSource typeHtml $ do
|
app = dispatchTo $ respondSource typeHtml $ do
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
{-# LANGUAGE TypeFamilies #-}
|
{-# LANGUAGE TypeFamilies #-}
|
||||||
{-# LANGUAGE FlexibleContexts #-}
|
{-# LANGUAGE FlexibleContexts #-}
|
||||||
{-# LANGUAGE RankNTypes #-}
|
{-# LANGUAGE RankNTypes #-}
|
||||||
|
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
||||||
module Yesod.Persist
|
module Yesod.Persist
|
||||||
( YesodPersist (..)
|
( YesodPersist (..)
|
||||||
, defaultRunDB
|
, defaultRunDB
|
||||||
@ -150,3 +151,9 @@ getBy404 key = do
|
|||||||
case mres of
|
case mres of
|
||||||
Nothing -> lift notFound
|
Nothing -> lift notFound
|
||||||
Just res -> return res
|
Just res -> return res
|
||||||
|
|
||||||
|
instance MonadHandler m => MonadHandler (SqlPersist m) where
|
||||||
|
type HandlerSite (SqlPersist m) = HandlerSite m
|
||||||
|
liftHandlerT = lift . liftHandlerT
|
||||||
|
instance MonadWidget m => MonadWidget (SqlPersist m) where
|
||||||
|
liftWidgetT = lift . liftWidgetT
|
||||||
|
|||||||
@ -10,7 +10,6 @@ import Database.Persist.Store
|
|||||||
import Data.Conduit
|
import Data.Conduit
|
||||||
import Blaze.ByteString.Builder.Char.Utf8 (fromText)
|
import Blaze.ByteString.Builder.Char.Utf8 (fromText)
|
||||||
import Yesod.Persist
|
import Yesod.Persist
|
||||||
import qualified Data.Conduit.List as CL
|
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
|
|
||||||
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persist|
|
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persist|
|
||||||
@ -39,9 +38,9 @@ getHomeR = do
|
|||||||
runDB $ do
|
runDB $ do
|
||||||
runMigration migrateAll
|
runMigration migrateAll
|
||||||
deleteWhere ([] :: [Filter Person])
|
deleteWhere ([] :: [Filter Person])
|
||||||
insert $ Person "Charlie"
|
insert_ $ Person "Charlie"
|
||||||
insert $ Person "Alice"
|
insert_ $ Person "Alice"
|
||||||
insert $ Person "Bob"
|
insert_ $ Person "Bob"
|
||||||
respondSourceDB typePlain $ selectSource [] [Asc PersonName] $= awaitForever toBuilder
|
respondSourceDB typePlain $ selectSource [] [Asc PersonName] $= awaitForever toBuilder
|
||||||
where
|
where
|
||||||
toBuilder (Entity _ (Person name)) = do
|
toBuilder (Entity _ (Person name)) = do
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user