original.name="RecursiveType_Valid_26" ====== >>> main.whiley type Expr is bool | {int data, Expr lhs} | Expr[] type SubExpr is bool | {int data, SubExpr lhs} function toString(Expr e) -> int: if e is SubExpr: if e is bool: return 0 else: return 1 else: return -1 public export method test() : SubExpr se1 = false SubExpr se2 = {data: 1, lhs: se1} SubExpr se3 = {data: 45, lhs: se2} Expr e1 = [se1] Expr e2 = [e1, se1, se2] assume toString(se1) == 0 assume toString(se2) == 1 assume toString(se3) == 1 assume toString(e1) == -1 assume toString(e2) == -1 ---