-- GeNeRaTeD fOr: ../../CBS/Funcons/Computations/Data flow/Storing/Simple variables/assign.aterm {-# LANGUAGE OverloadedStrings #-} module Funcons.Core.Computations.DataFlow.Storing.SimpleVariables.Assign where import Funcons.EDSL entities = [] types = typeEnvFromList [] funcons = libFromList [("assign",StrictFuncon stepAssign)] -- | -- /assign(Var,Val)/ assigns /Val/ to the the variable /Var/ , provided /Var/ has -- not been deallocated and /Val/ is of the appropriate type for storing in /Var/ . assign_ fargs = FApp "assign" (FTuple fargs) stepAssign fargs = evalRules [] [step1,step2,step3] where step1 = do let env = emptyEnv env <- lifted_vsMatch fargs [VPMetaVar "Var",VPMetaVar "Val"] env env <- getMutPatt "store" (VPMetaVar "Sigma") env env <- lifted_sideCondition (SCEquality (TApp "is-in-set" (TTuple [TVar "Var",TApp "domain" (TTuple [TVar "Sigma"])])) (TName "true")) env env <- lifted_sideCondition (SCIsInSort (TVar "Val") (TApp "variable-accepting-type" (TTuple [TVar "Var"]))) env putMutTerm "store" (TTuple [TApp "map-override" (TTuple [TMap [TTuple [TVar "Var",TVar "Val"]],TVar "Sigma"])]) env stepTo (FTuple []) step2 = do let env = emptyEnv env <- lifted_vsMatch fargs [VPMetaVar "Var",VPAnnotated (VPMetaVar "Val") (TName "values")] env env <- getMutPatt "store" (VPMetaVar "Sigma") env env <- lifted_sideCondition (SCEquality (TApp "is-in-set" (TTuple [TVar "Var",TApp "domain" (TTuple [TVar "Sigma"])])) (TName "false")) env putMutTerm "store" (TTuple [TVar "Sigma"]) env stepTo (FName "fail") step3 = do let env = emptyEnv env <- lifted_vsMatch fargs [VPMetaVar "Var",VPMetaVar "Val"] env env <- getMutPatt "store" (VPMetaVar "Sigma") env env <- lifted_sideCondition (SCNotInSort (TVar "Val") (TApp "variable-accepting-type" (TTuple [TVar "Var"]))) env putMutTerm "store" (TTuple [TVar "Sigma"]) env stepTo (FName "fail")