packages feed

funcons-tools-0.1.0.0: cbs/Funcons/Core/Computations/DataFlow/Linking/AllocateLink.hs

-- GeNeRaTeD fOr: ../../CBS/Funcons/Computations/Data flow/Linking/allocate-link.aterm
{-# LANGUAGE OverloadedStrings #-}

module Funcons.Core.Computations.DataFlow.Linking.AllocateLink where

import Funcons.EDSL

entities = []

types = typeEnvFromList
    []

funcons = libFromList
    [("allocate-link",StrictFuncon stepAllocate_link)]

-- |
-- /allocate-link(T)/ computes a link to values of type /T/ .
allocate_link_ fargs = FApp "allocate-link" (FTuple fargs)
stepAllocate_link fargs =
    evalRules [] [step1]
    where step1 = do
            let env = emptyEnv
            env <- lifted_vsMatch fargs [VPAnnotated (VPMetaVar "T") (TName "types")] env
            env <- getMutPatt "link-store" (VPMetaVar "Sigma") env
            putMutTerm "link-store" (TTuple [TVar "Sigma"]) env
            env <- premise (TName "fresh-atom") (PMetaVar "K") env
            env <- getMutPatt "link-store" (VPMetaVar "Sigma'") env
            env <- lifted_sideCondition (SCPatternMatch (TApp "simple-link" (TTuple [TVar "K",TVar "T"])) (VPMetaVar "L")) env
            putMutTerm "link-store" (TTuple [TApp "map-unite" (TTuple [TVar "Sigma'",TMap [TTuple [TVar "L",TName "uninitialised"]]])]) env
            stepTermTo (TVar "L") env