{-# LANGUAGE OverloadedStrings #-} module Emacs.Variable ( setVariable , variableValue , isVariableBounded ) where import Emacs.Core import Data.Text setVariable :: ToEmacsValue a => Text -> a -> EmacsM EmacsValue setVariable name val = funcall2 "set" (Symbol name) val isVariableBounded :: Text -> EmacsM Bool isVariableBounded name = isNotNil =<< funcall1 "boundp" (Symbol name) variableValue :: Text -> EmacsM (Maybe EmacsValue) variableValue name = do bounded <- isNotNil =<< funcall1 "boundp" (Symbol name) if bounded then Just <$> funcall1 "symbol-value" (Symbol name) else pure Nothing