{-# LANGUAGE OverloadedStrings #-} module Funcons.Core.Computations.Normal.GeneratingBuiltin where import Funcons.EDSL import Funcons.Operations hiding (Values,tobool,libFromList) import Data.Set (fromList) library :: FunconLibrary library = [(Name, EvalFunction)] -> FunconLibrary libFromList [ (Name "initialise-generating", NonStrictFuncon -> EvalFunction NonStrictFuncon NonStrictFuncon stepInitialise_generating) ] initialise_generating_ :: Funcons initialise_generating_ = Name -> Funcons FName Name "initialise-generating" stepInitialise_generating :: NonStrictFuncon stepInitialise_generating [Funcons] fargs = [Rewrite Rewritten] -> [MSOS StepRes] -> Rewrite Rewritten evalRules [] [MSOS StepRes step1] where step1 :: MSOS StepRes step1 = do let env :: Map k a env = forall {k} {a}. Map k a emptyEnv Env env <- [Funcons] -> [FPattern] -> Env -> MSOS Env lifted_fsMatch [Funcons] fargs [MetaVar -> FPattern PMetaVar MetaVar "P"] forall {k} {a}. Map k a env Env env <- Name -> [VPattern] -> Env -> MSOS Env getMutPatt Name "used-atom-set" [VPattern VPWildCard] Env env Name -> [Values] -> MSOS () putMut Name "used-atom-set" [Values reserved_atoms] FTerm -> Env -> MSOS StepRes stepTermTo (MetaVar -> FTerm TVar MetaVar "P") Env env reserved_atoms :: Values reserved_atoms = forall t. ValueSets (Values t) -> Values t Set (forall a. Ord a => [a] -> Set a fromList [])