Generate instruction DU

This commit is contained in:
Smaug123
2024-02-16 11:31:30 +00:00
parent 16daa1b7ca
commit 1e1176bec5
2 changed files with 175 additions and 13 deletions

View File

@@ -14,15 +14,25 @@ open WoofWare.Myriad.Plugins
/// Catamorphism
[<RequireQualifiedAccess>]
module ExprCata =
[<RequireQualifiedAccess>]
type private Instruction =
| ProcessExpr of Expr
| ProcessExprBuilder of ExprBuilder
| ExprPair of PairOpKind
| ExprSequential of int
| ExprBuilder
| ExprBuilderChild
| ExprBuilderParent
/// Execute the catamorphism.
let runExpr (cata : Cata<'ExprRet, 'ExprBuilderRet>) : 'ExprRet =
let runExpr (cata : Cata<'ExprRet, 'ExprBuilderRet>) (x : Expr) : 'ExprRet =
let instructions = ResizeArray ()
instructions.Add (Instruction.ProcessExpr x)
let ExprRetStack, ExprBuilderRetStack = loop cata instructions
Seq.exactlyOne ExprRetStack
/// Execute the catamorphism.
let runExprBuilder (cata : Cata<'ExprRet, 'ExprBuilderRet>) : 'ExprBuilderRet =
let runExprBuilder (cata : Cata<'ExprRet, 'ExprBuilderRet>) (x : ExprBuilder) : 'ExprBuilderRet =
let instructions = ResizeArray ()
instructions.Add (Instruction.ProcessExprBuilder x)
let ExprRetStack, ExprBuilderRetStack = loop cata instructions