QXX6KTFXDUOBY3WATDAZ4XIRLHSRKXLSDQSSD7OP7CDLRUHGJELAC 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