git.iko.soy/typeable/writer-cps-mtl
on master help sign in
add MonadError and MonadCont instances
commit7ac7b833d5d522dde8b0300fbc3ea899f3f7da1c authorDaniel Mendler <mail@daniel-mendler.de> dateThu 24 Nov 2016, 18:57 (10 years ago) parent286a4fb
4 files changed+29−11
Control/Monad/RWS/CPS.hs+14−3 Control/Monad/Writer/CPS.hs+14−1 package.yaml−5 writer-cps-mtl.cabal+1−2
Control/Monad/RWS/CPS.hs+14−3
@@ -1,4 +1,7 @@
11{-# OPTIONS_GHC -fno-warn-orphans #-}
2+{-# LANGUAGE MultiParamTypeClasses #-}
3+{-# LANGUAGE FlexibleInstances #-}
4+{-# LANGUAGE UndecidableInstances #-}
25-----------------------------------------------------------------------------
36-- |
47-- Module : Control.Monad.RWS.CPS
@@ -45,24 +48,32 @@ import Control.Monad.RWS.Class as X
4548import Control.Monad.Trans as X
4649import Data.Monoid as X
4750
51+import Control.Monad.Cont.Class
52+import Control.Monad.Error.Class
4853import Control.Monad.Trans.RWS.CPS
4954import qualified Control.Monad.Trans.RWS.CPS as CPS
5055
51−-- Orphan instance
56+-- Orphan instances
57+
5258instance (Monoid w, Monad m) => MonadWriter w (RWST r w s m) where
5359 writer = CPS.writer
5460 tell = CPS.tell
5561 listen = CPS.listen
5662 pass = CPS.pass
5763
58−-- Orphan instance
5964instance Monad m => MonadReader r (RWST r w s m) where
6065 ask = CPS.ask
6166 local = CPS.local
6267 reader = CPS.reader
6368
64−-- Orphan instance
6569instance Monad m => MonadState s (RWST r w s m) where
6670 get = CPS.get
6771 put = CPS.put
6872 state = CPS.state
73+
74+instance MonadError e m => MonadError e (RWST r w s m) where
75+ throwError = lift . throwError
76+ catchError = CPS.liftCatch catchError
77+
78+instance MonadCont m => MonadCont (RWST r w s m) where
79+ callCC = CPS.liftCallCC callCC
Control/Monad/Writer/CPS.hs+14−1
@@ -1,4 +1,7 @@
11{-# OPTIONS_GHC -fno-warn-orphans #-}
2+{-# LANGUAGE MultiParamTypeClasses #-}
3+{-# LANGUAGE FlexibleInstances #-}
4+{-# LANGUAGE UndecidableInstances #-}
25-----------------------------------------------------------------------------
36-- |
47-- Module : Control.Monad.Writer.CPS
@@ -40,12 +43,22 @@ import Control.Monad.Trans as X
4043import Control.Monad.Writer.Class as X
4144import Data.Monoid as X
4245
46+import Control.Monad.Cont.Class
47+import Control.Monad.Error.Class
4348import Control.Monad.Trans.Writer.CPS
4449import qualified Control.Monad.Trans.Writer.CPS as CPS
4550
46−-- Orphan instance
51+-- Orphan instances
52+
4753instance (Monoid w, Monad m) => MonadWriter w (WriterT w m) where
4854 writer = CPS.writer
4955 tell = CPS.tell
5056 listen = CPS.listen
5157 pass = CPS.pass
58+
59+instance MonadError e m => MonadError e (WriterT w m) where
60+ throwError = lift . throwError
61+ catchError = CPS.liftCatch catchError
62+
63+instance MonadCont m => MonadCont (WriterT w m) where
64+ callCC = CPS.liftCallCC callCC
package.yaml−5
@@ -13,11 +13,6 @@ copyright: 2016 Daniel Mendler
1313license: BSD3
1414github: minad/writer-cps-mtl
1515
16−default-extensions:
17−- MultiParamTypeClasses
18−- FunctionalDependencies
19−- FlexibleInstances
20−
2116ghc-options:
2217- -Wall
2318
writer-cps-mtl.cabal+1−2
@@ -1,4 +1,4 @@
1−-- This file has been generated from package.yaml by hpack version 0.14.1.
1+-- This file has been generated from package.yaml by hpack version 0.15.0.
22--
33-- see: https://github.com/sol/hpack
44
@@ -25,7 +25,6 @@ source-repository head
2525library
2626 hs-source-dirs:
2727 .
28− default-extensions: MultiParamTypeClasses FunctionalDependencies FlexibleInstances
2928 ghc-options: -Wall
3029 build-depends:
3130 base < 6