@@ -0,0 +1,23 @@
1+{- |
2+Module : Control.SemiIso.Trans
3+Description : SemiIsoMonad transformers.
4+Copyright : (c) Paweł Nowak
5+License : MIT
6+
7+Maintainer : Paweł Nowak <pawel834@gmail.com>
8+Stability : experimental
9+
10+Monad transformers for the SemiIso hierarchy.
11+-}
12+module Control.SemiIso.Trans where
13+
14+import Data.SemiIsoFunctor
15+
16+-- | Monad transformer. Should satisfy laws:
17+--
18+-- prop> silift . sipure = sipure
19+--
20+-- prop> silift (m //= f) = silift m //= (silift . f)
21+class SIMonadTrans t where
22+ -- | Lifts a computation from the base monad.
23+ silift :: SemiIsoMonad m => m a -> t m a