git.iko.soy/typeable/swagger2
on master help sign in
MonadDeclare instances for the common transformers
commit1516a0710e1ab45bcc53e3400a83f43e6355b126 authormoss <moss@tvisioninsights.com> dateMon 24 Apr 2017, 11:10 (9 years ago) parent179ab5e
1 file changed+52
src/Data/Swagger/Declare.hs+52
src/Data/Swagger/Declare.hs+52
@@ -2,6 +2,7 @@
22{-# LANGUAGE FlexibleInstances #-}
33{-# LANGUAGE FunctionalDependencies #-}
44{-# LANGUAGE MultiParamTypeClasses #-}
5+{-# LANGUAGE UndecidableInstances #-}
56-- |
67-- Module: Data.Swagger.Declare
78-- Maintainer: Nickolay Kudasov <nickolay@getshoptv.com>
@@ -15,6 +16,15 @@ import Prelude.Compat
1516
1617import Control.Monad
1718import Control.Monad.Trans
19+import Control.Monad.Cont (ContT)
20+import Control.Monad.Error (Error, ErrorT)
21+import Control.Monad.Except (ExceptT)
22+import Control.Monad.List (ListT)
23+import Control.Monad.Reader (ReaderT)
24+import Control.Monad.Trans.Identity (IdentityT)
25+import Control.Monad.Trans.Maybe (MaybeT)
26+import Control.Monad.Trans.Writer.Lazy as Lazy
27+import Control.Monad.Trans.Writer.Strict as Strict
1828import Data.Functor.Identity
1929import Data.Monoid
2030
@@ -125,3 +135,45 @@ execDeclare m = runIdentity . execDeclareT m
125135undeclare :: Monoid d => Declare d a -> a
126136undeclare = runIdentity . undeclareT
127137
138+-- ---------------------------------------------------------------------------
139+-- Instances for other mtl transformers
140+--
141+-- All of these instances need UndecidableInstances,
142+-- because they do not satisfy the coverage condition.
143+
144+instance MonadDeclare d m => MonadDeclare d (ContT r m) where
145+ declare = lift . declare
146+ look = lift look
147+
148+-- Note: deprecated, fails with -Wall
149+instance (Error e, MonadDeclare d m) => MonadDeclare d (ErrorT e m) where
150+ declare = lift . declare
151+ look = lift look
152+
153+instance MonadDeclare d m => MonadDeclare d (ExceptT e m) where
154+ declare = lift . declare
155+ look = lift look
156+
157+instance MonadDeclare d m => MonadDeclare d (IdentityT m) where
158+ declare = lift . declare
159+ look = lift look
160+
161+instance MonadDeclare d m => MonadDeclare d (ListT m) where
162+ declare = lift . declare
163+ look = lift look
164+
165+instance MonadDeclare d m => MonadDeclare d (MaybeT m) where
166+ declare = lift . declare
167+ look = lift look
168+
169+instance MonadDeclare d m => MonadDeclare d (ReaderT r m) where
170+ declare = lift . declare
171+ look = lift look
172+
173+instance (Monoid w, MonadDeclare d m) => MonadDeclare d (Lazy.WriterT w m) where
174+ declare = lift . declare
175+ look = lift look
176+
177+instance (Monoid w, MonadDeclare d m) => MonadDeclare d (Strict.WriterT w m) where
178+ declare = lift . declare
179+ look = lift look