module Language.Fortran.Repr.Eval.Type where
import qualified Language.Fortran.AST as F
import Language.Fortran.Repr.Type
import Language.Fortran.Repr.Eval.Common
fromExpression
:: forall m a. (MonadFEval m, EvalTo m ~ FType)
=> F.Expression a -> m (Either String FType)
fromExpression :: forall (m :: * -> *) a.
(MonadFEval m, EvalTo m ~ FType) =>
Expression a -> m (Either String FType)
fromExpression = \case
F.ExpValue a
_ SrcSpan
_ (F.ValVariable String
name) ->
forall (m :: * -> *).
MonadFEval m =>
String -> m (Maybe (EvalTo m))
lookupFVar String
name forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Maybe FType
Nothing -> forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ forall a b. a -> Either a b
Left String
"no such variable found TODO"
Just FType
val -> forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ forall a b. b -> Either a b
Right FType
val