packages feed

haskelisp-0.1.0.0: src/Emacs/Variable.hs

{-# 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