{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DefaultSignatures #-}
module Control.Monad.R.Class
( MonadR(..)
, Region
, acquireSome
) where
import Control.Memory.Region
import Foreign.R
import Control.Applicative
import Control.Monad.Catch (MonadCatch, MonadMask)
import Control.Monad.Trans (MonadIO(..))
import Control.Monad.Primitive (PrimMonad, PrimState)
import Prelude
class (Applicative m, MonadIO m, MonadCatch m, MonadMask m, PrimMonad m)
=> MonadR m where
io :: IO a -> m a
io = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
acquire :: s ~ V => SEXP s a -> m (SEXP (Region m) a)
default acquire :: (MonadIO m, Region m ~ G) => SEXP s a -> m (SEXP (Region m) a)
acquire = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall s (a :: SEXPTYPE). SEXP s a -> IO (SEXP G a)
protect
data ExecContext m :: *
getExecContext :: m (ExecContext m)
unsafeRunWithExecContext :: m a -> ExecContext m -> IO a
type Region m = PrimState m
acquireSome :: (MonadR m) => SomeSEXP V -> m (SomeSEXP (Region m))
acquireSome :: forall (m :: * -> *).
MonadR m =>
SomeSEXP V -> m (SomeSEXP (Region m))
acquireSome (SomeSEXP SEXP V a
s) = forall s (a :: SEXPTYPE). SEXP s a -> SomeSEXP s
SomeSEXP forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) s (a :: SEXPTYPE).
(MonadR m, s ~ V) =>
SEXP s a -> m (SEXP (Region m) a)
acquire SEXP V a
s