Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Evaluate AST terms to values in the value representation.
Synopsis
- type MonadEvalValue m = (MonadEval m, EvalTo m ~ FValue, MonadError Error m)
- data Error
- type KindLit = String
- type EvalValueSimple = WriterT [String] (ExceptT Error (Reader (Map Name FValue)))
- runEvalValueSimple :: Map Name FValue -> EvalValueSimple a -> Either Error (a, [String])
- evalVar :: MonadEvalValue m => Name -> m FValue
- evalExpr :: MonadEvalValue m => Expression a -> m FValue
- forceVarExpr :: Expression a -> Name
- evalLit :: MonadEvalValue m => Value a -> m FScalarValue
- err :: MonadError Error m => Error -> m a
- evalKp :: MonadEvalValue m => KindLit -> Maybe (KindParam a) -> m KindLit
- evalRealKp :: MonadEvalValue m => ExponentLetter -> Maybe (KindParam a) -> m KindLit
- evalUOp :: MonadEvalValue m => UnaryOp -> FValue -> m FValue
- wrapOp :: MonadEvalValue m => Either Error a -> m a
- wrapSOp :: MonadEvalValue m => Either Error FScalarValue -> m FValue
- evalBOp :: MonadEvalValue m => BinaryOp -> FValue -> FValue -> m FValue
- boolXor :: Bool -> Bool -> Bool
- defFLogical :: Bool -> FValue
- evalFunctionCall :: MonadEvalValue m => Name -> [FValue] -> m FValue
- evalArg :: MonadEvalValue m => Argument a -> m FValue
- forceScalar :: MonadEvalValue m => FValue -> m FScalarValue
- forceUnconsArg :: MonadEvalValue m => [a] -> m (a, [a])
- forceArgs :: MonadEvalValue m => Int -> [a] -> m [a]
- evalIntrinsicIor :: MonadEvalValue m => FScalarValue -> FScalarValue -> m FValue
- evalIntrinsicMax :: MonadEvalValue m => [FValue] -> m FValue
Documentation
type MonadEvalValue m = (MonadEval m, EvalTo m ~ FValue, MonadError Error m) Source #
A convenience type over MonadEval
bringing all requirements into scope.
Value evaluation error.
ENoSuchVar Name | |
EKindLitBadType Name FType | |
ENoSuchKindForType String KindLit | |
EUnsupported String | |
EOp Error | |
EOpTypeError String | |
ELazy String | Catch-all for non-grouped errors. |
Instances
type EvalValueSimple = WriterT [String] (ExceptT Error (Reader (Map Name FValue))) Source #
A simple pure interpreter for Fortran value evaluation programs.
runEvalValueSimple :: Map Name FValue -> EvalValueSimple a -> Either Error (a, [String]) Source #
evalExpr :: MonadEvalValue m => Expression a -> m FValue Source #
forceVarExpr :: Expression a -> Name Source #
evalLit :: MonadEvalValue m => Value a -> m FScalarValue Source #
evalRealKp :: MonadEvalValue m => ExponentLetter -> Maybe (KindParam a) -> m KindLit Source #
wrapSOp :: MonadEvalValue m => Either Error FScalarValue -> m FValue Source #
Wrap the output of an operation that returns a scalar value into the main evaluator.
evalBOp :: MonadEvalValue m => BinaryOp -> FValue -> FValue -> m FValue Source #
Evaluate explicit binary operators (ones denoted as such in the AST).
Note that this does not cover all binary operators -- there are many intrinsics which use function syntax, but are otherwise binary operators.
defFLogical :: Bool -> FValue Source #
evalFunctionCall :: MonadEvalValue m => Name -> [FValue] -> m FValue Source #
forceScalar :: MonadEvalValue m => FValue -> m FScalarValue Source #
forceUnconsArg :: MonadEvalValue m => [a] -> m (a, [a]) Source #
forceArgs :: MonadEvalValue m => Int -> [a] -> m [a] Source #
evalIntrinsicIor :: MonadEvalValue m => FScalarValue -> FScalarValue -> m FValue Source #
evalIntrinsicMax :: MonadEvalValue m => [FValue] -> m FValue Source #