Syntax.Abstract: implement eval
Dependencies
- [2]
JDF4JUMSsome attempts at abstract syntax - [3]
HQ2ZYTX5add comment lexing and remove references stuff
Change contents
- replacement in core/lib/GardGround/Syntax/Abstract.hs at line 4
NeutralRoot,Neutral,ValueError,Value,NeutralRoot(..),Neutral(..),ValueError(..),Value(..),Expr(..), - edit in core/lib/GardGround/Syntax/Abstract.hs at line 11
eval, - replacement in core/lib/GardGround/Syntax/Abstract.hs at line 19
import GardGround.Syntax.Literal (Literal)import GardGround.Syntax.Literal (Literal, lookupBinder) - edit in core/lib/GardGround/Syntax/Abstract.hs at line 44
| VEOutOfRangeLocal Natural - edit in core/lib/GardGround/Syntax/Abstract.hs at line 55
-- | Apply a value to a value - edit in core/lib/GardGround/Syntax/Abstract.hs at line 71
| EAnnot Expr Expr - edit in core/lib/GardGround/Syntax/Abstract.hs at line 97[2.2837]
eval :: Expr -> [Value] -> EvalResulteval kind env = case kind ofENeutralRoot (Local x) -> case lookupBinder env x ofNothing -> Left . VEOutOfRangeLocal $ x - (toEnum $ length env)Just y -> Right yENeutralRoot x -> Right $ VNeutral (Neutral x mempty)EAnnot e _ -> eval e envEApply e e' -> dov <- eval e envv' <- eval e' envvapp v v'ELam e -> Right . VLam $ \y -> eval e (y:env)EPi arg e -> fmap (\res -> VPi res $ \y -> eval e (y:env)) $ eval arg env