packages feed

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

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

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

import Funcons.EDSL

entities = []

types = typeEnvFromList
    []

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

-- |
-- /allocate-initialised-link(T,V)/ computes a link to values of type /T/ ,
--   and sets its value to /V/ .
--   This /fail/ s if the type of /V/ is not a subtype of /T/ .
allocate_initialised_link_ fargs = FApp "allocate-initialised-link" (FTuple fargs)
stepAllocate_initialised_link fargs =
    evalRules [rewrite1] []
    where rewrite1 = do
            let env = emptyEnv
            env <- vsMatch fargs [VPAnnotated (VPMetaVar "T") (TName "values"),VPAnnotated (VPMetaVar "V") (TName "values")] env
            rewriteTermTo (TApp "give" (TTuple [TApp "allocate-link" (TTuple [TVar "T"]),TApp "sequential" (TTuple [TApp "set-link" (TTuple [TName "given",TVar "V"]),TName "given"])])) env