-- GeNeRaTeD fOr: ../../CBS/Funcons/Computations/Data flow/Storing/General variables/general-assigned.aterm {-# LANGUAGE OverloadedStrings #-} module Funcons.Core.Computations.DataFlow.Storing.GeneralVariables.GeneralAssigned where import Funcons.EDSL entities = [] types = typeEnvFromList [] funcons = libFromList [("general-assigned",StrictFuncon stepGeneral_assigned)] -- | -- /general-assigned(V)/ takes a (potentially composite) value /V/ , which may -- contain /variables/ , and computes the value of /V/ with all such contained -- variables replaced by the values currently assigned to those variables. general_assigned_ fargs = FApp "general-assigned" (FTuple fargs) stepGeneral_assigned fargs = evalRules [rewrite1,rewrite2,rewrite3,rewrite4,rewrite5,rewrite6,rewrite7] [] where rewrite1 = do let env = emptyEnv env <- vsMatch fargs [VPMetaVar "V"] env env <- sideCondition (SCNotInSort (TVar "V") (TName "all-variables")) env env <- sideCondition (SCNotInSort (TVar "V") (TName "algebraic-datatypes")) env env <- sideCondition (SCNotInSort (TVar "V") (TApp "lists" (TTuple [TName "values"]))) env env <- sideCondition (SCNotInSort (TVar "V") (TApp "maps" (TTuple [TName "values",TName "values"]))) env env <- sideCondition (SCNotInSort (TVar "V") (TApp "tuples" (TTuple [TName "values",TSortSeq (TName "values") PlusOp]))) env env <- sideCondition (SCNotInSort (TVar "V") (TApp "vectors" (TTuple [TName "values"]))) env rewriteTermTo (TVar "V") env rewrite2 = do let env = emptyEnv env <- vsMatch fargs [VPAnnotated (VPMetaVar "Var") (TName "all-variables")] env rewriteTermTo (TApp "assigned" (TTuple [TVar "Var"])) env rewrite3 = do let env = emptyEnv env <- vsMatch fargs [VPAnnotated (VPMetaVar "ADT") (TName "algebraic-datatypes")] env rewriteTermTo (TApp "algebraic-datatype" (TTuple [TApp "algebraic-datatype-constructor" (TTuple [TVar "ADT"]),TApp "general-assigned" (TTuple [TApp "algebraic-datatype-value" (TTuple [TVar "ADT"])])])) env rewrite4 = do let env = emptyEnv env <- vsMatch fargs [VPAnnotated (VPMetaVar "L") (TApp "lists" (TTuple [TName "values"]))] env rewriteTermTo (TApp "list-map" (TTuple [TApp "general-assigned" (TTuple [TName "given"]),TVar "L"])) env rewrite5 = do let env = emptyEnv env <- vsMatch fargs [VPAnnotated (VPMetaVar "M") (TApp "maps" (TTuple [TName "values",TName "values"]))] env rewriteTermTo (TApp "map-map" (TTuple [TApp "general-assigned" (TTuple [TName "given2"]),TVar "M"])) env rewrite6 = do let env = emptyEnv env <- vsMatch fargs [VPAnnotated (VPMetaVar "T") (TApp "tuples" (TTuple [TName "values",TSortSeq (TName "values") PlusOp]))] env rewriteTermTo (TApp "tuple-map" (TTuple [TApp "general-assigned" (TTuple [TName "given"]),TVar "T"])) env rewrite7 = do let env = emptyEnv env <- vsMatch fargs [VPAnnotated (VPMetaVar "Vec") (TApp "vectors" (TTuple [TName "values"]))] env rewriteTermTo (TApp "vector-map" (TTuple [TApp "general-assigned" (TTuple [TName "given"]),TVar "Vec"])) env