Safe Haskell | None |
---|---|
Language | Haskell2010 |
- module Emacs.Type
- initState :: MonadIO m => m PState
- initCtx :: MonadIO m => EmacsEnv -> m Ctx
- getEnv :: EmacsM EmacsEnv
- runEmacsM :: MonadIO m => Ctx -> EmacsM a -> m a
- getEmacsEnvFromRT :: Ptr () -> IO EmacsEnv
- typeOf :: EmacsValue -> EmacsM EmacsType
- isTypeOf :: EmacsType -> EmacsValue -> EmacsM Bool
- extractInteger :: Num b => EmacsValue -> EmacsM b
- extractIntegerMaybe :: Num b => EmacsValue -> EmacsM (Maybe b)
- extractString :: EmacsValue -> EmacsM Text
- eq :: EmacsValue -> EmacsValue -> EmacsM Bool
- isNotNil :: EmacsValue -> EmacsM Bool
- isNil :: EmacsValue -> EmacsM Bool
- mkFunction :: ([EmacsValue] -> EmacsM EmacsValue) -> Int -> Int -> Text -> EmacsM EmacsValue
- mkInteger :: Integral n => n -> EmacsM EmacsValue
- mkString :: Text -> EmacsM EmacsValue
- intern :: Text -> EmacsM EmacsValue
- mkList :: [EmacsValue] -> EmacsM EmacsValue
- mkNil :: EmacsM EmacsValue
- mkT :: EmacsM EmacsValue
- funcall :: EmacsValue -> [EmacsValue] -> EmacsM EmacsValue
- errorHandle :: EmacsEnv -> IO EmacsValue -> IO EmacsValue
Documentation
module Emacs.Type
extractInteger :: Num b => EmacsValue -> EmacsM b Source #
extractIntegerMaybe :: Num b => EmacsValue -> EmacsM (Maybe b) Source #
extractString :: EmacsValue -> EmacsM Text Source #
eq :: EmacsValue -> EmacsValue -> EmacsM Bool Source #
mkFunction :: ([EmacsValue] -> EmacsM EmacsValue) -> Int -> Int -> Text -> EmacsM EmacsValue Source #
mkList :: [EmacsValue] -> EmacsM EmacsValue Source #
mkNil :: EmacsM EmacsValue Source #
mkT :: EmacsM EmacsValue Source #
funcall :: EmacsValue -> [EmacsValue] -> EmacsM EmacsValue Source #
errorHandle :: EmacsEnv -> IO EmacsValue -> IO EmacsValue Source #
Haskell で投げられた例外の対応
Emacs -> Haskell から呼ばれるところに設置する必要がある。例外が補足 できないと恐らく emacs がクラッシュする。非同期例外については考える 必要はない。
二つの場合を対処する必要がある(多段)
- Haskell 側で例外が発生した
- Haskell から呼び出した emacs 関数の中で signal(or throw)された
- の場合、emacsから返ってきた時に non local exit かどうか確認し、 もしそうであれば haskellの例外を投げる。そして haskell -> emacsに戻 る場所で haskellの例外は補足する。その場合、non-local-exit は既に設 定されているので、
_non_local_exit_signal で haskellエラーであることを設定する。ただし これが簡単にはいかず、
- IO モナドの中で実現する必要がある
- emacs関数を呼び出す際に例外が発生しうるものを呼び出せない
catch する順番重要