-- GeNeRaTeD fOr: ../../CBS/Funcons/Computations/Control flow/Abnormal/Continuations/prompt.aterm {-# LANGUAGE OverloadedStrings #-} module Funcons.Core.Computations.ControlFlow.Abnormal.Continuations.Prompt where import Funcons.EDSL entities = [] types = typeEnvFromList [] funcons = libFromList [("prompt",NonStrictFuncon stepPrompt)] -- | -- /prompt/ is a delimiter for the /control/ and /call-cc/ operators. prompt_ fargs = FApp "prompt" (FTuple fargs) stepPrompt fargs = evalRules [rewrite1] [step1,step2] where rewrite1 = do let env = emptyEnv env <- fsMatch fargs [PAnnotated (PMetaVar "V") (TName "values")] env rewriteTermTo (TVar "V") env step1 = do let env = emptyEnv env <- lifted_fsMatch fargs [PMetaVar "E"] env env <- receiveSignalPatt "control-signal" (Nothing) (premise (TVar "E") (PMetaVar "E'") env) stepTermTo (TApp "prompt" (TTuple [TVar "E'"])) env step2 = do let env = emptyEnv env <- lifted_fsMatch fargs [PMetaVar "E"] env env <- receiveSignalPatt "control-signal" (Just (VPMetaVar "F")) (premise (TVar "E") (PMetaVar "E'") env) env <- lifted_sideCondition (SCPatternMatch (TApp "lambda" (TTuple [TApp "plug" (TTuple [TVar "E'",TName "given"])])) (VPMetaVar "K")) env stepTermTo (TApp "prompt" (TTuple [TApp "apply" (TTuple [TVar "F",TVar "K"])])) env