@@ -2,6 +2,7 @@
2{-# LANGUAGE FlexibleInstances #-}
2{-# LANGUAGE FlexibleInstances #-}
3{-# LANGUAGE FunctionalDependencies #-}
3{-# LANGUAGE FunctionalDependencies #-}
4{-# LANGUAGE MultiParamTypeClasses #-}
4{-# LANGUAGE MultiParamTypeClasses #-}
5+{-# LANGUAGE UndecidableInstances #-}
6-- Module: Data.Swagger.Declare
7-- Module: Data.Swagger.Declare
7-- Maintainer: Nickolay Kudasov <nickolay@getshoptv.com>
8-- Maintainer: Nickolay Kudasov <nickolay@getshoptv.com>
@@ -15,6 +16,15 @@ import Prelude.Compat
16import Control.Monad
17import Control.Monad
17import Control.Monad.Trans
18import 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
18import Data.Functor.Identity
28import Data.Functor.Identity
19import Data.Monoid
29import Data.Monoid
@@ -125,3 +135,45 @@ execDeclare m = runIdentity . execDeclareT m
125undeclare :: Monoid d => Declare d a -> a
135undeclare :: Monoid d => Declare d a -> a
126undeclare = runIdentity . undeclareT
136undeclare = runIdentity . undeclareT
138+-- ---------------------------------------------------------------------------
139+-- Instances for other mtl transformers
141+-- All of these instances need UndecidableInstances,
142+-- because they do not satisfy the coverage condition.
144+instance MonadDeclare d m => MonadDeclare d (ContT r m) where
145+ declare = lift . declare
148+-- Note: deprecated, fails with -Wall
149+instance (Error e, MonadDeclare d m) => MonadDeclare d (ErrorT e m) where
150+ declare = lift . declare
153+instance MonadDeclare d m => MonadDeclare d (ExceptT e m) where
154+ declare = lift . declare
157+instance MonadDeclare d m => MonadDeclare d (IdentityT m) where
158+ declare = lift . declare
161+instance MonadDeclare d m => MonadDeclare d (ListT m) where
162+ declare = lift . declare
165+instance MonadDeclare d m => MonadDeclare d (MaybeT m) where
166+ declare = lift . declare
169+instance MonadDeclare d m => MonadDeclare d (ReaderT r m) where
170+ declare = lift . declare
173+instance (Monoid w, MonadDeclare d m) => MonadDeclare d (Lazy.WriterT w m) where
174+ declare = lift . declare
177+instance (Monoid w, MonadDeclare d m) => MonadDeclare d (Strict.WriterT w m) where
178+ declare = lift . declare