Safe Haskell | None |
---|---|
Language | Haskell2010 |
Language.Fortran.Repr.Eval.Value
Description
Evaluate AST terms to values in the value representation.
Synopsis
- data Error
- type MonadFEvalValue (m :: Type -> Type) = (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 (Analysis a) -> m FValue
- forceVarExpr :: Expression (Analysis a) -> Name
- evalLit :: MonadFEvalValue m => Value (Analysis a) -> m FScalarValue
- err :: MonadError Error m => Error -> m a
- evalKp :: MonadFEvalValue m => KindParam (Analysis a) -> m FKindLit
- evalMKp :: MonadFEvalValue m => FKindLit -> Maybe (KindParam (Analysis a)) -> m FKindLit
- evalRealKp :: MonadFEvalValue m => ExponentLetter -> Maybe (KindParam (Analysis 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
- evalIntrinsicInt :: MonadFEvalValue m => FValue -> FInt -> m FInt
- evalIntrinsicInt1 :: MonadFEvalValue m => FValue -> m Int8
- evalIntrinsicInt2 :: MonadFEvalValue m => FValue -> m Int16
- evalIntrinsicInt4 :: MonadFEvalValue m => FValue -> m Int32
- evalIntrinsicInt8 :: MonadFEvalValue m => FValue -> m Int64
- evalIntrinsicIntXCoerce :: forall r m. (MonadFEvalValue m, Integral r) => (FInt -> r) -> FValue -> m r
- evalArg :: MonadFEvalValue m => Argument (Analysis 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
- evalConstExpr :: MonadFEvalValue m => Expression (Analysis a) -> m FValue
Documentation
Error encountered while evaluating a Fortran expression to a value.
Constructors
ENoSuchVar Name | |
EKindLitBadType Name FType | |
ENoSuchKindForType String FKindLit | |
EUnsupported String | Syntax which probably should be supported, but (currently) isn't. |
EOp Error | |
EOpTypeError String | |
ESpecial String | Special value-like expression that we can't evaluate usefully. |
ELazy String | Catch-all for non-grouped errors. |
Instances
type MonadFEvalValue (m :: Type -> Type) = (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.
Constructors
FEvalValuePure | |
Instances
Applicative FEvalValuePure Source # | |||||
Defined in Language.Fortran.Repr.Eval.Value Methods pure :: a -> FEvalValuePure a # (<*>) :: FEvalValuePure (a -> b) -> FEvalValuePure a -> FEvalValuePure b # liftA2 :: (a -> b -> c) -> FEvalValuePure a -> FEvalValuePure b -> FEvalValuePure c # (*>) :: FEvalValuePure a -> FEvalValuePure b -> FEvalValuePure b # (<*) :: FEvalValuePure a -> FEvalValuePure b -> FEvalValuePure a # | |||||
Functor FEvalValuePure Source # | |||||
Defined in Language.Fortran.Repr.Eval.Value Methods fmap :: (a -> b) -> FEvalValuePure a -> FEvalValuePure b # (<$) :: a -> FEvalValuePure b -> FEvalValuePure a # | |||||
Monad FEvalValuePure Source # | |||||
Defined in Language.Fortran.Repr.Eval.Value Methods (>>=) :: FEvalValuePure a -> (a -> FEvalValuePure b) -> FEvalValuePure b # (>>) :: FEvalValuePure a -> FEvalValuePure b -> FEvalValuePure b # return :: a -> FEvalValuePure a # | |||||
MonadFEval FEvalValuePure Source # | |||||
Defined in Language.Fortran.Repr.Eval.Value Associated Types
Methods lookupFVar :: Name -> FEvalValuePure (Maybe (EvalTo FEvalValuePure)) Source # warn :: String -> FEvalValuePure () Source # | |||||
MonadError Error FEvalValuePure Source # | |||||
Defined in Language.Fortran.Repr.Eval.Value Methods throwError :: Error -> FEvalValuePure a # catchError :: FEvalValuePure a -> (Error -> FEvalValuePure a) -> FEvalValuePure a # | |||||
MonadWriter [String] FEvalValuePure Source # | |||||
Defined in Language.Fortran.Repr.Eval.Value Methods writer :: (a, [String]) -> FEvalValuePure a # tell :: [String] -> FEvalValuePure () # listen :: FEvalValuePure a -> FEvalValuePure (a, [String]) # pass :: FEvalValuePure (a, [String] -> [String]) -> FEvalValuePure a # | |||||
MonadReader (Map Name FValue) FEvalValuePure Source # | |||||
Defined in Language.Fortran.Repr.Eval.Value | |||||
type EvalTo FEvalValuePure Source # | |||||
Defined in Language.Fortran.Repr.Eval.Value |
runEvalFValuePure :: Map Name FValue -> FEvalValuePure a -> Either Error (a, [String]) Source #
evalExpr :: MonadFEvalValue m => Expression (Analysis a) -> m FValue Source #
forceVarExpr :: Expression (Analysis a) -> Name Source #
evalLit :: MonadFEvalValue m => Value (Analysis a) -> m FScalarValue Source #
evalRealKp :: MonadFEvalValue m => ExponentLetter -> Maybe (KindParam (Analysis 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 #
evalIntrinsicInt :: MonadFEvalValue m => FValue -> FInt -> m FInt Source #
evalIntrinsicInt1 :: MonadFEvalValue m => FValue -> m Int8 Source #
INT(a, 1)
evalIntrinsicInt2 :: MonadFEvalValue m => FValue -> m Int16 Source #
INT(a, 2)
evalIntrinsicInt4 :: MonadFEvalValue m => FValue -> m Int32 Source #
INT(a, 4)
, INT(a)
evalIntrinsicInt8 :: MonadFEvalValue m => FValue -> m Int64 Source #
INT(a, 8)
evalIntrinsicIntXCoerce :: forall r m. (MonadFEvalValue m, Integral r) => (FInt -> r) -> FValue -> m r 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 #
evalConstExpr :: MonadFEvalValue m => Expression (Analysis a) -> m FValue Source #
Evaluate a constant expression (F2018 10.1.12).