funcons-tools-0.1.0.0: cbs/Funcons/Core/Computations/DataFlow/Binding/Recursion/BindRecursively.hs
-- GeNeRaTeD fOr: ../../CBS/Funcons/Computations/Data flow/Binding/Recursion/bind-recursively.aterm
{-# LANGUAGE OverloadedStrings #-}
module Funcons.Core.Computations.DataFlow.Binding.Recursion.BindRecursively where
import Funcons.EDSL
entities = []
types = typeEnvFromList
[]
funcons = libFromList
[("bind-recursively",PartiallyStrictFuncon [Strict,NonStrict] stepBind_recursively)]
-- |
-- /bind-recursively(B,E)/ binds /B/ to the result of evaluating /E/ , which may
-- recursively refer to /B/ (using /bound-recursively/ ).
bind_recursively_ fargs = FApp "bind-recursively" (FTuple fargs)
stepBind_recursively fargs@[arg1,arg2] =
evalRules [rewrite1] []
where rewrite1 = do
let env = emptyEnv
env <- fsMatch fargs [PAnnotated (PMetaVar "B") (TName "values"),PMetaVar "E"] env
rewriteTermTo (TApp "recursive" (TTuple [TSet [TVar "B"],TApp "bind" (TTuple [TVar "B",TVar "E"])])) env
stepBind_recursively fargs = sortErr (FApp "bind-recursively" (FTuple fargs)) "invalid number of arguments"