{-# LANGUAGE CPP #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UnboxedTuples #-}
#ifdef TRUSTWORTHY
{-# LANGUAGE Trustworthy #-}
#endif
module Control.Monad.Primitive.Lens
( prim
, st
, io
) where
import Control.Lens
import Control.Monad.Primitive
import Control.Monad.ST (ST)
import GHC.Exts (State#)
prim :: PrimBase m
=> Iso (m a) (m b)
(State# (PrimState m) -> (# State# (PrimState m), a #))
(State# (PrimState m) -> (# State# (PrimState m), b #))
prim :: forall (m :: * -> *) a b.
PrimBase m =>
Iso
(m a)
(m b)
(State# (PrimState m) -> (# State# (PrimState m), a #))
(State# (PrimState m) -> (# State# (PrimState m), b #))
prim = (m a -> State# (PrimState m) -> (# State# (PrimState m), a #))
-> ((State# (PrimState m) -> (# State# (PrimState m), b #)) -> m b)
-> Iso
(m a)
(m b)
(State# (PrimState m) -> (# State# (PrimState m), a #))
(State# (PrimState m) -> (# State# (PrimState m), b #))
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso m a -> State# (PrimState m) -> (# State# (PrimState m), a #)
forall a.
m a -> State# (PrimState m) -> (# State# (PrimState m), a #)
forall (m :: * -> *) a.
PrimBase m =>
m a -> State# (PrimState m) -> (# State# (PrimState m), a #)
internal (State# (PrimState m) -> (# State# (PrimState m), b #)) -> m b
forall a.
(State# (PrimState m) -> (# State# (PrimState m), a #)) -> m a
forall (m :: * -> *) a.
PrimMonad m =>
(State# (PrimState m) -> (# State# (PrimState m), a #)) -> m a
primitive
{-# INLINE prim #-}
st :: PrimBase m => Iso (m a) (m b) (ST (PrimState m) a) (ST (PrimState m) b)
st :: forall (m :: * -> *) a b.
PrimBase m =>
Iso (m a) (m b) (ST (PrimState m) a) (ST (PrimState m) b)
st = (m a -> ST (PrimState m) a)
-> (ST (PrimState m) b -> m b)
-> Iso (m a) (m b) (ST (PrimState m) a) (ST (PrimState m) b)
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso m a -> ST (PrimState m) a
forall (m :: * -> *) a. PrimBase m => m a -> ST (PrimState m) a
primToST ST (PrimState m) b -> m b
forall (m :: * -> *) a. PrimMonad m => ST (PrimState m) a -> m a
stToPrim
{-# INLINE st #-}
io :: (PrimBase m, PrimState m ~ RealWorld) => Iso (m a) (m b) (IO a) (IO b)
io :: forall (m :: * -> *) a b.
(PrimBase m, PrimState m ~ RealWorld) =>
Iso (m a) (m b) (IO a) (IO b)
io = (m a -> IO a) -> (IO b -> m b) -> Iso (m a) (m b) (IO a) (IO b)
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso m a -> IO a
forall (m :: * -> *) a.
(PrimBase m, PrimState m ~ RealWorld) =>
m a -> IO a
primToIO IO b -> m b
forall (m :: * -> *) a.
(PrimMonad m, PrimState m ~ RealWorld) =>
IO a -> m a
ioToPrim
{-# INLINE io #-}