1
1
mirror of https://github.com/github/semantic.git synced 2025-01-06 06:46:07 +03:00

Define a variable convenience.

This commit is contained in:
Rob Rix 2018-03-30 18:45:48 -04:00
parent fe3b9730c4
commit 92011e8ef2
2 changed files with 5 additions and 1 deletions

View File

@ -6,6 +6,7 @@ module Data.Abstract.Evaluatable
, Unspecialized(..) , Unspecialized(..)
, LoadError(..) , LoadError(..)
, EvalError(..) , EvalError(..)
, variable
, evaluateTerm , evaluateTerm
, evaluateModule , evaluateModule
, evaluatePackage , evaluatePackage
@ -65,6 +66,9 @@ data EvalError value resume where
-- Indicates we weren't able to dereference a name from the evaluated environment. -- Indicates we weren't able to dereference a name from the evaluated environment.
FreeVariableError :: Name -> EvalError value value FreeVariableError :: Name -> EvalError value value
variable :: MonadEvaluatable location term value m => Name -> m value
variable name = lookupWith deref name >>= maybeM (throwException (FreeVariableError name))
deriving instance Eq (EvalError a b) deriving instance Eq (EvalError a b)
deriving instance Show (EvalError a b) deriving instance Show (EvalError a b)
instance Show1 (EvalError value) where instance Show1 (EvalError value) where

View File

@ -106,7 +106,7 @@ instance Ord1 Identifier where liftCompare = genericLiftCompare
instance Show1 Identifier where liftShowsPrec = genericLiftShowsPrec instance Show1 Identifier where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable Identifier where instance Evaluatable Identifier where
eval (Identifier name) = lookupWith deref name >>= maybeM (throwException (FreeVariableError name)) eval (Identifier name) = variable name
instance FreeVariables1 Identifier where instance FreeVariables1 Identifier where
liftFreeVariables _ (Identifier x) = pure x liftFreeVariables _ (Identifier x) = pure x