roc/test/snapshots/statement_annotations.md
2025-11-25 10:05:41 -05:00

2.3 KiB

META

description=Inline annotation for statements
type=snippet

SOURCE

scopedTypeVarInternal : val -> val
scopedTypeVarInternal = |a| {
	b : other_val -> other_val
	b = |c| {
		d : other_val
		d = c

		d
	}

	b(a)
}

EXPECTED

NIL

PROBLEMS

NIL

TOKENS

LowerIdent,OpColon,LowerIdent,OpArrow,LowerIdent,
LowerIdent,OpAssign,OpBar,LowerIdent,OpBar,OpenCurly,
LowerIdent,OpColon,LowerIdent,OpArrow,LowerIdent,
LowerIdent,OpAssign,OpBar,LowerIdent,OpBar,OpenCurly,
LowerIdent,OpColon,LowerIdent,
LowerIdent,OpAssign,LowerIdent,
LowerIdent,
CloseCurly,
LowerIdent,NoSpaceOpenRound,LowerIdent,CloseRound,
CloseCurly,
EndOfFile,

PARSE

(file
	(type-module)
	(statements
		(s-type-anno (name "scopedTypeVarInternal")
			(ty-fn
				(ty-var (raw "val"))
				(ty-var (raw "val"))))
		(s-decl
			(p-ident (raw "scopedTypeVarInternal"))
			(e-lambda
				(args
					(p-ident (raw "a")))
				(e-block
					(statements
						(s-type-anno (name "b")
							(ty-fn
								(ty-var (raw "other_val"))
								(ty-var (raw "other_val"))))
						(s-decl
							(p-ident (raw "b"))
							(e-lambda
								(args
									(p-ident (raw "c")))
								(e-block
									(statements
										(s-type-anno (name "d")
											(ty-var (raw "other_val")))
										(s-decl
											(p-ident (raw "d"))
											(e-ident (raw "c")))
										(e-ident (raw "d"))))))
						(e-apply
							(e-ident (raw "b"))
							(e-ident (raw "a")))))))))

FORMATTED

NO CHANGE

CANONICALIZE

(can-ir
	(d-let
		(p-assign (ident "scopedTypeVarInternal"))
		(e-lambda
			(args
				(p-assign (ident "a")))
			(e-block
				(s-let
					(p-assign (ident "b"))
					(e-lambda
						(args
							(p-assign (ident "c")))
						(e-block
							(s-let
								(p-assign (ident "d"))
								(e-lookup-local
									(p-assign (ident "c"))))
							(e-lookup-local
								(p-assign (ident "d"))))))
				(e-call
					(e-lookup-local
						(p-assign (ident "b")))
					(e-lookup-local
						(p-assign (ident "a"))))))
		(annotation
			(ty-fn (effectful false)
				(ty-rigid-var (name "val"))
				(ty-rigid-var-lookup (ty-rigid-var (name "val")))))))

TYPES

(inferred-types
	(defs
		(patt (type "val -> val")))
	(expressions
		(expr (type "val -> val"))))