-- GeNeRaTeD fOr: ../../CBS/Funcons/Values/Composite values/Algebraic datatype values/references.aterm {-# LANGUAGE OverloadedStrings #-} module Funcons.Core.Values.CompositeValues.AlgebraicDatatypeValues.References where import Funcons.EDSL entities = [] types = typeEnvFromList [("references",DataTypeMembers [(Just "T",TName "types")] [DataTypeConstructor "reference" (TTuple [TVar "T"])])] funcons = libFromList [("pointers",StrictFuncon stepPointers),("references",StrictFuncon stepReferences),("reference",StrictFuncon stepReference)] pointers_ fargs = FApp "pointers" (FTuple fargs) stepPointers fargs = evalRules [rewrite1] [] where rewrite1 = do let env = emptyEnv env <- vsMatch fargs [VPAnnotated (VPMetaVar "T") (TName "values")] env rewriteTermTo (TSortUnion (TName "unit-type") (TApp "references" (TTuple [TVar "T"]))) env stepReference vs = rewritten (ADTVal "reference" vs) stepReferences ts = rewriteType "references" ts