roc/test/snapshots/lambda_capture/lambda_capture_complex_expressions.md
2025-11-23 01:22:01 -05:00

1.7 KiB

META

description=Complex expressions with captures - lambda with conditionals and captures
type=expr

SOURCE

(|outer| |inner| if outer > 0 (outer + inner) else inner)(1)(-2)

EXPECTED

NIL

PROBLEMS

NIL

TOKENS

OpenRound,OpBar,LowerIdent,OpBar,OpBar,LowerIdent,OpBar,KwIf,LowerIdent,OpGreaterThan,Int,OpenRound,LowerIdent,OpPlus,LowerIdent,CloseRound,KwElse,LowerIdent,CloseRound,NoSpaceOpenRound,Int,CloseRound,NoSpaceOpenRound,Int,CloseRound,
EndOfFile,

PARSE

(e-apply
	(e-apply
		(e-tuple
			(e-lambda
				(args
					(p-ident (raw "outer")))
				(e-lambda
					(args
						(p-ident (raw "inner")))
					(e-if-then-else
						(e-binop (op ">")
							(e-ident (raw "outer"))
							(e-int (raw "0")))
						(e-tuple
							(e-binop (op "+")
								(e-ident (raw "outer"))
								(e-ident (raw "inner"))))
						(e-ident (raw "inner"))))))
		(e-int (raw "1")))
	(e-int (raw "-2")))

FORMATTED

NO CHANGE

CANONICALIZE

(e-call
	(e-call
		(e-lambda
			(args
				(p-assign (ident "outer")))
			(e-closure
				(captures
					(capture (ident "outer")))
				(e-lambda
					(args
						(p-assign (ident "inner")))
					(e-if
						(if-branches
							(if-branch
								(e-binop (op "gt")
									(e-lookup-local
										(p-assign (ident "outer")))
									(e-num (value "0")))
								(e-binop (op "add")
									(e-lookup-local
										(p-assign (ident "outer")))
									(e-lookup-local
										(p-assign (ident "inner"))))))
						(if-else
							(e-lookup-local
								(p-assign (ident "inner"))))))))
		(e-num (value "1")))
	(e-num (value "-2")))

TYPES

(expr (type "a where [a.from_numeral : Numeral -> Try(a, [InvalidNumeral(Str)])]"))