{-# LANGUAGE OverloadedStrings #-}
module Funcons.Core.Computations.Normal.Generating.Generating where
import Funcons.EDSL
import Funcons.Operations hiding (Values,libFromList)
entities = []
types = typeEnvFromList
[]
funcons = libFromList
[("fresh-atom",NullaryFuncon stepFresh_atom),("use-atom-not-in",StrictFuncon stepUse_atom_not_in)]
fresh_atom_ = FName "fresh-atom"
stepFresh_atom = evalRules [] [step1]
where step1 = do
let env = emptyEnv
env <- getMutPatt "used-atom-set" (VPMetaVar "SA") env
env <- lifted_sideCondition (SCPatternMatch (TApp "element-not-in" [TName "atoms",TVar "SA"]) [VPMetaVar "A"]) env
putMutTerm "used-atom-set" (TApp "set-insert" [TVar "A",TVar "SA"]) env
stepTermTo (TVar "A") env
use_atom_not_in_ fargs = FApp "use-atom-not-in" (fargs)
stepUse_atom_not_in fargs =
evalRules [] [step1]
where step1 = do
let env = emptyEnv
env <- lifted_vsMatch fargs [VPAnnotated (VPMetaVar "SA") (TApp "sets" [TName "atoms"])] env
env <- getMutPatt "used-atom-set" (VPMetaVar "SA'") env
env <- lifted_sideCondition (SCPatternMatch (TApp "element-not-in" [TName "atoms",TVar "SA"]) [VPMetaVar "A"]) env
putMutTerm "used-atom-set" (TApp "set-insert" [TVar "A",TVar "SA'"]) env
stepTermTo (TVar "A") env