-- GeNeRaTeD fOr: ../../CBS/Funcons/Values/Composite values/Algebraic datatype values/records.aterm {-# LANGUAGE OverloadedStrings #-} module Funcons.Core.Values.CompositeValues.AlgebraicDatatypeValues.Records where import Funcons.EDSL entities = [] types = typeEnvFromList [("records",DataTypeMembers [(Nothing,TApp "maps" (TTuple [TName "values",TName "types"]))] [DataTypeConstructor "record" (TTuple [TApp "maps" (TTuple [TName "values",TName "values"])])])] funcons = libFromList [("record-field-map",StrictFuncon stepRecord_field_map),("record-select",StrictFuncon stepRecord_select),("records",StrictFuncon stepRecords),("record",StrictFuncon stepRecord)] record_field_map_ fargs = FApp "record-field-map" (FTuple fargs) stepRecord_field_map fargs = evalRules [rewrite1] [] where rewrite1 = do let env = emptyEnv env <- vsMatch fargs [PADT "record" [VPMetaVar "M"]] env rewriteTermTo (TVar "M") env record_select_ fargs = FApp "record-select" (FTuple fargs) stepRecord_select fargs = evalRules [rewrite1] [] where rewrite1 = do let env = emptyEnv env <- vsMatch fargs [VPAnnotated (VPMetaVar "R") (TName "values"),VPAnnotated (VPMetaVar "K") (TName "values")] env rewriteTermTo (TApp "lookup" (TTuple [TVar "K",TApp "record-field-map" (TTuple [TVar "R"])])) env stepRecord vs = rewritten (ADTVal "record" vs) stepRecords ts = rewriteType "records" ts