emacs-module-0.1.1.1: Utilities to write Emacs dynamic modules
Copyright(c) Sergey Vinokurov 2018
LicenseApache-2.0 (see LICENSE)
Maintainerserg.foo@gmail.com
Safe HaskellNone
LanguageHaskell2010

Emacs.Module.Monad

Description

This module defines the implementation of the MonadEmacs.

Synopsis

Documentation

data EmacsM s a Source #

Concrete monad for interacting with Emacs. It provides:

  1. Ability to call Emacs C functions and automatically rethrows any errors (non-local exits) from elisp as Haskell exceptions.
  2. Tracks ownership of any produced Emacs values and communicates that to Emacs, so that GC on Emacs side will not make any values in Haskell invalid (funnily enough, this can happen!).

Parameter s serves to make ownership-tracking capabilities possible. It's use is the same as in ST monad. That is, it creates local threads so that no produced Emacs values can leave past runEmacsM.

Instances

Instances details
MonadBase IO (EmacsM s) Source # 
Instance details

Defined in Emacs.Module.Monad

Methods

liftBase :: IO α -> EmacsM s α #

MonadBaseControl IO (EmacsM s) Source # 
Instance details

Defined in Emacs.Module.Monad

Associated Types

type StM (EmacsM s) a #

Methods

liftBaseWith :: (RunInBase (EmacsM s) IO -> IO a) -> EmacsM s a #

restoreM :: StM (EmacsM s) a -> EmacsM s a #

Monad (EmacsM s) Source # 
Instance details

Defined in Emacs.Module.Monad

Methods

(>>=) :: EmacsM s a -> (a -> EmacsM s b) -> EmacsM s b #

(>>) :: EmacsM s a -> EmacsM s b -> EmacsM s b #

return :: a -> EmacsM s a #

Functor (EmacsM s) Source # 
Instance details

Defined in Emacs.Module.Monad

Methods

fmap :: (a -> b) -> EmacsM s a -> EmacsM s b #

(<$) :: a -> EmacsM s b -> EmacsM s a #

MonadFix (EmacsM s) Source # 
Instance details

Defined in Emacs.Module.Monad

Methods

mfix :: (a -> EmacsM s a) -> EmacsM s a #

Applicative (EmacsM s) Source # 
Instance details

Defined in Emacs.Module.Monad

Methods

pure :: a -> EmacsM s a #

(<*>) :: EmacsM s (a -> b) -> EmacsM s a -> EmacsM s b #

liftA2 :: (a -> b -> c) -> EmacsM s a -> EmacsM s b -> EmacsM s c #

(*>) :: EmacsM s a -> EmacsM s b -> EmacsM s b #

(<*) :: EmacsM s a -> EmacsM s b -> EmacsM s a #

MonadIO (EmacsM s) Source # 
Instance details

Defined in Emacs.Module.Monad

Methods

liftIO :: IO a -> EmacsM s a #

MonadThrow (EmacsM s) Source # 
Instance details

Defined in Emacs.Module.Monad

Methods

throwM :: Exception e => e -> EmacsM s a #

MonadCatch (EmacsM s) Source # 
Instance details

Defined in Emacs.Module.Monad

Methods

catch :: Exception e => EmacsM s a -> (e -> EmacsM s a) -> EmacsM s a #

MonadMask (EmacsM s) Source # 
Instance details

Defined in Emacs.Module.Monad

Methods

mask :: ((forall a. EmacsM s a -> EmacsM s a) -> EmacsM s b) -> EmacsM s b #

uninterruptibleMask :: ((forall a. EmacsM s a -> EmacsM s a) -> EmacsM s b) -> EmacsM s b #

generalBracket :: EmacsM s a -> (a -> ExitCase b -> EmacsM s c) -> (a -> EmacsM s b) -> EmacsM s (b, c) #

MonadResource (EmacsM s) Source # 
Instance details

Defined in Emacs.Module.Monad

Methods

liftResourceT :: ResourceT IO a -> EmacsM s a #

(Throws EmacsThrow, Throws EmacsError, Throws EmacsInternalError) => MonadEmacs EmacsM Source # 
Instance details

Defined in Emacs.Module.Monad

Associated Types

type EmacsRef EmacsM :: k -> Type Source #

type EmacsReturn EmacsM :: k -> Type Source #

Methods

produceRef :: forall (s :: k). EmacsRef EmacsM s -> EmacsM s (EmacsReturn EmacsM s) Source #

nonLocalExitCheck :: forall (s :: k). WithCallStack => EmacsM s (FuncallExit ()) Source #

nonLocalExitGet :: forall (s :: k). WithCallStack => EmacsM s (FuncallExit (EmacsRef EmacsM s, EmacsRef EmacsM s)) Source #

nonLocalExitSignal :: forall (s :: k). WithCallStack => EmacsRef EmacsM s -> [EmacsRef EmacsM s] -> EmacsM s () Source #

nonLocalExitThrow :: forall (s :: k). WithCallStack => EmacsRef EmacsM s -> EmacsRef EmacsM s -> EmacsM s () Source #

nonLocalExitClear :: forall (s :: k). WithCallStack => EmacsM s () Source #

freeValue :: forall (s :: k). WithCallStack => EmacsRef EmacsM s -> EmacsM s () Source #

makeFunctionExtra :: forall (req :: Nat) (opt :: Nat) (rest :: Bool) extra (s :: k). (WithCallStack, EmacsInvocation req opt rest, GetArities req opt rest) => (forall (s' :: k). EmacsFunctionExtra req opt rest extra s' EmacsM) -> ByteString -> Ptr extra -> EmacsM s (EmacsRef EmacsM s) Source #

funcall :: forall (s :: k). WithCallStack => SymbolName -> [EmacsRef EmacsM s] -> EmacsM s (EmacsRef EmacsM s) Source #

funcallPrimitive :: forall (s :: k). WithCallStack => SymbolName -> [EmacsRef EmacsM s] -> EmacsM s (EmacsRef EmacsM s) Source #

funcallPrimitive_ :: forall (s :: k). WithCallStack => SymbolName -> [EmacsRef EmacsM s] -> EmacsM s () Source #

intern :: forall (s :: k). WithCallStack => SymbolName -> EmacsM s (EmacsRef EmacsM s) Source #

typeOf :: forall (s :: k). WithCallStack => EmacsRef EmacsM s -> EmacsM s (EmacsRef EmacsM s) Source #

isNotNil :: forall (s :: k). WithCallStack => EmacsRef EmacsM s -> EmacsM s Bool Source #

eq :: forall (s :: k). WithCallStack => EmacsRef EmacsM s -> EmacsRef EmacsM s -> EmacsM s Bool Source #

extractWideInteger :: forall (s :: k). WithCallStack => EmacsRef EmacsM s -> EmacsM s Int64 Source #

makeWideInteger :: forall (s :: k). WithCallStack => Int64 -> EmacsM s (EmacsRef EmacsM s) Source #

extractDouble :: forall (s :: k). WithCallStack => EmacsRef EmacsM s -> EmacsM s Double Source #

makeDouble :: forall (s :: k). WithCallStack => Double -> EmacsM s (EmacsRef EmacsM s) Source #

extractString :: forall (s :: k). WithCallStack => EmacsRef EmacsM s -> EmacsM s ByteString Source #

makeString :: forall (s :: k). WithCallStack => ByteString -> EmacsM s (EmacsRef EmacsM s) Source #

extractUserPtr :: forall (s :: k) a. WithCallStack => EmacsRef EmacsM s -> EmacsM s (Ptr a) Source #

makeUserPtr :: forall a (s :: k). WithCallStack => UserPtrFinaliser a -> Ptr a -> EmacsM s (EmacsRef EmacsM s) Source #

assignUserPtr :: forall (s :: k) a. WithCallStack => EmacsRef EmacsM s -> Ptr a -> EmacsM s () Source #

extractUserPtrFinaliser :: forall (s :: k) a. WithCallStack => EmacsRef EmacsM s -> EmacsM s (UserPtrFinaliser a) Source #

assignUserPtrFinaliser :: forall (s :: k) a. WithCallStack => EmacsRef EmacsM s -> UserPtrFinaliser a -> EmacsM s () Source #

vecGet :: forall (s :: k). WithCallStack => EmacsRef EmacsM s -> Int -> EmacsM s (EmacsRef EmacsM s) Source #

vecSet :: forall (s :: k). WithCallStack => EmacsRef EmacsM s -> Int -> EmacsRef EmacsM s -> EmacsM s () Source #

vecSize :: forall (s :: k). WithCallStack => EmacsRef EmacsM s -> EmacsM s Int Source #

type StM (EmacsM s) a Source # 
Instance details

Defined in Emacs.Module.Monad

type StM (EmacsM s) a
type EmacsRef EmacsM Source # 
Instance details

Defined in Emacs.Module.Monad

type EmacsReturn EmacsM Source # 
Instance details

Defined in Emacs.Module.Monad

runEmacsM :: Env -> (forall s. EmacsM s a) -> IO a Source #

Execute emacs interaction session using an environment supplied by Emacs.