module Control.MLens
(
MLens
, Ref
, mapMLens
, (.)
, (***)
, joinML
, memoMLens
, runMLens
, runRef
, lensStore
, NewRef (..)
, ExtRef (..)
, Ext, runExt, runExt_
, getL, setL, modL
, readRef, writeRef, modRef
, id
, unitLens
, fstLens, sndLens
, maybeLens
, listLens
, ithLens
, forkLens
, justLens
, showLens
, Lens
, fromLens
, toLens
, lens
, joinLens
, undoTr
, memoRead
, memoWrite
, Morph
, testExt
) where
import Control.Category
import Control.Monad.Writer
import Prelude hiding ((.), id)
import Data.MLens
import Data.MLens.Ref
import Control.MLens.ExtRef
import Control.MLens.ExtRef.Test
import Control.MLens.ExtRef.Pure
newtype ExtTest i a = ExtTest { unExtTest :: Ext i (Writer [String]) a }
deriving (Monad, MonadWriter [String], NewRef, ExtRef)
testExt :: [String]
testExt = mkTests (\t -> execWriter $ runExt $ unExtTest t)