From 68eee5e258571a7c953916272841c3defa1b0ac4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Nowak?= Date: Tue, 25 Nov 2014 22:39:16 +0100 Subject: [PATCH] Add SIMonadTrans. --- Control/SemiIso/Trans.hs | 23 +++++++++++++++++++++++ semi-iso.cabal | 1 + 2 files changed, 24 insertions(+) create mode 100644 Control/SemiIso/Trans.hs diff --git a/Control/SemiIso/Trans.hs b/Control/SemiIso/Trans.hs new file mode 100644 index 0000000..1961179 --- /dev/null +++ b/Control/SemiIso/Trans.hs @@ -0,0 +1,23 @@ +{- | +Module : Control.SemiIso.Trans +Description : SemiIsoMonad transformers. +Copyright : (c) Paweł Nowak +License : MIT + +Maintainer : Paweł Nowak +Stability : experimental + +Monad transformers for the SemiIso hierarchy. +-} +module Control.SemiIso.Trans where + +import Data.SemiIsoFunctor + +-- | Monad transformer. Should satisfy laws: +-- +-- prop> silift . sipure = sipure +-- +-- prop> silift (m //= f) = silift m //= (silift . f) +class SIMonadTrans t where + -- | Lifts a computation from the base monad. + silift :: SemiIsoMonad m => m a -> t m a diff --git a/semi-iso.cabal b/semi-iso.cabal index 08da64c..278be65 100644 --- a/semi-iso.cabal +++ b/semi-iso.cabal @@ -22,6 +22,7 @@ source-repository head library exposed-modules: Control.Lens.SemiIso Control.Lens.Internal.SemiIso + Control.SemiIso.Trans Data.SemiIsoFunctor Data.Profunctor.Exposed build-depends: base >= 4 && < 5, profunctors, transformers, lens, tuple-morph