haskelisp-0.1.0.5: Write Emacs module in Haskell, using Emacs 25's Dynamic Module feature

Safe HaskellNone
LanguageHaskell2010

Emacs.Internal

Synopsis

Documentation

module Emacs.Type

runEmacsM :: MonadIO m => Ctx -> EmacsM a -> m a Source #

errorHandle :: EmacsEnv -> IO EmacsValue -> IO EmacsValue Source #

Haskell で投げられた例外の対応

Emacs -> Haskell から呼ばれるところに設置する必要がある。例外が補足 できないと恐らく emacs がクラッシュする。非同期例外については考える 必要はない。

二つの場合を対処する必要がある(多段)

  1. Haskell 側で例外が発生した
  2. Haskell から呼び出した emacs 関数の中で signal(or throw)された
  3. の場合、emacsから返ってきた時に non local exit かどうか確認し、 もしそうであれば haskellの例外を投げる。そして haskell -> emacsに戻 る場所で haskellの例外は補足する。その場合、non-local-exit は既に設 定されているので、

_non_local_exit_signal で haskellエラーであることを設定する。ただし これが簡単にはいかず、

  • IO モナドの中で実現する必要がある
  • emacs関数を呼び出す際に例外が発生しうるものを呼び出せない

catch する順番重要