-- 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"