Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Evaluate AST terms to values in the value representation.
Synopsis
- data Error
- type MonadFEvalValue m = (MonadFEval m, EvalTo m ~ FValue, MonadError Error m)
- type FEvalValuePureT = WriterT [String] (ExceptT Error (Reader (Map Name FValue)))
- newtype FEvalValuePure a = FEvalValuePure {}
- runEvalFValuePure :: Map Name FValue -> FEvalValuePure a -> Either Error (a, [String])
- evalVar :: MonadFEvalValue m => Name -> m FValue
- evalExpr :: MonadFEvalValue m => Expression a -> m FValue
- forceVarExpr :: Expression a -> Name
- evalLit :: MonadFEvalValue m => Value a -> m FScalarValue
- err :: MonadError Error m => Error -> m a
- evalKp :: MonadFEvalValue m => KindParam a -> m FKindLit
- evalMKp :: MonadFEvalValue m => FKindLit -> Maybe (KindParam a) -> m FKindLit
- evalRealKp :: MonadFEvalValue m => ExponentLetter -> Maybe (KindParam a) -> m FKindLit
- evalUOp :: MonadFEvalValue m => UnaryOp -> FValue -> m FValue
- wrapOp :: MonadFEvalValue m => Either Error a -> m a
- wrapSOp :: MonadFEvalValue m => Either Error FScalarValue -> m FValue
- evalBOp :: MonadFEvalValue m => BinaryOp -> FValue -> FValue -> m FValue
- boolXor :: Bool -> Bool -> Bool
- defFLogical :: Bool -> FValue
- evalFunctionCall :: MonadFEvalValue m => Name -> [FValue] -> m FValue
- evalArg :: MonadFEvalValue m => Argument a -> m FValue
- forceScalar :: MonadFEvalValue m => FValue -> m FScalarValue
- forceUnconsArg :: MonadFEvalValue m => [a] -> m (a, [a])
- forceArgs :: MonadFEvalValue m => Int -> [a] -> m [a]
- evalIntrinsicIor :: MonadFEvalValue m => FScalarValue -> FScalarValue -> m FValue
- evalIntrinsicMax :: MonadFEvalValue m => [FValue] -> m FValue
Documentation
Error encountered while evaluating a Fortran expression to a value.
ENoSuchVar Name | |
EKindLitBadType Name FType | |
ENoSuchKindForType String FKindLit | |
EUnsupported String | |
EOp Error | |
EOpTypeError String | |
ELazy String | Catch-all for non-grouped errors. |
Instances
type MonadFEvalValue m = (MonadFEval m, EvalTo m ~ FValue, MonadError Error m) Source #
A convenience constraint tuple defining the base requirements of the
FValue
evaluator.
The evaluator is formed of combinators returning values in this monad. You may insert your own evaluator which handles monadic actions differently, provided it can fulfill these constraints.
type FEvalValuePureT = WriterT [String] (ExceptT Error (Reader (Map Name FValue))) Source #
derivingvia helper
newtype FEvalValuePure a Source #
A simple pure interpreter for Fortran value evaluation programs.
Instances
runEvalFValuePure :: Map Name FValue -> FEvalValuePure a -> Either Error (a, [String]) Source #
evalExpr :: MonadFEvalValue m => Expression a -> m FValue Source #
forceVarExpr :: Expression a -> Name Source #
evalLit :: MonadFEvalValue m => Value a -> m FScalarValue Source #
evalRealKp :: MonadFEvalValue m => ExponentLetter -> Maybe (KindParam a) -> m FKindLit Source #
wrapSOp :: MonadFEvalValue m => Either Error FScalarValue -> m FValue Source #
Wrap the output of an operation that returns a scalar value into the main evaluator.
evalBOp :: MonadFEvalValue 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 :: MonadFEvalValue m => Name -> [FValue] -> m FValue Source #
forceScalar :: MonadFEvalValue m => FValue -> m FScalarValue Source #
forceUnconsArg :: MonadFEvalValue m => [a] -> m (a, [a]) Source #
forceArgs :: MonadFEvalValue m => Int -> [a] -> m [a] Source #
evalIntrinsicIor :: MonadFEvalValue m => FScalarValue -> FScalarValue -> m FValue Source #
evalIntrinsicMax :: MonadFEvalValue m => [FValue] -> m FValue Source #