@(define fun (x y))
@(bind x "x")
@y
@y
@y
@(end)
@(next :list '("a" "a" "a" "b" "c"))
@{z (fun x "a")}
@(require (equal x "x"))
@(require (equal z '("a" "a" "a")))
@(define fun2 (x y))@(bind x "x")@y@(end)
@(next :string "ab")
@{w (fun2 x "a")}@y
@(require (equal w "a"))
@(require (equal y "b"))
@(next :list '("a" "a" "a" "b" "c"))
@(bind d ("d"))
@(cases)
@  {d (fun "x" "a")}
@  {require (not "get here")}
@(or)
@  (require "get here")
@(end)
@(next :string "ab")
@(cases)
@  {d (fun2 "x" "a")}
@  {require (not "get here")}
@(or)
@  (require "get here")
@(end)
@(bind n "123")
@(next :string "123456")
@(cases)
@  {n /\d+/}
@  {require (not "get here")}
@(or)
@  {m /\d+/}
@  (require (equal m "123456"))
@(end)