Test against snapshots, fix alias unification

This commit is contained in:
Jared Ramirez 2025-09-19 11:20:49 -04:00
parent 56f632d509
commit 193ce7b11a
No known key found for this signature in database
GPG key ID: 41158983F521D68C
352 changed files with 6795 additions and 3633 deletions

View file

@ -497,10 +497,9 @@ pub fn canonicalizeFile(
try self.env.store.setStatementNode(type_decl_stmt_idx, type_decl_stmt);
try self.env.store.addScratchStatement(type_decl_stmt_idx);
// TODO: is this needed?
// Remove from exposed_type_texts since the type is now fully defined
// const type_text = self.env.getIdent(type_header.name);
// _ = self.exposed_type_texts.remove(type_text);
const type_text = self.env.getIdent(type_header.name);
_ = self.exposed_type_texts.remove(type_text);
},
else => {
// Skip non-type-declaration statements in first pass

File diff suppressed because it is too large Load diff

View file

@ -299,12 +299,12 @@ pub const ReportBuilder = struct {
.negative_unsigned_int => |data| {
return self.buildNegativeUnsignedIntReport(data);
},
.infinite_recursion => |_| return self.buildUnimplementedReport(),
.anonymous_recursion => |_| return self.buildUnimplementedReport(),
.invalid_number_type => |_| return self.buildUnimplementedReport(),
.invalid_record_ext => |_| return self.buildUnimplementedReport(),
.invalid_tag_union_ext => |_| return self.buildUnimplementedReport(),
.bug => |_| return self.buildUnimplementedReport(),
.infinite_recursion => |_| return self.buildUnimplementedReport("infinite_recursion"),
.anonymous_recursion => |_| return self.buildUnimplementedReport("anonymous_recursion"),
.invalid_number_type => |_| return self.buildUnimplementedReport("invalid_number_type"),
.invalid_record_ext => |_| return self.buildUnimplementedReport("invalid_record_ext"),
.invalid_tag_union_ext => |_| return self.buildUnimplementedReport("invalid_tag_union_ext"),
.bug => |_| return self.buildUnimplementedReport("bug"),
}
}
@ -1723,8 +1723,10 @@ pub const ReportBuilder = struct {
}
/// Build a report for "invalid number literal" diagnostic
fn buildUnimplementedReport(self: *Self) !Report {
const report = Report.init(self.gpa, "UNIMPLEMENTED", .runtime_error);
fn buildUnimplementedReport(self: *Self, bytes: []const u8) !Report {
var report = Report.init(self.gpa, "UNIMPLEMENTED: ", .runtime_error);
const owned_bytes = try report.addOwnedString(bytes);
try report.document.addText(owned_bytes);
return report;
}

View file

@ -729,11 +729,7 @@ pub const SnapshotWriter = struct {
pub fn writeAlias(self: *Self, alias: SnapshotAlias, root_idx: SnapshotContentIdx) Allocator.Error!void {
_ = try self.buf.writer().write(self.idents.getText(alias.ident.ident_idx));
// The 1st var is the alias type's backing var, so we skip it
var vars = self.snapshots.sliceVars(alias.vars);
std.debug.assert(vars.len > 0);
vars = vars[1..];
const vars = self.snapshots.sliceVars(alias.vars);
if (vars.len > 0) {
_ = try self.buf.writer().write("(");
for (vars, 0..) |arg, i| {

View file

@ -499,7 +499,7 @@ test "check type - nominal recursive type wrong type" {
try assertFileTypeCheckFail(test_allocator, source, "INVALID NOMINAL TAG");
}
test "check type - nominal w/ polymorphic function" {
test "check type - nominal w/ polymorphic function with bad args" {
const source =
\\module []
\\
@ -511,6 +511,20 @@ test "check type - nominal w/ polymorphic function" {
try assertFileTypeCheckFail(test_allocator, source, "INVALID NOMINAL TAG");
}
test "check type - nominal w/ polymorphic function" {
const source =
\\module []
\\
\\Pair(a, b) : (a, b)
\\
\\swapPair : Pair(a, b) -> Pair(b, a)
\\swapPair = |(x, y)| (y, x)
\\
\\test = |_| swapPair((1, "test"))
;
try assertFileTypeCheckPass(test_allocator, source, "_arg -> Pair(Str, Num(_size))");
}
// if-else
test "check type - if else" {
@ -735,7 +749,7 @@ test "check type - record access" {
const source =
\\module []
\\
\\r =
\\r =
\\ {
\\ hello: "Hello",
\\ world: 10,

View file

@ -466,13 +466,6 @@ fn Unifier(comptime StoreTypeB: type) type {
try self.unifyRigid(vars, vars.b.desc.content);
},
.alias => |a_alias| {
const backing_var = self.types_store.getAliasBackingVar(a_alias);
const backing_resolved = self.types_store.resolveVar(backing_var);
if (backing_resolved.desc.content == .err) {
// Invalid alias - treat as transparent
self.merge(vars, vars.b.desc.content);
return;
}
try self.unifyAlias(vars, a_alias, vars.b.desc.content);
},
.structure => |a_flat_type| {
@ -583,8 +576,20 @@ fn Unifier(comptime StoreTypeB: type) type {
}
},
.structure => {
try self.unifyGuarded(backing_var, vars.b.var_);
self.merge(vars, Content{ .alias = a_alias });
// When unifying an alias with a concrete structure:
// We want to preserve the alias for display while ensuring the types are compatible.
// Step 1: Unify the structure (b) with the alias's backing type
// IMPORTANT: Order matters! By putting vars.b first, if unification succeeds,
// vars.b will be redirected to point to backing_var (or their merged result).
try self.unifyGuarded(vars.b.var_, backing_var);
// Step 2: Redirect b to point to the alias wrapper (a)
// Now that we've confirmed the structure is compatible with the alias's backing type,
// we redirect b to point to the alias itself. This preserves the alias name for display
// purposes - anyone who was referencing the concrete structure will now see it through
// the alias lens, which is what we want for better error messages and type presentation.
self.types_store.setVarRedirect(vars.b.var_, vars.a.var_) catch return Error.AllocatorError;
},
.err => self.merge(vars, .err),
}
@ -643,7 +648,22 @@ fn Unifier(comptime StoreTypeB: type) type {
},
.rigid_var => return error.TypeMismatch,
.alias => |b_alias| {
try self.unifyGuarded(vars.a.var_, self.types_store.getAliasBackingVar(b_alias));
// When unifying a concrete structure with an alias:
// We want to preserve the alias for display while ensuring the types are compatible.
const backing_var = self.types_store.getAliasBackingVar(b_alias);
// Step 1: Unify the structure (a) with the alias's backing type
// IMPORTANT: Order matters! By putting vars.a first, if unification succeeds,
// vars.a will be redirected to point to backing_var (or their merged result).
try self.unifyGuarded(vars.a.var_, backing_var);
// Step 2: Redirect a to point to the alias wrapper (b)
// Now that we've confirmed the structure is compatible with the alias's backing type,
// we redirect a to point to the alias itself. This preserves the alias name for display
// purposes - anyone who was referencing the concrete structure will now see it through
// the alias lens, which is what we want for better error messages and type presentation.
self.types_store.setVarRedirect(vars.a.var_, vars.b.var_) catch return Error.AllocatorError;
},
.structure => |b_flat_type| {
try self.unifyFlatType(vars, a_flat_type, b_flat_type);

View file

@ -83,10 +83,16 @@ pub fn deinit(self: *TypeWriter) void {
self.flex_var_names.deinit();
}
/// Writes the current var into the the writers buffer and returns a bytes slice
pub fn writeGet(self: *TypeWriter, var_: Var) std.mem.Allocator.Error![]const u8 {
try self.write(var_);
return self.get();
}
/// Returns the current contents of the type writer's buffer as a slice.
/// This contains the formatted type representation built up by write operations.
pub fn get(self: *const TypeWriter) []u8 {
return self.buf.items[0..];
pub fn get(self: *const TypeWriter) []const u8 {
return self.buf.items;
}
/// Writes a type variable to the buffer, formatting it as a human-readable string.

View file

@ -143,8 +143,7 @@ pub const Instantiator = struct {
.rigid_var => unreachable,
.alias => |alias| {
// Instantiate the structure recursively
const fresh_alias = try self.instantiateAlias(alias);
return Content{ .alias = fresh_alias };
return try self.instantiateAlias(alias);
},
.structure => |flat_type| blk: {
// Instantiate the structure recursively
@ -155,25 +154,20 @@ pub const Instantiator = struct {
};
}
fn instantiateAlias(self: *Self, alias: Alias) std.mem.Allocator.Error!Alias {
fn instantiateAlias(self: *Self, alias: Alias) std.mem.Allocator.Error!Content {
var fresh_vars = std.ArrayList(Var).init(self.store.gpa);
defer fresh_vars.deinit();
const backing_var = self.store.getAliasBackingVar(alias);
const fresh_backing_var = try self.instantiateVar(backing_var);
try fresh_vars.append(fresh_backing_var);
var iter = self.store.iterAliasArgs(alias);
while (iter.next()) |arg_var| {
const fresh_elem = try self.instantiateVar(arg_var);
try fresh_vars.append(fresh_elem);
}
const fresh_vars_range = try self.store.appendVars(fresh_vars.items);
return Alias{
.ident = alias.ident,
.vars = .{ .nonempty = fresh_vars_range },
};
const backing_var = self.store.getAliasBackingVar(alias);
const fresh_backing_var = try self.instantiateVar(backing_var);
return self.store.mkAlias(alias.ident, fresh_backing_var, fresh_vars.items);
}
fn instantiateFlatType(self: *Self, flat_type: FlatType) std.mem.Allocator.Error!FlatType {
@ -197,12 +191,11 @@ pub const Instantiator = struct {
}
fn instantiateNominalType(self: *Self, nominal: NominalType) std.mem.Allocator.Error!NominalType {
var fresh_vars = std.ArrayList(Var).init(self.store.gpa);
defer fresh_vars.deinit();
const backing_var = self.store.getNominalBackingVar(nominal);
const fresh_backing_var = try self.instantiateVar(backing_var);
try fresh_vars.append(fresh_backing_var);
var fresh_vars = std.ArrayList(Var).init(self.store.gpa);
defer fresh_vars.deinit();
var iter = self.store.iterNominalArgs(nominal);
while (iter.next()) |arg_var| {
@ -210,12 +203,7 @@ pub const Instantiator = struct {
try fresh_vars.append(fresh_elem);
}
const fresh_vars_range = try self.store.appendVars(fresh_vars.items);
return NominalType{
.ident = nominal.ident,
.vars = .{ .nonempty = fresh_vars_range },
.origin_module = nominal.origin_module,
};
return (try self.store.mkNominal(nominal.ident, fresh_backing_var, fresh_vars.items, nominal.origin_module)).structure.nominal_type;
}
fn instantiateTuple(self: *Self, tuple: Tuple) std.mem.Allocator.Error!Tuple {

View file

@ -657,6 +657,11 @@ pub const Store = struct {
/// * update b to to the new desc value
/// * redirect a -> b
///
/// CRITICAL: The merge direction (a -> b) is load-bearing and must not be changed!
/// Multiple parts of the unification algorithm depend on this specific order:
/// - When unifying aliases with structures, we rely on this order to ensure
/// that we don't loose alias context
///
// NOTE: The elm & the roc compiler this step differently
// * The elm compiler sets b to redirect to a
// * The roc compiler sets a to redirect to b

View file

@ -331,10 +331,10 @@ NO CHANGE
~~~clojure
(inferred-types
(defs
(patt @6.1-6.8 (type "Pair(U64)"))
(patt @6.1-6.8 (type "Pair(Num(Int(Unsigned64)))"))
(patt @9.1-9.8 (type "Pair(Str)"))
(patt @12.1-12.7 (type "a, a -> Pair(a)"))
(patt @15.1-15.20 (type "Pair(U8)"))
(patt @15.1-15.20 (type "Pair(Num(Int(Unsigned8)))"))
(patt @18.1-18.18 (type "Error"))
(patt @21.1-21.19 (type "Error"))
(patt @24.1-24.14 (type "a, b -> Error")))
@ -351,10 +351,10 @@ NO CHANGE
(ty-args
(ty-rigid-var @3.6-3.7 (name "a"))))))
(expressions
(expr @6.11-6.26 (type "Pair(U64)"))
(expr @6.11-6.26 (type "Pair(Num(Int(Unsigned64)))"))
(expr @9.11-9.38 (type "Pair(Str)"))
(expr @12.10-12.32 (type "a, a -> Pair(a)"))
(expr @15.23-15.35 (type "Pair(U8)"))
(expr @15.23-15.35 (type "Pair(Num(Int(Unsigned8)))"))
(expr @18.21-18.35 (type "Error"))
(expr @21.22-21.41 (type "Error"))
(expr @24.17-24.39 (type "a, b -> Error"))))

View file

@ -34,16 +34,10 @@ NO CHANGE
# CANONICALIZE
~~~clojure
(e-call @1.1-1.15
(e-lambda @1.2-1.8
(args
(p-assign @1.3-1.4 (ident "x")))
(e-unary-not @1.6-1.8
(e-lookup-local @1.7-1.8
(p-assign @1.3-1.4 (ident "x")))))
(e-nominal @1.10-1.14 (nominal "Bool")
(e-tag @1.10-1.14 (name "True"))))
~~~
# TYPES
~~~clojure
(expr @1.1-1.15 (type "Bool"))
(expr @1.1-1.15 (type "Error"))
~~~

View file

@ -196,11 +196,11 @@ main! = |_| {
(annotation @7.1-7.8
(declared-type
(ty-fn @6.11-6.25 (effectful false)
(ty-var @6.11-6.12 (name "a"))
(ty-var @6.14-6.15 (name "b"))
(ty-rigid-var @6.11-6.12 (name "a"))
(ty-rigid-var @6.14-6.15 (name "b"))
(ty-tuple @6.19-6.25
(ty-var @6.20-6.21 (name "a"))
(ty-var @6.23-6.24 (name "b")))))))
(ty-rigid-var @6.11-6.12 (name "a"))
(ty-rigid-var @6.14-6.15 (name "b")))))))
(d-let
(p-assign @11.1-11.7 (ident "addOne"))
(e-lambda @11.10-11.19
@ -209,19 +209,19 @@ main! = |_| {
(e-binop @11.14-11.19 (op "add")
(e-lookup-local @11.14-11.15
(p-assign @11.11-11.12 (ident "n")))
(e-int @11.18-11.19 (value "1"))))
(e-num @11.18-11.19 (value "1"))))
(annotation @11.1-11.7
(declared-type
(ty-fn @10.10-10.20 (effectful false)
(ty @10.10-10.13 (name "U64"))
(ty @10.17-10.20 (name "U64"))))))
(ty-lookup @10.10-10.13 (name "U64") (builtin))
(ty-lookup @10.17-10.20 (name "U64") (builtin))))))
(d-let
(p-assign @13.1-13.6 (ident "main!"))
(e-closure @13.9-25.2
(captures
(capture @11.1-11.7 (ident "addOne"))
(capture @7.1-7.8 (ident "combine"))
(capture @3.1-3.9 (ident "identity"))
(capture @7.1-7.8 (ident "combine")))
(capture @11.1-11.7 (ident "addOne")))
(e-lambda @13.9-25.2
(args
(p-underscore @13.10-13.11))
@ -229,21 +229,15 @@ main! = |_| {
(s-let @15.5-15.23
(p-assign @15.5-15.8 (ident "num"))
(e-call @15.11-15.23
(e-lookup-local @15.11-15.19
(p-assign @3.1-3.9 (ident "identity")))
(e-int @15.20-15.22 (value "42"))))
(e-num @15.20-15.22 (value "42"))))
(s-let @16.5-16.29
(p-assign @16.5-16.9 (ident "text"))
(e-call @16.12-16.29
(e-lookup-local @16.12-16.20
(p-assign @3.1-3.9 (ident "identity")))
(e-string @16.21-16.28
(e-literal @16.22-16.27 (string "hello")))))
(s-let @19.5-19.30
(p-assign @19.5-19.9 (ident "pair"))
(e-call @19.12-19.30
(e-lookup-local @19.12-19.19
(p-assign @7.1-7.8 (ident "combine")))
(e-lookup-local @19.20-19.23
(p-assign @15.5-15.8 (ident "num")))
(e-lookup-local @19.25-19.29
@ -251,23 +245,42 @@ main! = |_| {
(s-let @22.5-22.23
(p-assign @22.5-22.11 (ident "result"))
(e-call @22.14-22.23
(e-lookup-local @22.14-22.20
(p-assign @11.1-11.7 (ident "addOne")))
(e-int @22.21-22.22 (value "5"))))
(e-num @22.21-22.22 (value "5"))))
(e-lookup-local @24.5-24.11
(p-assign @22.5-22.11 (ident "result"))))))))
(p-assign @22.5-22.11 (ident "result")))))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt @3.1-3.9 (type "_arg -> _ret"))
(patt @3.1-3.9 (type "c -> c"))
(patt @7.1-7.8 (type "a, b -> (a, b)"))
(patt @11.1-11.7 (type "U64 -> U64"))
(patt @13.1-13.6 (type "_arg -> U64")))
(patt @11.1-11.7 (type "Num(Int(Unsigned64)) -> Num(Int(Unsigned64))"))
(patt @13.1-13.6 (type "_arg -> Num(Int(Unsigned64))")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @3.12-3.17 (type "_arg -> _ret"))
(expr @3.12-3.17 (type "c -> c"))
(expr @7.11-7.42 (type "a, b -> (a, b)"))
(expr @11.10-11.19 (type "U64 -> U64"))
(expr @13.9-25.2 (type "_arg -> U64"))))
(expr @11.10-11.19 (type "Num(Int(Unsigned64)) -> Num(Int(Unsigned64))"))
(expr @13.9-25.2 (type "_arg -> Num(Int(Unsigned64))"))))
~~~

View file

@ -118,10 +118,10 @@ outerFunc = |_| {
(can-ir
(d-let
(p-assign @4.1-4.2 (ident "x"))
(e-int @4.5-4.6 (value "5")))
(e-num @4.5-4.6 (value "5")))
(d-let
(p-assign @5.1-5.2 (ident "y"))
(e-int @5.5-5.7 (value "10")))
(e-num @5.5-5.7 (value "10")))
(d-let
(p-assign @8.1-8.10 (ident "outerFunc"))
(e-closure @8.13-16.2
@ -133,7 +133,7 @@ outerFunc = |_| {
(e-block @8.17-16.2
(s-let @9.5-9.11
(p-assign @9.5-9.6 (ident "x"))
(e-int @9.9-9.11 (value "20")))
(e-num @9.9-9.11 (value "20")))
(s-let @10.5-14.6
(p-assign @10.5-10.16 (ident "innerResult"))
(e-block @10.19-14.6
@ -147,9 +147,22 @@ outerFunc = |_| {
(e-binop @13.9-13.14 (op "add")
(e-lookup-local @13.9-13.10
(p-assign @12.9-12.10 (ident "z")))
(e-int @13.13-13.14 (value "1")))))
(e-num @13.13-13.14 (value "1")))))
(e-lookup-local @15.5-15.16
(p-assign @10.5-10.16 (ident "innerResult"))))))))
(p-assign @10.5-10.16 (ident "innerResult")))))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
@ -158,6 +171,14 @@ outerFunc = |_| {
(patt @4.1-4.2 (type "Num(_size)"))
(patt @5.1-5.2 (type "Num(_size)"))
(patt @8.1-8.10 (type "_arg -> Num(_size)")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @4.5-4.6 (type "Num(_size)"))
(expr @5.5-5.7 (type "Num(_size)"))

View file

@ -63,9 +63,9 @@ EndOfFile(6:1-6:1),
(p-assign @2.5-2.9 (ident "list"))
(e-list @2.12-2.21
(elems
(e-int @2.13-2.14 (value "1"))
(e-int @2.16-2.17 (value "2"))
(e-int @2.19-2.20 (value "3")))))
(e-num @2.13-2.14 (value "1"))
(e-num @2.16-2.17 (value "2"))
(e-num @2.19-2.20 (value "3")))))
(s-let @3.5-3.19
(p-assign @3.5-3.7 (ident "fn"))
(e-lambda @3.10-3.19
@ -74,7 +74,7 @@ EndOfFile(6:1-6:1),
(e-binop @3.14-3.19 (op "add")
(e-lookup-local @3.14-3.15
(p-assign @3.11-3.12 (ident "x")))
(e-int @3.18-3.19 (value "1")))))
(e-num @3.18-3.19 (value "1")))))
(e-dot-access @4.5-4.17 (field "map")
(receiver
(e-lookup-local @4.5-4.9

View file

@ -54,17 +54,38 @@ NO CHANGE
(e-frac-f64 @4.5-4.12 (value "1.23e45")))
(d-let
(p-assign @5.1-5.2 (ident "z"))
(e-dec-small @5.5-5.8 (numerator "5") (denominator-power-of-ten "1") (value "0.5"))))
(e-dec-small @5.5-5.8 (numerator "5") (denominator-power-of-ten "1") (value "0.5")))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt @3.1-3.2 (type "Frac(_size)"))
(patt @4.1-4.2 (type "Frac(_size)"))
(patt @5.1-5.2 (type "Frac(_size)")))
(patt @3.1-3.2 (type "Num(Frac(_size))"))
(patt @4.1-4.2 (type "Num(Frac(_size))"))
(patt @5.1-5.2 (type "Num(Frac(_size))")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @3.5-3.9 (type "Frac(_size)"))
(expr @4.5-4.12 (type "Frac(_size)"))
(expr @5.5-5.8 (type "Frac(_size)"))))
(expr @3.5-3.9 (type "Num(Frac(_size))"))
(expr @4.5-4.12 (type "Num(Frac(_size))"))
(expr @5.5-5.8 (type "Num(Frac(_size))"))))
~~~

View file

@ -38,13 +38,34 @@ NO CHANGE
(can-ir
(d-let
(p-assign @3.1-3.2 (ident "x"))
(e-int @3.5-3.9 (value "255"))))
(e-int @3.5-3.9 (value "255") (suffix "none")))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt @3.1-3.2 (type "Int(_size)")))
(patt @3.1-3.2 (type "Num(Int(_size))")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @3.5-3.9 (type "Int(_size)"))))
(expr @3.5-3.9 (type "Num(Int(_size))"))))
~~~

View file

@ -55,6 +55,19 @@ NO CHANGE
(e-lookup-external @5.8-5.17
(module-idx "0")
(target-node-idx "0")))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err"))))
(s-import @3.1-3.17 (module "json.Json") (qualifier "json")
(exposes)))
~~~
@ -63,6 +76,14 @@ NO CHANGE
(inferred-types
(defs
(patt @5.1-5.5 (type "Error")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @5.8-5.17 (type "Error"))))
~~~

View file

@ -540,14 +540,13 @@ validateAuth = |creds| HttpAuth.validate(creds)
(args
(p-assign @9.16-9.24 (ident "settings")))
(e-call @9.26-9.51
(e-runtime-error (tag "ident_not_in_scope"))
(e-lookup-local @9.42-9.50
(p-assign @9.16-9.24 (ident "settings")))))
(annotation @9.1-9.12
(declared-type
(ty-fn @8.15-8.37 (effectful false)
(ty-malformed @8.15-8.30)
(ty @8.34-8.37 (name "Str"))))))
(ty-lookup @8.34-8.37 (name "Str") (builtin))))))
(d-let
(p-assign @13.1-13.13 (ident "authenticate"))
(e-lambda @13.16-13.55
@ -555,7 +554,6 @@ validateAuth = |creds| HttpAuth.validate(creds)
(p-assign @13.17-13.21 (ident "user"))
(p-assign @13.23-13.27 (ident "pass")))
(e-call @13.29-13.55
(e-runtime-error (tag "ident_not_in_scope"))
(e-lookup-local @13.44-13.48
(p-assign @13.17-13.21 (ident "user")))
(e-lookup-local @13.50-13.54
@ -563,8 +561,8 @@ validateAuth = |creds| HttpAuth.validate(creds)
(annotation @13.1-13.13
(declared-type
(ty-fn @12.16-12.42 (effectful false)
(ty @12.16-12.19 (name "Str"))
(ty @12.21-12.24 (name "Str"))
(ty-lookup @12.16-12.19 (name "Str") (builtin))
(ty-lookup @12.21-12.24 (name "Str") (builtin))
(ty-malformed @12.28-12.42)))))
(d-let
(p-assign @17.1-17.12 (ident "processData"))
@ -573,7 +571,6 @@ validateAuth = |creds| HttpAuth.validate(creds)
(p-assign @17.16-17.30 (ident "advancedConfig"))
(p-assign @17.32-17.37 (ident "input")))
(e-call @18.5-18.60
(e-runtime-error (tag "ident_not_in_scope"))
(e-lookup-local @18.38-18.52
(p-assign @17.16-17.30 (ident "advancedConfig")))
(e-lookup-local @18.54-18.59
@ -582,41 +579,52 @@ validateAuth = |creds| HttpAuth.validate(creds)
(declared-type
(ty-fn @16.15-16.78 (effectful false)
(ty-malformed @16.15-16.37)
(ty @16.39-16.42 (name "Str"))
(ty-apply @16.46-16.78 (symbol "Result")
(ty @16.53-16.56 (name "Str"))
(ty-malformed @16.58-16.77))))))
(ty-lookup @16.39-16.42 (name "Str") (builtin))
(ty-apply @16.46-16.78 (name "Result") (local)
(ty-lookup @16.46-16.78 (name "Str") (builtin))
(ty-malformed @16.46-16.78))))))
(d-let
(p-assign @22.1-22.13 (ident "formatOutput"))
(e-lambda @22.16-22.59
(args
(p-assign @22.17-22.21 (ident "text")))
(e-call @22.23-22.59
(e-runtime-error (tag "ident_not_in_scope"))
(e-lookup-local @22.31-22.35
(p-assign @22.17-22.21 (ident "text")))
(e-runtime-error (tag "ident_not_in_scope"))))
(annotation @22.1-22.13
(declared-type
(ty-fn @21.16-21.26 (effectful false)
(ty @21.16-21.19 (name "Str"))
(ty @21.23-21.26 (name "Str"))))))
(ty-lookup @21.16-21.19 (name "Str") (builtin))
(ty-lookup @21.23-21.26 (name "Str") (builtin))))))
(d-let
(p-assign @26.1-26.13 (ident "validateAuth"))
(e-lambda @26.16-26.48
(args
(p-assign @26.17-26.22 (ident "creds")))
(e-call @26.24-26.48
(e-runtime-error (tag "ident_not_in_scope"))
(e-lookup-local @26.42-26.47
(p-assign @26.17-26.22 (ident "creds")))))
(annotation @26.1-26.13
(declared-type
(ty-fn @25.16-25.78 (effectful false)
(ty-malformed @25.16-25.36)
(ty-apply @25.40-25.78 (symbol "Result")
(ty-malformed @25.47-25.61)
(ty-malformed @25.63-25.77))))))
(ty-apply @25.40-25.78 (name "Result") (local)
(ty-malformed @25.40-25.78)
(ty-malformed @25.40-25.78))))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err"))))
(s-import @3.1-3.19 (module "json.Parser") (qualifier "json")
(exposes))
(s-import @4.1-4.19 (module "http.Client") (qualifier "http")
@ -631,6 +639,14 @@ validateAuth = |creds| HttpAuth.validate(creds)
(patt @17.1-17.12 (type "Error, Str -> Result(Str, Error)"))
(patt @22.1-22.13 (type "Str -> Str"))
(patt @26.1-26.13 (type "Error -> Result(Error, Error)")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @9.15-9.51 (type "Error -> Str"))
(expr @13.16-13.55 (type "Str, Str -> Error"))

View file

@ -434,26 +434,21 @@ combineResults = |result1, result2|
(annotation @8.1-8.15
(declared-type
(ty-fn @7.18-7.37 (effectful false)
(ty @7.18-7.25 (name "Request"))
(ty @7.29-7.37 (name "Response"))))))
(ty-malformed @7.18-7.25)
(ty-malformed @7.29-7.37)))))
(d-let
(p-assign @11.1-11.10 (ident "parseJson"))
(e-lambda @11.13-11.38
(args
(p-assign @11.14-11.19 (ident "input")))
(e-call @11.21-11.38
(e-lookup-external @11.21-11.31
(module-idx "1")
(target-node-idx "0"))
(e-lookup-local @11.32-11.37
(p-assign @11.14-11.19 (ident "input")))))
(annotation @11.1-11.10
(declared-type
(ty-fn @10.13-10.30 (effectful false)
(ty @10.13-10.16 (name "Str"))
(ty-lookup-external @10.20-10.30
(module-idx "1")
(target-node-idx "0"))))))
(ty-lookup @10.13-10.16 (name "Str") (builtin))
(ty-lookup @10.20-10.30 (name "Value") (external (module-idx "1") (target-node-idx "0")))))))
(d-let
(p-assign @14.1-14.10 (ident "handleApi"))
(e-closure @14.13-20.2
@ -467,9 +462,6 @@ combineResults = |result1, result2|
(s-let @15.5-15.39
(p-assign @15.5-15.11 (ident "result"))
(e-call @15.14-15.39
(e-lookup-external @15.14-15.25
(module-idx "1")
(target-node-idx "0"))
(e-dot-access @15.26-15.38 (field "body")
(receiver
(e-lookup-local @15.26-15.33
@ -490,9 +482,6 @@ combineResults = |result1, result2|
(e-tag @17.21-17.43 (name "Ok")
(args
(e-call @17.24-17.42
(e-lookup-external @17.24-17.36
(module-idx "0")
(target-node-idx "0"))
(e-lookup-local @17.37-17.41
(p-assign @17.12-17.16 (ident "data")))))))))
(branch
@ -509,16 +498,10 @@ combineResults = |result1, result2|
(annotation @14.1-14.10
(declared-type
(ty-fn @13.13-13.62 (effectful false)
(ty-lookup-external @13.13-13.25
(module-idx "0")
(target-node-idx "0"))
(ty-apply @13.29-13.62 (symbol "Result")
(ty-lookup-external @13.36-13.49
(module-idx "0")
(target-node-idx "0"))
(ty-lookup-external @13.51-13.61
(module-idx "1")
(target-node-idx "0")))))))
(ty-lookup @13.13-13.25 (name "Request") (external (module-idx "0") (target-node-idx "0")))
(ty-apply @13.29-13.62 (name "Result") (local)
(ty-lookup @13.29-13.62 (name "Response") (external (module-idx "0") (target-node-idx "0")))
(ty-lookup @13.29-13.62 (name "Error") (external (module-idx "1") (target-node-idx "0"))))))))
(d-let
(p-assign @23.1-23.7 (ident "config"))
(e-lookup-external @23.10-23.28
@ -526,9 +509,7 @@ combineResults = |result1, result2|
(target-node-idx "0"))
(annotation @23.1-23.7
(declared-type
(ty-lookup-external @22.10-22.21
(module-idx "1")
(target-node-idx "0")))))
(ty-lookup @22.10-22.21 (name "Config") (external (module-idx "1") (target-node-idx "0"))))))
(d-let
(p-assign @27.1-27.15 (ident "advancedParser"))
(e-lambda @27.18-27.82
@ -536,9 +517,6 @@ combineResults = |result1, result2|
(p-assign @27.19-27.31 (ident "parserConfig"))
(p-assign @27.33-27.38 (ident "input")))
(e-call @27.40-27.82
(e-lookup-external @27.40-27.61
(module-idx "1")
(target-node-idx "0"))
(e-lookup-local @27.62-27.74
(p-assign @27.19-27.31 (ident "parserConfig")))
(e-lookup-local @27.76-27.81
@ -547,20 +525,18 @@ combineResults = |result1, result2|
(declared-type
(ty-fn @26.18-26.82 (effectful false)
(ty-malformed @26.18-26.36)
(ty @26.38-26.41 (name "Str"))
(ty-apply @26.45-26.82 (symbol "Result")
(ty-lookup-external @26.52-26.62
(module-idx "1")
(target-node-idx "0"))
(ty-malformed @26.64-26.81))))))
(ty-lookup @26.38-26.41 (name "Str") (builtin))
(ty-apply @26.45-26.82 (name "Result") (local)
(ty-lookup @26.45-26.82 (name "Value") (external (module-idx "1") (target-node-idx "0")))
(ty-malformed @26.45-26.82))))))
(d-let
(p-assign @31.1-31.15 (ident "combineResults"))
(e-closure @31.18-39.6
(captures
(capture @38.13-38.16 (ident "err"))
(capture @36.21-36.24 (ident "err"))
(capture @33.12-33.18 (ident "value1"))
(capture @35.20-35.26 (ident "value2")))
(capture @35.20-35.26 (ident "value2"))
(capture @38.13-38.16 (ident "err"))
(capture @33.12-33.18 (ident "value1")))
(e-lambda @31.18-39.6
(args
(p-assign @31.19-31.26 (ident "result1"))
@ -623,17 +599,30 @@ combineResults = |result1, result2|
(annotation @31.1-31.15
(declared-type
(ty-fn @30.18-30.71 (effectful false)
(ty-apply @30.18-30.32 (symbol "Result")
(ty-var @30.25-30.26 (name "a"))
(ty-var @30.28-30.31 (name "err")))
(ty-apply @30.34-30.48 (symbol "Result")
(ty-var @30.41-30.42 (name "b"))
(ty-var @30.44-30.47 (name "err")))
(ty-apply @30.52-30.71 (symbol "Result")
(ty-tuple @30.59-30.65
(ty-var @30.60-30.61 (name "a"))
(ty-var @30.63-30.64 (name "b")))
(ty-var @30.67-30.70 (name "err")))))))
(ty-apply @30.18-30.32 (name "Result") (local)
(ty-rigid-var @30.18-30.32 (name "a"))
(ty-rigid-var @30.18-30.32 (name "err")))
(ty-apply @30.34-30.48 (name "Result") (local)
(ty-rigid-var @30.34-30.48 (name "b"))
(ty-rigid-var @30.18-30.32 (name "err")))
(ty-apply @30.52-30.71 (name "Result") (local)
(ty-tuple @30.52-30.71
(ty-rigid-var @30.18-30.32 (name "a"))
(ty-rigid-var @30.34-30.48 (name "b")))
(ty-rigid-var @30.18-30.32 (name "err")))))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err"))))
(s-import @3.1-3.56 (module "http.Client") (qualifier "http") (alias "Http")
(exposes
(exposed (name "Request") (wildcard false))
@ -654,6 +643,14 @@ combineResults = |result1, result2|
(patt @23.1-23.7 (type "Error"))
(patt @27.1-27.15 (type "Error, Str -> Result(Error, Error)"))
(patt @31.1-31.15 (type "Result(a, err), Result(b, err) -> Result((a, b), err)")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @8.18-8.44 (type "Error -> Error"))
(expr @11.13-11.38 (type "Str -> Error"))

View file

@ -205,18 +205,13 @@ NO CHANGE
(args
(p-assign @11.14-11.18 (ident "data")))
(e-call @11.20-11.40
(e-lookup-external @11.20-11.34
(module-idx "0")
(target-node-idx "0"))
(e-lookup-local @11.35-11.39
(p-assign @11.14-11.18 (ident "data")))))
(annotation @11.1-11.10
(declared-type
(ty-fn @10.13-10.36 (effectful false)
(ty-lookup-external @10.13-10.29
(module-idx "0")
(target-node-idx "0"))
(ty @10.33-10.36 (name "Str"))))))
(ty-lookup @10.13-10.29 (name "InvalidType") (external (module-idx "0") (target-node-idx "0")))
(ty-lookup @10.33-10.36 (name "Str") (builtin))))))
(d-let
(p-assign @15.1-15.15 (ident "processRequest"))
(e-lambda @15.18-15.51
@ -233,9 +228,6 @@ NO CHANGE
(d-let
(p-assign @18.1-18.7 (ident "result"))
(e-call @18.10-18.28
(e-lookup-external @18.10-18.20
(module-idx "0")
(target-node-idx "0"))
(e-string @18.21-18.27
(e-literal @18.22-18.26 (string "test")))))
(d-let
@ -252,6 +244,19 @@ NO CHANGE
(e-lookup-external @27.10-27.49
(module-idx "0")
(target-node-idx "0")))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err"))))
(s-import @3.1-3.17 (module "json.Json") (qualifier "json")
(exposes))
(s-import @4.1-4.27 (module "http.Client") (qualifier "http") (alias "Http")
@ -268,6 +273,14 @@ NO CHANGE
(patt @21.1-21.7 (type "_a"))
(patt @24.1-24.7 (type "Error"))
(patt @27.1-27.7 (type "Error")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @7.8-7.31 (type "Error"))
(expr @11.13-11.40 (type "Error -> Str"))

View file

@ -50,7 +50,7 @@ NO CHANGE
~~~clojure
(e-list @1.1-1.20
(elems
(e-int @1.2-1.4 (value "42"))
(e-num @1.2-1.4 (value "42"))
(e-string @1.6-1.13
(e-literal @1.7-1.12 (string "world")))
(e-dec-small @1.15-1.19 (numerator "314") (denominator-power-of-ten "2") (value "3.14"))))

View file

@ -73,12 +73,12 @@ NO CHANGE
~~~clojure
(e-list @1.1-1.27
(elems
(e-int @1.2-1.3 (value "1"))
(e-num @1.2-1.3 (value "1"))
(e-string @1.5-1.12
(e-literal @1.6-1.11 (string "hello")))
(e-list @1.14-1.26
(elems
(e-int @1.15-1.16 (value "3"))
(e-num @1.15-1.16 (value "3"))
(e-string @1.18-1.25
(e-literal @1.19-1.24 (string "world")))))))
~~~

View file

@ -64,10 +64,10 @@ EndOfFile(6:1-6:1),
~~~clojure
(e-list @1.1-5.2
(elems
(e-int @2.5-2.7 (value "42"))
(e-num @2.5-2.7 (value "42"))
(e-string @3.5-3.18
(e-literal @3.6-3.17 (string "hello world")))
(e-int @4.5-4.8 (value "100"))))
(e-num @4.5-4.8 (value "100"))))
~~~
# TYPES
~~~clojure

View file

@ -55,7 +55,7 @@ NO CHANGE
(e-empty_list @1.2-1.4)
(e-list @1.6-1.9
(elems
(e-int @1.7-1.8 (value "1"))))
(e-num @1.7-1.8 (value "1"))))
(e-list @1.11-1.20
(elems
(e-string @1.12-1.19

View file

@ -62,7 +62,7 @@ NO CHANGE
(e-empty_list @1.7-1.9)
(e-list @1.11-1.14
(elems
(e-int @1.12-1.13 (value "1"))))))
(e-num @1.12-1.13 (value "1"))))))
(e-list @1.17-1.32
(elems
(e-empty_list @1.18-1.20)

View file

@ -49,7 +49,7 @@ NO CHANGE
~~~clojure
(e-list @1.1-1.13
(elems
(e-int @1.2-1.3 (value "1"))
(e-num @1.2-1.3 (value "1"))
(e-string @1.5-1.12
(e-literal @1.6-1.11 (string "hello")))))
~~~

View file

@ -55,13 +55,13 @@ NO CHANGE
(elems
(e-list @1.2-1.14
(elems
(e-int @1.3-1.4 (value "1"))
(e-num @1.3-1.4 (value "1"))
(e-string @1.6-1.13
(e-literal @1.7-1.12 (string "hello")))))
(e-list @1.16-1.22
(elems
(e-int @1.17-1.18 (value "2"))
(e-int @1.20-1.21 (value "3"))))))
(e-num @1.17-1.18 (value "2"))
(e-num @1.20-1.21 (value "3"))))))
~~~
# TYPES
~~~clojure

View file

@ -52,13 +52,26 @@ NO CHANGE
(can-ir
(d-let
(p-assign @3.1-3.2 (ident "a"))
(e-int @3.5-3.6 (value "5")))
(e-num @3.5-3.6 (value "5")))
(d-let
(p-assign @4.1-4.2 (ident "b"))
(e-binop @4.5-4.10 (op "add")
(e-lookup-local @4.5-4.6
(p-assign @3.1-3.2 (ident "a")))
(e-int @4.9-4.10 (value "1")))))
(e-num @4.9-4.10 (value "1"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
@ -66,6 +79,14 @@ NO CHANGE
(defs
(patt @3.1-3.2 (type "Num(_size)"))
(patt @4.1-4.2 (type "Num(_size)")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @3.5-3.6 (type "Num(_size)"))
(expr @4.5-4.10 (type "Num(_size)"))))

View file

@ -53,13 +53,34 @@ topLevelVar_ = 0
(can-ir
(d-let
(p-assign @4.5-4.17 (ident "topLevelVar_"))
(e-int @4.20-4.21 (value "0"))))
(e-num @4.20-4.21 (value "0")))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt @4.5-4.17 (type "Num(_size)")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @4.20-4.21 (type "Num(_size)"))))
~~~

View file

@ -139,22 +139,22 @@ NO CHANGE
(e-block @4.24-21.2
(s-var @5.2-5.16
(p-assign @5.2-5.16 (ident "count_"))
(e-int @5.15-5.16 (value "0")))
(e-num @5.15-5.16 (value "0")))
(s-var @6.2-6.16
(p-assign @6.2-6.16 (ident "total_"))
(e-int @6.15-6.16 (value "0")))
(e-num @6.15-6.16 (value "0")))
(s-reassign @9.2-9.8
(p-assign @5.2-5.16 (ident "count_"))
(e-binop @9.11-9.21 (op "add")
(e-lookup-local @9.11-9.17
(p-assign @5.2-5.16 (ident "count_")))
(e-int @9.20-9.21 (value "1"))))
(e-num @9.20-9.21 (value "1"))))
(s-reassign @10.2-10.8
(p-assign @6.2-6.16 (ident "total_"))
(e-binop @10.11-10.22 (op "add")
(e-lookup-local @10.11-10.17
(p-assign @6.2-6.16 (ident "total_")))
(e-int @10.20-10.22 (value "10"))))
(e-num @10.20-10.22 (value "10"))))
(s-let @13.2-17.3
(p-assign @13.2-13.12 (ident "nestedFunc"))
(e-closure @13.15-17.3
@ -175,20 +175,39 @@ NO CHANGE
(s-let @19.2-19.25
(p-assign @19.2-19.8 (ident "result"))
(e-call @19.11-19.25
(e-lookup-local @19.11-19.21
(p-assign @13.2-13.12 (ident "nestedFunc")))
(e-empty_record @19.22-19.24)))
(e-binop @20.2-20.17 (op "add")
(e-lookup-local @20.2-20.8
(p-assign @6.2-6.16 (ident "total_")))
(e-lookup-local @20.11-20.17
(p-assign @19.2-19.8 (ident "result"))))))))
(p-assign @19.2-19.8 (ident "result")))))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt @4.1-4.13 (type "_arg -> Num(_size)")))
(patt @4.1-4.13 (type "_arg -> Error")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @4.16-21.2 (type "_arg -> Num(_size)"))))
(expr @4.16-21.2 (type "_arg -> Error"))))
~~~

View file

@ -92,29 +92,48 @@ NO CHANGE
(e-block @4.21-9.2
(s-var @5.2-5.12
(p-assign @5.2-5.12 (ident "x_"))
(e-int @5.11-5.12 (value "5")))
(e-num @5.11-5.12 (value "5")))
(s-var @6.2-6.13
(p-assign @6.2-6.13 (ident "x_"))
(e-int @6.11-6.13 (value "10")))
(e-num @6.11-6.13 (value "10")))
(s-reassign @7.2-7.4
(p-assign @6.2-6.13 (ident "x_"))
(e-int @7.7-7.9 (value "15")))
(e-num @7.7-7.9 (value "15")))
(e-lookup-local @8.2-8.4
(p-assign @6.2-6.13 (ident "x_"))))))
(d-let
(p-assign @11.1-11.7 (ident "result"))
(e-call @11.10-11.27
(e-lookup-local @11.10-11.23
(p-assign @4.1-4.14 (ident "redeclareTest")))
(e-empty_record @11.24-11.26))))
(e-empty_record @11.24-11.26)))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt @4.1-4.14 (type "_arg -> Num(_size)"))
(patt @11.1-11.7 (type "Num(_size)")))
(patt @4.1-4.14 (type "_arg -> Error"))
(patt @11.1-11.7 (type "Error")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @4.17-9.2 (type "_arg -> Num(_size)"))
(expr @11.10-11.27 (type "Num(_size)"))))
(expr @4.17-9.2 (type "_arg -> Error"))
(expr @11.10-11.27 (type "Error"))))
~~~

View file

@ -49,13 +49,34 @@ NO CHANGE
(e-literal @4.8-4.11 (string "one")))
(annotation @4.1-4.4
(declared-type
(ty @3.7-3.10 (name "Str"))))))
(ty-lookup @3.7-3.10 (name "Str") (builtin)))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt @4.1-4.4 (type "Str")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @4.7-4.12 (type "Str"))))
~~~

View file

@ -35,14 +35,7 @@ NO CHANGE
# CANONICALIZE
~~~clojure
(e-call @1.1-1.15
(e-lambda @1.2-1.11
(args
(p-assign @1.3-1.4 (ident "x")))
(e-binop @1.6-1.11 (op "add")
(e-lookup-local @1.6-1.7
(p-assign @1.3-1.4 (ident "x")))
(e-int @1.10-1.11 (value "1"))))
(e-int @1.13-1.14 (value "5")))
(e-num @1.13-1.14 (value "5")))
~~~
# TYPES
~~~clojure

View file

@ -62,61 +62,24 @@ EndOfFile(2:1-2:1),
# CANONICALIZE
~~~clojure
(e-call @1.1-1.89
(e-lambda @1.2-1.50
(args
(p-record-destructure @1.3-1.31
(destructs
(record-destruct @1.5-1.6 (label "a") (ident "a")
(required
(p-assign @1.5-1.6 (ident "a"))))
(record-destruct @1.8-1.17 (label "x") (ident "x")
(sub-pattern
(p-tuple @1.11-1.17
(patterns
(p-assign @1.12-1.13 (ident "b"))
(p-assign @1.15-1.16 (ident "c"))))))
(record-destruct @1.19-1.30 (label "y") (ident "y")
(sub-pattern
(p-record-destructure @1.22-1.30
(destructs
(record-destruct @1.24-1.25 (label "d") (ident "d")
(required
(p-assign @1.24-1.25 (ident "d"))))
(record-destruct @1.27-1.28 (label "e") (ident "e")
(required
(p-assign @1.27-1.28 (ident "e")))))))))))
(e-binop @1.33-1.50 (op "add")
(e-binop @1.33-1.46 (op "add")
(e-binop @1.33-1.42 (op "add")
(e-binop @1.33-1.38 (op "add")
(e-lookup-local @1.33-1.34
(p-assign @1.5-1.6 (ident "a")))
(e-lookup-local @1.37-1.38
(p-assign @1.12-1.13 (ident "b"))))
(e-lookup-local @1.41-1.42
(p-assign @1.15-1.16 (ident "c"))))
(e-lookup-local @1.45-1.46
(p-assign @1.24-1.25 (ident "d"))))
(e-lookup-local @1.49-1.50
(p-assign @1.27-1.28 (ident "e")))))
(e-record @1.53-1.88
(fields
(field (name "a")
(e-int @1.58-1.59 (value "1")))
(e-num @1.58-1.59 (value "1")))
(field (name "x")
(e-tuple @1.64-1.70
(elems
(e-int @1.65-1.66 (value "2"))
(e-int @1.68-1.69 (value "3")))))
(e-num @1.65-1.66 (value "2"))
(e-num @1.68-1.69 (value "3")))))
(field (name "y")
(e-record @1.75-1.87
(fields
(field (name "d")
(e-int @1.79-1.80 (value "4")))
(e-num @1.79-1.80 (value "4")))
(field (name "e")
(e-int @1.85-1.86 (value "5")))))))))
(e-num @1.85-1.86 (value "5")))))))))
~~~
# TYPES
~~~clojure
(expr @1.1-1.89 (type "Num(_size)"))
(expr @1.1-1.89 (type "Error"))
~~~

View file

@ -41,27 +41,12 @@ NO CHANGE
# CANONICALIZE
~~~clojure
(e-call @1.1-1.37
(e-lambda @1.2-1.18
(args
(p-record-destructure @1.3-1.11
(destructs
(record-destruct @1.5-1.6 (label "x") (ident "x")
(required
(p-assign @1.5-1.6 (ident "x"))))
(record-destruct @1.8-1.9 (label "y") (ident "y")
(required
(p-assign @1.8-1.9 (ident "y")))))))
(e-binop @1.13-1.18 (op "mul")
(e-lookup-local @1.13-1.14
(p-assign @1.5-1.6 (ident "x")))
(e-lookup-local @1.17-1.18
(p-assign @1.8-1.9 (ident "y")))))
(e-record @1.20-1.36
(fields
(field (name "x")
(e-int @1.25-1.27 (value "10")))
(e-num @1.25-1.27 (value "10")))
(field (name "y")
(e-int @1.32-1.34 (value "20"))))))
(e-num @1.32-1.34 (value "20"))))))
~~~
# TYPES
~~~clojure

View file

@ -36,19 +36,10 @@ EndOfFile(2:1-2:1),
# CANONICALIZE
~~~clojure
(e-call @1.1-1.25
(e-lambda @1.2-1.11
(args
(p-record-destructure @1.3-1.8
(destructs
(record-destruct @1.5-1.6 (label "x") (ident "x")
(required
(p-assign @1.5-1.6 (ident "x")))))))
(e-lookup-local @1.10-1.11
(p-assign @1.5-1.6 (ident "x"))))
(e-record @1.14-1.24
(fields
(field (name "x")
(e-int @1.19-1.22 (value "-10"))))))
(e-num @1.19-1.22 (value "-10"))))))
~~~
# TYPES
~~~clojure

View file

@ -84,31 +84,48 @@ NO CHANGE
(annotation @4.1-4.6
(declared-type
(ty-fn @3.9-3.21 (effectful false)
(ty @3.9-3.11 (name "U8"))
(ty @3.13-3.15 (name "U8"))
(ty @3.19-3.21 (name "U8"))))))
(ty-lookup @3.9-3.11 (name "U8") (builtin))
(ty-lookup @3.13-3.15 (name "U8") (builtin))
(ty-lookup @3.19-3.21 (name "U8") (builtin))))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err"))))
(s-expect @6.1-6.24
(e-binop @6.8-6.24 (op "eq")
(e-call @6.8-6.19
(e-lookup-local @6.8-6.13
(p-assign @4.1-4.6 (ident "addU8")))
(e-int @6.14-6.15 (value "1"))
(e-int @6.17-6.18 (value "2")))
(e-int @6.23-6.24 (value "3"))))
(e-num @6.14-6.15 (value "1"))
(e-num @6.17-6.18 (value "2")))
(e-num @6.23-6.24 (value "3"))))
(s-expect @7.1-7.26
(e-binop @7.8-7.26 (op "eq")
(e-call @7.8-7.20
(e-lookup-local @7.8-7.13
(p-assign @4.1-4.6 (ident "addU8")))
(e-int @7.14-7.15 (value "0"))
(e-int @7.17-7.19 (value "10")))
(e-int @7.24-7.26 (value "10")))))
(e-num @7.14-7.15 (value "0"))
(e-num @7.17-7.19 (value "10")))
(e-num @7.24-7.26 (value "10")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt @4.1-4.6 (type "U8, U8 -> U8")))
(patt @4.1-4.6 (type "Num(Int(Unsigned8)), Num(Int(Unsigned8)) -> Num(Int(Unsigned8))")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @4.9-4.21 (type "U8, U8 -> U8"))))
(expr @4.9-4.21 (type "Num(Int(Unsigned8)), Num(Int(Unsigned8)) -> Num(Int(Unsigned8))"))))
~~~

View file

@ -39,21 +39,10 @@ EndOfFile(2:1-2:1),
# CANONICALIZE
~~~clojure
(e-call @1.1-1.24
(e-lambda @1.2-1.15
(args
(p-tuple @1.3-1.8
(patterns
(p-assign @1.4-1.5 (ident "x"))
(p-assign @1.6-1.7 (ident "y")))))
(e-binop @1.10-1.15 (op "mul")
(e-lookup-local @1.10-1.11
(p-assign @1.4-1.5 (ident "x")))
(e-lookup-local @1.14-1.15
(p-assign @1.6-1.7 (ident "y")))))
(e-tuple @1.18-1.23
(elems
(e-int @1.19-1.20 (value "1"))
(e-int @1.21-1.22 (value "2")))))
(e-num @1.19-1.20 (value "1"))
(e-num @1.21-1.22 (value "2")))))
~~~
# TYPES
~~~clojure

View file

@ -73,5 +73,5 @@ NO CHANGE
~~~
# TYPES
~~~clojure
(expr @1.1-1.84 (type "(Bool, Bool, Bool, Bool, Bool, Bool, _field, _field2)"))
(expr @1.1-1.84 (type "(Error, Error, Error, Error, Error, Error, Error, Error)"))
~~~

View file

@ -55,28 +55,28 @@ NO CHANGE
~~~clojure
(e-tuple @1.1-1.184
(elems
(e-int @1.2-1.5 (value "1"))
(e-int @1.7-1.10 (value "2"))
(e-int @1.12-1.16 (value "3"))
(e-int @1.18-1.22 (value "4"))
(e-int @1.24-1.28 (value "5"))
(e-int @1.30-1.34 (value "6"))
(e-int @1.36-1.40 (value "7"))
(e-int @1.42-1.46 (value "8"))
(e-int @1.48-1.53 (value "9"))
(e-int @1.55-1.61 (value "10"))
(e-int @1.2-1.5 (value "1") (suffix "u8"))
(e-int @1.7-1.10 (value "2") (suffix "i8"))
(e-int @1.12-1.16 (value "3") (suffix "u16"))
(e-int @1.18-1.22 (value "4") (suffix "i16"))
(e-int @1.24-1.28 (value "5") (suffix "u32"))
(e-int @1.30-1.34 (value "6") (suffix "i32"))
(e-int @1.36-1.40 (value "7") (suffix "u64"))
(e-int @1.42-1.46 (value "8") (suffix "i64"))
(e-int @1.48-1.53 (value "9") (suffix "u128"))
(e-int @1.55-1.61 (value "10") (suffix "i128"))
(e-frac-f32 @1.63-1.70 (value "11"))
(e-frac-f64 @1.72-1.79 (value "12"))
(e-frac-dec @1.81-1.88 (value "13"))
(e-int @1.90-1.93 (value "14"))
(e-int @1.95-1.98 (value "15"))
(e-int @1.100-1.104 (value "32"))
(e-int @1.106-1.113 (value "17"))
(e-int @1.115-1.123 (value "18"))
(e-int @1.125-1.127 (value "19"))
(e-int @1.90-1.93 (value "14") (suffix "none"))
(e-int @1.95-1.98 (value "15") (suffix "none"))
(e-int @1.100-1.104 (value "32") (suffix "none"))
(e-int @1.106-1.113 (value "17") (suffix "none"))
(e-int @1.115-1.123 (value "18") (suffix "none"))
(e-num @1.125-1.127 (value "19"))
(e-dec-small @1.129-1.133 (numerator "200") (denominator-power-of-ten "1") (value "20"))
(e-int @1.135-1.141 (value "21000"))
(e-int @1.143-1.153 (value "22000000"))
(e-num @1.135-1.141 (value "21000"))
(e-num @1.143-1.153 (value "22000000"))
(e-dec-small @1.155-1.158 (numerator "0") (denominator-power-of-ten "1") (value "0.0"))
(e-dec-small @1.160-1.164 (numerator "-1") (denominator-power-of-ten "1") (value "-0.1"))
(e-dec-small @1.166-1.169 (numerator "20000") (denominator-power-of-ten "0") (value "20000"))
@ -85,5 +85,5 @@ NO CHANGE
~~~
# TYPES
~~~clojure
(expr @1.1-1.184 (type "(U8, I8, U16, I16, U32, I32, U64, I64, U128, I128, F32, F64, Dec, Int(_size), Int(_size2), Int(_size3), Int(_size4), Int(_size5), Num(_size6), Frac(_size7), Num(_size8), Num(_size9), Frac(_size10), Frac(_size11), Frac(_size12), Frac(_size13), Frac(_size14))"))
(expr @1.1-1.184 (type "(Num(Int(Unsigned8)), Num(Int(Signed8)), Num(Int(Unsigned16)), Num(Int(Signed16)), Num(Int(Unsigned32)), Num(Int(Signed32)), Num(Int(Unsigned64)), Num(Int(Signed64)), Num(Int(Unsigned128)), Num(Int(Signed128)), Num(Frac(Float32)), Num(Frac(Float64)), Num(Frac(Decimal)), Num(Int(_size)), Num(Int(_size2)), Num(Int(_size3)), Num(Int(_size4)), Num(Int(_size5)), Num(_size6), Num(Frac(_size7)), Num(_size8), Num(_size9), Num(Frac(_size10)), Num(Frac(_size11)), Num(Frac(_size12)), Num(Frac(_size13)), Num(Frac(_size14)))"))
~~~

View file

@ -59,7 +59,20 @@ NO CHANGE
(can-ir
(d-let
(p-assign @5.1-5.5 (ident "main"))
(e-int @5.8-5.10 (value "42")))
(e-num @5.8-5.10 (value "42")))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err"))))
(s-import @3.1-3.42 (module "pf.Stdout") (qualifier "pf")
(exposes
(exposed (name "line!") (wildcard false))
@ -70,6 +83,14 @@ NO CHANGE
(inferred-types
(defs
(patt @5.1-5.5 (type "Num(_size)")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @5.8-5.10 (type "Num(_size)"))))
~~~

View file

@ -56,5 +56,5 @@ NO CHANGE
~~~
# TYPES
~~~clojure
(expr @1.1-6.2 (type "[Apple][IsFruit(Bool)]"))
(expr @1.1-6.2 (type "[Apple][IsFruit(Error)]"))
~~~

View file

@ -71,8 +71,6 @@ EndOfFile(7:1-7:1),
(destructs)))
(e-not-implemented @1.1-1.1)))
(e-call @5.5-5.23
(e-lookup-local @5.5-5.19
(p-assign @3.5-3.19 (ident "launchTheNukes")))
(e-empty_record @5.20-5.22)))
~~~
# TYPES

View file

@ -41,8 +41,7 @@ NO CHANGE
# CANONICALIZE
~~~clojure
(e-call @1.1-1.17
(e-runtime-error (tag "ident_not_in_scope"))
(e-int @1.5-1.7 (value "42"))
(e-num @1.5-1.7 (value "42"))
(e-string @1.9-1.16
(e-literal @1.10-1.15 (string "hello"))))
~~~

View file

@ -29,8 +29,8 @@ NO CHANGE
# CANONICALIZE
~~~clojure
(e-binop @1.1-1.6 (op "add")
(e-int @1.1-1.2 (value "1"))
(e-int @1.5-1.6 (value "2")))
(e-num @1.1-1.2 (value "1"))
(e-num @1.5-1.6 (value "2")))
~~~
# TYPES
~~~clojure

View file

@ -53,17 +53,17 @@ EndOfFile(6:1-6:1),
(e-block @1.1-5.2
(s-let @2.5-2.11
(p-assign @2.5-2.6 (ident "x"))
(e-int @2.9-2.11 (value "42")))
(e-num @2.9-2.11 (value "42")))
(s-let @3.5-3.14
(p-assign @3.5-3.6 (ident "y"))
(e-binop @3.9-3.14 (op "add")
(e-lookup-local @3.9-3.10
(p-assign @2.5-2.6 (ident "x")))
(e-int @3.13-3.14 (value "1"))))
(e-num @3.13-3.14 (value "1"))))
(e-binop @4.5-4.10 (op "mul")
(e-lookup-local @4.5-4.6
(p-assign @3.5-3.6 (ident "y")))
(e-int @4.9-4.10 (value "2"))))
(e-num @4.9-4.10 (value "2"))))
~~~
# TYPES
~~~clojure

View file

@ -69,7 +69,7 @@ EndOfFile(7:1-7:1),
(e-block @1.1-6.2
(s-let @2.5-2.11
(p-assign @2.5-2.6 (ident "x"))
(e-int @2.9-2.11 (value "42")))
(e-num @2.9-2.11 (value "42")))
(s-let @3.5-3.18
(p-assign @3.5-3.8 (ident "str"))
(e-string @3.11-3.18
@ -79,7 +79,7 @@ EndOfFile(7:1-7:1),
(e-binop @4.14-4.19 (op "add")
(e-lookup-local @4.14-4.15
(p-assign @2.5-2.6 (ident "x")))
(e-int @4.18-4.19 (value "5"))))
(e-num @4.18-4.19 (value "5"))))
(e-lookup-local @5.5-5.11
(p-assign @4.5-4.11 (ident "result"))))
~~~

View file

@ -37,5 +37,5 @@ NO CHANGE
~~~
# TYPES
~~~clojure
(expr @1.1-1.14 (type "(Bool, Bool)"))
(expr @1.1-1.14 (type "(Error, Error)"))
~~~

View file

@ -43,7 +43,6 @@ NO CHANGE
~~~clojure
(e-binop @1.1-1.23 (op "null_coalesce")
(e-call @1.1-1.14
(e-runtime-error (tag "ident_not_in_scope"))
(e-empty_record @1.11-1.13))
(e-string @1.18-1.23
(e-literal @1.19-1.22 (string "Bob"))))

View file

@ -30,5 +30,5 @@ NO CHANGE
~~~
# TYPES
~~~clojure
(expr @1.1-1.5 (type "Frac(_size)"))
(expr @1.1-1.5 (type "Num(Frac(_size))"))
~~~

View file

@ -30,5 +30,5 @@ NO CHANGE
~~~
# TYPES
~~~clojure
(expr @1.1-1.8 (type "Frac(_size)"))
(expr @1.1-1.8 (type "Num(Frac(_size))"))
~~~

View file

@ -30,5 +30,5 @@ NO CHANGE
~~~
# TYPES
~~~clojure
(expr @1.1-1.5 (type "Frac(_size)"))
(expr @1.1-1.5 (type "Num(Frac(_size))"))
~~~

View file

@ -40,9 +40,8 @@ NO CHANGE
# CANONICALIZE
~~~clojure
(e-call @1.1-1.10
(e-runtime-error (tag "ident_not_in_scope"))
(e-int @1.5-1.6 (value "5"))
(e-int @1.8-1.9 (value "3")))
(e-num @1.5-1.6 (value "5"))
(e-num @1.8-1.9 (value "3")))
~~~
# TYPES
~~~clojure

View file

@ -48,7 +48,7 @@ NO CHANGE
(if-branch
(e-binop @1.4-1.9 (op "gt")
(e-runtime-error (tag "ident_not_in_scope"))
(e-int @1.8-1.9 (value "5")))
(e-num @1.8-1.9 (value "5")))
(e-string @1.10-1.15
(e-literal @1.11-1.14 (string "big")))))
(if-else

View file

@ -35,11 +35,11 @@ NO CHANGE
(if-branches
(if-branch
(e-binop @1.4-1.9 (op "gt")
(e-int @1.4-1.5 (value "5"))
(e-int @1.8-1.9 (value "3")))
(e-int @1.10-1.11 (value "1"))))
(e-num @1.4-1.5 (value "5"))
(e-num @1.8-1.9 (value "3")))
(e-num @1.10-1.11 (value "1"))))
(if-else
(e-int @1.17-1.18 (value "2"))))
(e-num @1.17-1.18 (value "2"))))
~~~
# TYPES
~~~clojure

View file

@ -34,9 +34,9 @@ NO CHANGE
(if-branch
(e-nominal @1.4-1.8 (nominal "Bool")
(e-tag @1.4-1.8 (name "True")))
(e-int @1.9-1.10 (value "1"))))
(e-num @1.9-1.10 (value "1"))))
(if-else
(e-int @1.16-1.17 (value "2"))))
(e-num @1.16-1.17 (value "2"))))
~~~
# TYPES
~~~clojure

View file

@ -26,9 +26,9 @@ NO CHANGE
~~~
# CANONICALIZE
~~~clojure
(e-int @1.1-1.5 (value "255"))
(e-int @1.1-1.5 (value "255") (suffix "none"))
~~~
# TYPES
~~~clojure
(expr @1.1-1.5 (type "Int(_size)"))
(expr @1.1-1.5 (type "Num(Int(_size))"))
~~~

View file

@ -26,7 +26,7 @@ NO CHANGE
~~~
# CANONICALIZE
~~~clojure
(e-int @1.1-1.31 (value "999999999999999999999999999999"))
(e-num @1.1-1.31 (value "999999999999999999999999999999"))
~~~
# TYPES
~~~clojure

View file

@ -26,7 +26,7 @@ NO CHANGE
~~~
# CANONICALIZE
~~~clojure
(e-int @1.1-1.10 (value "1000000"))
(e-num @1.1-1.10 (value "1000000"))
~~~
# TYPES
~~~clojure

View file

@ -37,7 +37,7 @@ NO CHANGE
(e-binop @1.5-1.10 (op "add")
(e-lookup-local @1.5-1.6
(p-assign @1.2-1.3 (ident "x")))
(e-int @1.9-1.10 (value "1"))))
(e-num @1.9-1.10 (value "1"))))
~~~
# TYPES
~~~clojure

View file

@ -31,9 +31,9 @@ NO CHANGE
~~~clojure
(e-list @1.1-1.10
(elems
(e-int @1.2-1.3 (value "1"))
(e-int @1.5-1.6 (value "2"))
(e-int @1.8-1.9 (value "3"))))
(e-num @1.2-1.3 (value "1"))
(e-num @1.5-1.6 (value "2"))
(e-num @1.8-1.9 (value "3"))))
~~~
# TYPES
~~~clojure

View file

@ -38,15 +38,15 @@ NO CHANGE
(elems
(e-list @1.2-1.8
(elems
(e-int @1.3-1.4 (value "1"))
(e-int @1.6-1.7 (value "2"))))
(e-num @1.3-1.4 (value "1"))
(e-num @1.6-1.7 (value "2"))))
(e-list @1.10-1.16
(elems
(e-int @1.11-1.12 (value "3"))
(e-int @1.14-1.15 (value "4"))))
(e-num @1.11-1.12 (value "3"))
(e-num @1.14-1.15 (value "4"))))
(e-list @1.18-1.21
(elems
(e-int @1.19-1.20 (value "5"))))))
(e-num @1.19-1.20 (value "5"))))))
~~~
# TYPES
~~~clojure

View file

@ -50,8 +50,8 @@ NO CHANGE
~~~clojure
(e-list @1.1-1.16
(elems
(e-int @1.2-1.3 (value "1"))
(e-int @1.5-1.6 (value "2"))
(e-num @1.2-1.3 (value "1"))
(e-num @1.5-1.6 (value "2"))
(e-string @1.8-1.15
(e-literal @1.9-1.14 (string "hello")))))
~~~

View file

@ -29,7 +29,7 @@ NO CHANGE
# CANONICALIZE
~~~clojure
(e-unary-minus @1.1-1.5
(e-int @1.3-1.4 (value "8")))
(e-num @1.3-1.4 (value "8")))
~~~
# TYPES
~~~clojure

View file

@ -10,20 +10,7 @@ type=expr
# EXPECTED
TYPE MISMATCH - not_tag.md:1:1:1:8
# PROBLEMS
**TYPE MISMATCH**
This expression is used in an unexpected way:
**not_tag.md:1:1:1:8:**
```roc
!(C(2))
```
^^^^^^^
It has the type:
_Bool_
But here it's being used as:
_[C(Num(_size))]_others_
NIL
# TOKENS
~~~zig
OpBang(1:1-1:2),NoSpaceOpenRound(1:2-1:3),UpperIdent(1:3-1:4),NoSpaceOpenRound(1:4-1:5),Int(1:5-1:6),CloseRound(1:6-1:7),CloseRound(1:7-1:8),
@ -46,7 +33,7 @@ NO CHANGE
(e-unary-not @1.1-1.8
(e-tag @1.3-1.7 (name "C")
(args
(e-int @1.5-1.6 (value "2")))))
(e-num @1.5-1.6 (value "2")))))
~~~
# TYPES
~~~clojure

View file

@ -30,7 +30,7 @@ EndOfFile(4:1-4:1),
~~~
# CANONICALIZE
~~~clojure
(e-int @1.1-1.2 (value "4"))
(e-num @1.1-1.2 (value "4"))
~~~
# TYPES
~~~clojure

View file

@ -43,7 +43,28 @@ type=expr
# EXPECTED
NIL
# PROBLEMS
NIL
**INVALID NUMBER**
This number literal is not valid: `123dec`
**number_literal_suffixes.md:12:9:12:15:**
```roc
dec: 123dec,
```
^^^^^^
Check that the number is correctly formatted. Valid examples include: `42`, `3.14`, `0x1A`, or `1_000_000`.
**INVALID NUMBER**
This number literal is not valid: `-123dec`
**number_literal_suffixes.md:23:12:23:19:**
```roc
decNeg: -123dec,
```
^^^^^^^
Check that the number is correctly formatted. Valid examples include: `42`, `3.14`, `0x1A`, or `1_000_000`.
# TOKENS
~~~zig
OpenCurly(1:1-1:2),
@ -192,71 +213,71 @@ EndOfFile(35:1-35:1),
(e-record @1.1-34.2
(fields
(field (name "u8")
(e-int @2.9-2.14 (value "123")))
(e-int @2.9-2.14 (value "123") (suffix "u8")))
(field (name "u16")
(e-int @3.9-3.15 (value "123")))
(e-int @3.9-3.15 (value "123") (suffix "u16")))
(field (name "u32")
(e-int @4.9-4.15 (value "123")))
(e-int @4.9-4.15 (value "123") (suffix "u32")))
(field (name "u64")
(e-int @5.9-5.15 (value "123")))
(e-int @5.9-5.15 (value "123") (suffix "u64")))
(field (name "u128")
(e-int @6.9-6.16 (value "123")))
(e-int @6.9-6.16 (value "123") (suffix "u128")))
(field (name "i8")
(e-int @7.9-7.14 (value "123")))
(e-int @7.9-7.14 (value "123") (suffix "i8")))
(field (name "i16")
(e-int @8.9-8.15 (value "123")))
(e-int @8.9-8.15 (value "123") (suffix "i16")))
(field (name "i32")
(e-int @9.9-9.15 (value "123")))
(e-int @9.9-9.15 (value "123") (suffix "i32")))
(field (name "i64")
(e-int @10.9-10.15 (value "123")))
(e-int @10.9-10.15 (value "123") (suffix "i64")))
(field (name "i128")
(e-int @11.9-11.16 (value "123")))
(e-int @11.9-11.16 (value "123") (suffix "i128")))
(field (name "dec")
(e-int @12.9-12.15 (value "123")))
(e-runtime-error (tag "invalid_num_literal")))
(field (name "u8Neg")
(e-int @13.12-13.18 (value "-123")))
(e-int @13.12-13.18 (value "-123") (suffix "u8")))
(field (name "u16Neg")
(e-int @14.12-14.19 (value "-123")))
(e-int @14.12-14.19 (value "-123") (suffix "u16")))
(field (name "u32Neg")
(e-int @15.12-15.19 (value "-123")))
(e-int @15.12-15.19 (value "-123") (suffix "u32")))
(field (name "u64Neg")
(e-int @16.12-16.19 (value "-123")))
(e-int @16.12-16.19 (value "-123") (suffix "u64")))
(field (name "u128Neg")
(e-int @17.12-17.20 (value "-123")))
(e-int @17.12-17.20 (value "-123") (suffix "u128")))
(field (name "i8Neg")
(e-int @18.12-18.18 (value "-123")))
(e-int @18.12-18.18 (value "-123") (suffix "i8")))
(field (name "i16Neg")
(e-int @19.12-19.19 (value "-123")))
(e-int @19.12-19.19 (value "-123") (suffix "i16")))
(field (name "i32Neg")
(e-int @20.12-20.19 (value "-123")))
(e-int @20.12-20.19 (value "-123") (suffix "i32")))
(field (name "i64Neg")
(e-int @21.12-21.19 (value "-123")))
(e-int @21.12-21.19 (value "-123") (suffix "i64")))
(field (name "i128Neg")
(e-int @22.12-22.20 (value "-123")))
(e-int @22.12-22.20 (value "-123") (suffix "i128")))
(field (name "decNeg")
(e-int @23.12-23.19 (value "-123")))
(e-runtime-error (tag "invalid_num_literal")))
(field (name "u8Bin")
(e-int @24.12-24.19 (value "5")))
(e-int @24.12-24.19 (value "5") (suffix "u8")))
(field (name "u16Bin")
(e-int @25.12-25.20 (value "5")))
(e-int @25.12-25.20 (value "5") (suffix "u16")))
(field (name "u32Bin")
(e-int @26.12-26.20 (value "5")))
(e-int @26.12-26.20 (value "5") (suffix "u32")))
(field (name "u64Bin")
(e-int @27.12-27.20 (value "5")))
(e-int @27.12-27.20 (value "5") (suffix "u64")))
(field (name "u128Bin")
(e-int @28.12-28.21 (value "5")))
(e-int @28.12-28.21 (value "5") (suffix "u128")))
(field (name "i8Bin")
(e-int @29.12-29.19 (value "5")))
(e-int @29.12-29.19 (value "5") (suffix "i8")))
(field (name "i16Bin")
(e-int @30.12-30.20 (value "5")))
(e-int @30.12-30.20 (value "5") (suffix "i16")))
(field (name "i32Bin")
(e-int @31.12-31.20 (value "5")))
(e-int @31.12-31.20 (value "5") (suffix "i32")))
(field (name "i64Bin")
(e-int @32.12-32.20 (value "5")))
(e-int @32.12-32.20 (value "5") (suffix "i64")))
(field (name "i128Bin")
(e-int @33.12-33.21 (value "5")))))
(e-int @33.12-33.21 (value "5") (suffix "i128")))))
~~~
# TYPES
~~~clojure
(expr @1.1-34.2 (type "{ u8: U8, u16: U16, u32: U32, u64: U64, u128: U128, i8: I8, i16: I16, i32: I32, i64: I64, i128: I128, dec: Num(_size), u8Neg: U8, u16Neg: U16, u32Neg: U32, u64Neg: U64, u128Neg: U128, i8Neg: I8, i16Neg: I16, i32Neg: I32, i64Neg: I64, i128Neg: I128, decNeg: Num(_size2), u8Bin: U8, u16Bin: U16, u32Bin: U32, u64Bin: U64, u128Bin: U128, i8Bin: I8, i16Bin: I16, i32Bin: I32, i64Bin: I64, i128Bin: I128 }"))
(expr @1.1-34.2 (type "{ u8: Num(Int(Unsigned8)), u16: Num(Int(Unsigned16)), u32: Num(Int(Unsigned32)), u64: Num(Int(Unsigned64)), u128: Num(Int(Unsigned128)), i8: Num(Int(Signed8)), i16: Num(Int(Signed16)), i32: Num(Int(Signed32)), i64: Num(Int(Signed64)), i128: Num(Int(Signed128)), dec: Error, u8Neg: Num(Int(Unsigned8)), u16Neg: Num(Int(Unsigned16)), u32Neg: Num(Int(Unsigned32)), u64Neg: Num(Int(Unsigned64)), u128Neg: Num(Int(Unsigned128)), i8Neg: Num(Int(Signed8)), i16Neg: Num(Int(Signed16)), i32Neg: Num(Int(Signed32)), i64Neg: Num(Int(Signed64)), i128Neg: Num(Int(Signed128)), decNeg: Error, u8Bin: Num(Int(Unsigned8)), u16Bin: Num(Int(Unsigned16)), u32Bin: Num(Int(Unsigned32)), u64Bin: Num(Int(Unsigned64)), u128Bin: Num(Int(Unsigned128)), i8Bin: Num(Int(Signed8)), i16Bin: Num(Int(Signed16)), i32Bin: Num(Int(Signed32)), i64Bin: Num(Int(Signed64)), i128Bin: Num(Int(Signed128)) }"))
~~~

View file

@ -45,9 +45,9 @@ NO CHANGE
(e-runtime-error (tag "ident_not_in_scope")))
(fields
(field (name "age")
(e-int @1.18-1.20 (value "31")))))
(e-num @1.18-1.20 (value "31")))))
~~~
# TYPES
~~~clojure
(expr @1.1-1.22 (type "{ age: Num(_size) }"))
(expr @1.1-1.22 (type "{ age: Num(_size), Error }"))
~~~

View file

@ -45,7 +45,7 @@ EndOfFile(5:1-5:1),
(e-record @1.1-4.2
(fields
(field (name "answer")
(e-int @2.13-2.15 (value "42")))
(e-num @2.13-2.15 (value "42")))
(field (name "launchTheNukes!")
(e-lambda @3.22-3.30
(args

View file

@ -37,7 +37,7 @@ NO CHANGE
(e-string @1.9-1.16
(e-literal @1.10-1.15 (string "Alice"))))
(field (name "age")
(e-int @1.23-1.25 (value "30")))))
(e-num @1.23-1.25 (value "30")))))
~~~
# TYPES
~~~clojure

View file

@ -62,7 +62,7 @@ NO CHANGE
(e-string @3.18-3.25
(e-literal @3.19-3.24 (string "Alice"))))
(field (name "age")
(e-int @3.32-3.34 (value "30"))))))
(e-num @3.32-3.34 (value "30"))))))
(d-let
(p-assign @4.1-4.8 (ident "updated"))
(e-record @4.11-4.32
@ -71,15 +71,36 @@ NO CHANGE
(p-assign @3.1-3.7 (ident "person"))))
(fields
(field (name "age")
(e-int @4.28-4.30 (value "31")))))))
(e-num @4.28-4.30 (value "31"))))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt @3.1-3.7 (type "{ name: Str, age: Num(_size) }"))
(patt @4.1-4.8 (type "{ age: Num(_size) }")))
(patt @4.1-4.8 (type "{ age: Num(_size), { name: Str, age: Num(_size2) } }")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @3.10-3.36 (type "{ name: Str, age: Num(_size) }"))
(expr @4.11-4.32 (type "{ age: Num(_size) }"))))
(expr @4.11-4.32 (type "{ age: Num(_size), { name: Str, age: Num(_size2) } }"))))
~~~

View file

@ -87,7 +87,7 @@ NO CHANGE
(e-string @3.18-3.25
(e-literal @3.19-3.24 (string "Alice"))))
(field (name "age")
(e-int @3.32-3.34 (value "30")))
(e-num @3.32-3.34 (value "30")))
(field (name "city")
(e-string @3.42-3.50
(e-literal @3.43-3.49 (string "Boston")))))))
@ -99,7 +99,7 @@ NO CHANGE
(p-assign @3.1-3.7 (ident "person"))))
(fields
(field (name "age")
(e-int @4.32-4.34 (value "31"))))))
(e-num @4.32-4.34 (value "31"))))))
(d-let
(p-assign @5.1-5.9 (ident "updated2"))
(e-record @5.12-5.47
@ -121,19 +121,40 @@ NO CHANGE
(e-string @6.29-6.42
(e-literal @6.30-6.41 (string "Alice Smith"))))
(field (name "age")
(e-int @6.49-6.51 (value "32")))))))
(e-num @6.49-6.51 (value "32"))))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt @3.1-3.7 (type "{ name: Str, age: Num(_size), city: Str }"))
(patt @4.1-4.12 (type "{ age: Num(_size) }"))
(patt @5.1-5.9 (type "{ city: Str }"))
(patt @6.1-6.6 (type "{ name: Str, age: Num(_size) }")))
(patt @4.1-4.12 (type "{ age: Num(_size), { name: Str, age: Num(_size2), city: Str } }"))
(patt @5.1-5.9 (type "{ city: Str, age: Num(_size), { name: Str, age: Num(_size2), city: Str } }"))
(patt @6.1-6.6 (type "{ name: Str, age: Num(_size), city: Str, age: Num(_size2), { name: Str, age: Num(_size3), city: Str } }")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @3.10-3.52 (type "{ name: Str, age: Num(_size), city: Str }"))
(expr @4.15-4.36 (type "{ age: Num(_size) }"))
(expr @5.12-5.47 (type "{ city: Str }"))
(expr @6.9-6.53 (type "{ name: Str, age: Num(_size) }"))))
(expr @4.15-4.36 (type "{ age: Num(_size), { name: Str, age: Num(_size2), city: Str } }"))
(expr @5.12-5.47 (type "{ city: Str, age: Num(_size), { name: Str, age: Num(_size2), city: Str } }"))
(expr @6.9-6.53 (type "{ name: Str, age: Num(_size), city: Str, age: Num(_size2), { name: Str, age: Num(_size3), city: Str } }"))))
~~~

View file

@ -46,5 +46,5 @@ NO CHANGE
~~~
# TYPES
~~~clojure
(expr @1.1-1.17 (type "Str"))
(expr @1.1-1.17 (type "Error"))
~~~

View file

@ -21,27 +21,7 @@ type=expr
# EXPECTED
INCOMPATIBLE LIST ELEMENTS - tag_applications_simple.md:3:5:3:5
# PROBLEMS
**INCOMPATIBLE LIST ELEMENTS**
The second and third elements in this list have incompatible types:
**tag_applications_simple.md:3:5:**
```roc
None,
Ok("hello"),
```
^^^^
^^^^^^^^^^^
The second element has this type:
_[Some(Num(_size)), None]_others_
However, the third element has this type:
_Result(Str, err)_
All elements in a list must have compatible types.
Note: You can wrap each element in a tag to make them compatible.
To learn about tags, see <https://www.roc-lang.org/tutorial#tags>
NIL
# TOKENS
~~~zig
OpenSquare(1:1-1:2),
@ -119,7 +99,7 @@ EndOfFile(13:1-13:1),
(elems
(e-tag @2.5-2.13 (name "Some")
(args
(e-int @2.10-2.12 (value "42"))))
(e-num @2.10-2.12 (value "42"))))
(e-tag @3.5-3.9 (name "None"))
(e-nominal @4.5-4.16 (nominal "Result")
(e-tag @4.5-4.16 (name "Ok")
@ -133,14 +113,14 @@ EndOfFile(13:1-13:1),
(e-literal @5.10-5.14 (string "oops"))))))
(e-tag @6.5-6.14 (name "Just")
(args
(e-int @6.10-6.13 (value "100"))))
(e-num @6.10-6.13 (value "100"))))
(e-tag @7.5-7.12 (name "Nothing"))
(e-tag @8.5-8.12 (name "Left")
(args
(e-int @8.10-8.11 (value "1"))))
(e-num @8.10-8.11 (value "1"))))
(e-tag @9.5-9.13 (name "Right")
(args
(e-int @9.11-9.12 (value "2"))))
(e-num @9.11-9.12 (value "2"))))
(e-tag @10.5-10.23 (name "Some")
(args
(e-nominal @10.10-10.22 (nominal "Result")
@ -148,7 +128,7 @@ EndOfFile(13:1-13:1),
(args
(e-tag @10.13-10.21 (name "Just")
(args
(e-int @10.18-10.20 (value "42")))))))))
(e-num @10.18-10.20 (value "42")))))))))
(e-tag @11.5-11.27 (name "Result")
(args
(e-nominal @11.12-11.26 (nominal "Result")

View file

@ -115,7 +115,7 @@ EndOfFile(11:1-11:1),
(field (name "someTag")
(e-tag @2.14-2.22 (name "Some")
(args
(e-int @2.19-2.21 (value "42")))))
(e-num @2.19-2.21 (value "42")))))
(field (name "noneTag")
(e-tag @3.14-3.18 (name "None")))
(field (name "okTag")
@ -137,11 +137,10 @@ EndOfFile(11:1-11:1),
(e-binop @6.17-6.22 (op "add")
(e-lookup-local @6.17-6.18
(p-assign @6.14-6.15 (ident "x")))
(e-int @6.21-6.22 (value "1")))))
(e-num @6.21-6.22 (value "1")))))
(field (name "result")
(e-call @7.13-7.22
(e-runtime-error (tag "ident_not_in_scope"))
(e-int @7.20-7.21 (value "5"))))
(e-num @7.20-7.21 (value "5"))))
(field (name "nested")
(e-tag @8.13-8.31 (name "Some")
(args
@ -150,22 +149,22 @@ EndOfFile(11:1-11:1),
(args
(e-tag @8.21-8.29 (name "Just")
(args
(e-int @8.26-8.28 (value "42"))))))))))
(e-num @8.26-8.28 (value "42"))))))))))
(field (name "tagList")
(e-list @9.14-9.47
(elems
(e-tag @9.15-9.22 (name "Some")
(args
(e-int @9.20-9.21 (value "1"))))
(e-num @9.20-9.21 (value "1"))))
(e-tag @9.24-9.31 (name "Some")
(args
(e-int @9.29-9.30 (value "2"))))
(e-num @9.29-9.30 (value "2"))))
(e-tag @9.33-9.37 (name "None"))
(e-tag @9.39-9.46 (name "Some")
(args
(e-int @9.44-9.45 (value "3")))))))))
(e-num @9.44-9.45 (value "3")))))))))
~~~
# TYPES
~~~clojure
(expr @1.1-10.2 (type "{ someTag: [Some(Num(_size))]_others, noneTag: [None]_others2, okTag: Result(Str, err), errTag: Result(ok, Str), addOne: Num(_size2) -> Num(_size3), result: _field, nested: [Some(Error)]_others3, tagList: List([Some(Num(_size4))][None]_others4) }"))
(expr @1.1-10.2 (type "{ someTag: [Some(Num(_size))]_others, noneTag: [None]_others2, okTag: Error, errTag: Error, addOne: Num(_size2) -> Num(_size3), result: _field, nested: [Some(Error)]_others3, tagList: List([Some(Num(_size4))][None]_others4) }"))
~~~

View file

@ -30,7 +30,7 @@ NO CHANGE
~~~clojure
(e-tag @1.1-1.9 (name "Some")
(args
(e-int @1.6-1.8 (value "42"))))
(e-num @1.6-1.8 (value "42"))))
~~~
# TYPES
~~~clojure

View file

@ -32,7 +32,7 @@ NO CHANGE
~~~clojure
(e-tuple @1.1-1.19
(elems
(e-int @1.2-1.3 (value "1"))
(e-num @1.2-1.3 (value "1"))
(e-string @1.5-1.12
(e-literal @1.6-1.11 (string "hello")))
(e-nominal @1.14-1.18 (nominal "Bool")
@ -40,5 +40,5 @@ NO CHANGE
~~~
# TYPES
~~~clojure
(expr @1.1-1.19 (type "(Num(_size), Str, Bool)"))
(expr @1.1-1.19 (type "(Num(_size), Str, Error)"))
~~~

View file

@ -258,30 +258,30 @@ EndOfFile(20:1-20:1),
(e-empty_record @3.19-3.21)))
(s-let @4.5-4.11
(p-assign @4.5-4.6 (ident "x"))
(e-int @4.9-4.11 (value "10")))
(e-num @4.9-4.11 (value "10")))
(s-let @5.5-5.11
(p-assign @5.5-5.6 (ident "y"))
(e-int @5.9-5.11 (value "20")))
(e-num @5.9-5.11 (value "20")))
(s-let @6.5-6.11
(p-assign @6.5-6.6 (ident "z"))
(e-int @6.9-6.11 (value "30")))
(e-num @6.9-6.11 (value "30")))
(s-let @9.2-9.12
(p-assign @9.2-9.7 (ident "empty"))
(e-runtime-error (tag "empty_tuple")))
(s-let @10.2-10.15
(p-assign @10.2-10.8 (ident "single"))
(e-int @10.12-10.14 (value "42")))
(e-num @10.12-10.14 (value "42")))
(s-let @11.2-11.15
(p-assign @11.2-11.6 (ident "pair"))
(e-tuple @11.9-11.15
(elems
(e-int @11.10-11.11 (value "1"))
(e-int @11.13-11.14 (value "2")))))
(e-num @11.10-11.11 (value "1"))
(e-num @11.13-11.14 (value "2")))))
(s-let @12.2-12.29
(p-assign @12.2-12.8 (ident "triple"))
(e-tuple @12.11-12.29
(elems
(e-int @12.12-12.13 (value "1"))
(e-num @12.12-12.13 (value "1"))
(e-string @12.15-12.22
(e-literal @12.16-12.21 (string "hello")))
(e-nominal @12.24-12.28 (nominal "Bool")
@ -292,27 +292,25 @@ EndOfFile(20:1-20:1),
(elems
(e-tuple @13.12-13.18
(elems
(e-int @13.13-13.14 (value "1"))
(e-int @13.16-13.17 (value "2"))))
(e-num @13.13-13.14 (value "1"))
(e-num @13.16-13.17 (value "2"))))
(e-tuple @13.20-13.26
(elems
(e-int @13.21-13.22 (value "3"))
(e-int @13.24-13.25 (value "4")))))))
(e-num @13.21-13.22 (value "3"))
(e-num @13.24-13.25 (value "4")))))))
(s-let @14.2-14.42
(p-assign @14.2-14.7 (ident "mixed"))
(e-tuple @14.10-14.42
(elems
(e-call @14.11-14.21
(e-lookup-local @14.11-14.18
(p-assign @3.5-3.12 (ident "add_one")))
(e-int @14.19-14.20 (value "5")))
(e-num @14.19-14.20 (value "5")))
(e-string @14.23-14.30
(e-literal @14.24-14.29 (string "world")))
(e-list @14.32-14.41
(elems
(e-int @14.33-14.34 (value "1"))
(e-int @14.36-14.37 (value "2"))
(e-int @14.39-14.40 (value "3")))))))
(e-num @14.33-14.34 (value "1"))
(e-num @14.36-14.37 (value "2"))
(e-num @14.39-14.40 (value "3")))))))
(s-let @15.2-15.23
(p-assign @15.2-15.11 (ident "with_vars"))
(e-tuple @15.14-15.23
@ -333,8 +331,8 @@ EndOfFile(20:1-20:1),
(e-binop @16.21-16.26 (op "add")
(e-lookup-local @16.21-16.22
(p-assign @16.18-16.19 (ident "n")))
(e-int @16.25-16.26 (value "1"))))
(e-int @16.28-16.30 (value "42")))))
(e-num @16.25-16.26 (value "1"))))
(e-num @16.28-16.30 (value "42")))))
(e-lookup-local @18.2-18.7
(p-assign @9.2-9.7 (ident "empty"))))
~~~

View file

@ -312,8 +312,8 @@ EndOfFile(20:1-20:1),
(p-assign @4.9-4.10 (ident "y"))))
(e-tuple @4.14-4.20
(elems
(e-int @4.15-4.16 (value "1"))
(e-int @4.18-4.19 (value "2")))))
(e-num @4.15-4.16 (value "1"))
(e-num @4.18-4.19 (value "2")))))
(s-let @7.5-7.44
(p-tuple @7.5-7.21
(patterns
@ -329,12 +329,12 @@ EndOfFile(20:1-20:1),
(elems
(e-tuple @7.25-7.33
(elems
(e-int @7.26-7.28 (value "10"))
(e-int @7.30-7.32 (value "20"))))
(e-num @7.26-7.28 (value "10"))
(e-num @7.30-7.32 (value "20"))))
(e-tuple @7.35-7.43
(elems
(e-int @7.36-7.38 (value "30"))
(e-int @7.40-7.42 (value "40")))))))
(e-num @7.36-7.38 (value "30"))
(e-num @7.40-7.42 (value "40")))))))
(s-let @10.5-10.44
(p-tuple @10.5-10.27
(patterns
@ -343,9 +343,9 @@ EndOfFile(20:1-20:1),
(p-assign @10.21-10.26 (ident "third"))))
(e-tuple @10.30-10.44
(elems
(e-int @10.31-10.34 (value "100"))
(e-int @10.36-10.38 (value "42"))
(e-int @10.40-10.43 (value "200")))))
(e-num @10.31-10.34 (value "100"))
(e-num @10.36-10.38 (value "42"))
(e-num @10.40-10.43 (value "200")))))
(s-let @13.5-13.55
(p-tuple @13.5-13.28
(patterns
@ -369,9 +369,9 @@ EndOfFile(20:1-20:1),
(elems
(e-list @16.22-16.31
(elems
(e-int @16.23-16.24 (value "1"))
(e-int @16.26-16.27 (value "2"))
(e-int @16.29-16.30 (value "3"))))
(e-num @16.23-16.24 (value "1"))
(e-num @16.26-16.27 (value "2"))
(e-num @16.29-16.30 (value "3"))))
(e-string @16.33-16.40
(e-literal @16.34-16.39 (string "hello"))))))
(e-empty_record @18.5-18.7))

View file

@ -32,7 +32,7 @@ NO CHANGE
~~~clojure
(e-tuple @1.1-1.19
(elems
(e-int @1.2-1.3 (value "1"))
(e-num @1.2-1.3 (value "1"))
(e-string @1.5-1.12
(e-literal @1.6-1.11 (string "hello")))
(e-nominal @1.14-1.18 (nominal "Bool")
@ -40,5 +40,5 @@ NO CHANGE
~~~
# TYPES
~~~clojure
(expr @1.1-1.19 (type "(Num(_size), Str, Bool)"))
(expr @1.1-1.19 (type "(Num(_size), Str, Error)"))
~~~

View file

@ -82,12 +82,10 @@ EndOfFile(7:1-7:1),
(e-lookup-local @3.13-3.14
(p-assign @3.10-3.11 (ident "x")))))
(e-call @5.5-5.14
(e-lookup-local @5.5-5.6
(p-assign @3.5-3.6 (ident "f")))
(e-tuple @5.7-5.13
(elems
(e-int @5.8-5.9 (value "1"))
(e-int @5.11-5.12 (value "2"))))))
(e-num @5.8-5.9 (value "1"))
(e-num @5.11-5.12 (value "2"))))))
~~~
# TYPES
~~~clojure

View file

@ -38,7 +38,7 @@ NO CHANGE
(elems
(e-tuple @1.2-1.10
(elems
(e-int @1.3-1.4 (value "1"))
(e-num @1.3-1.4 (value "1"))
(e-string @1.6-1.9
(e-literal @1.7-1.8 (string "a")))))
(e-tuple @1.12-1.22

View file

@ -34,7 +34,7 @@ NO CHANGE
(args
(p-underscore @1.2-1.3)
(p-underscore @1.5-1.6))
(e-int @1.8-1.10 (value "42")))
(e-num @1.8-1.10 (value "42")))
~~~
# TYPES
~~~clojure

View file

@ -63,13 +63,34 @@ foo =
(can-ir
(d-let
(p-assign @3.1-3.4 (ident "foo"))
(e-runtime-error (tag "expr_not_canonicalized"))))
(e-runtime-error (tag "expr_not_canonicalized")))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt @3.1-3.4 (type "Error")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @3.7-3.15 (type "Error"))))
~~~

View file

@ -26,7 +26,7 @@ NO CHANGE
~~~
# CANONICALIZE
~~~clojure
(e-int @1.1-1.3 (value "42"))
(e-num @1.1-1.3 (value "42"))
~~~
# TYPES
~~~clojure

View file

@ -62,13 +62,34 @@ foo =
(can-ir
(d-let
(p-assign @3.1-3.4 (ident "foo"))
(e-runtime-error (tag "expr_not_canonicalized"))))
(e-runtime-error (tag "expr_not_canonicalized")))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt @3.1-3.4 (type "Error")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @3.10-3.12 (type "Error"))))
~~~

View file

@ -112,17 +112,24 @@ main! = |_| {
(s-let @8.5-8.54
(p-assign @8.5-8.11 (ident "result"))
(e-call @8.14-8.54
(e-lookup-external @8.14-8.23
(module-idx "1")
(target-node-idx "0"))
(e-string @8.24-8.53
(e-literal @8.25-8.52 (string "Hello from external module!")))))
(e-call @9.5-9.25
(e-lookup-external @9.5-9.17
(module-idx "0")
(target-node-idx "0"))
(e-lookup-local @9.18-9.24
(p-assign @8.5-8.11 (ident "result")))))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err"))))
(s-import @3.1-3.17 (module "pf.Stdout") (qualifier "pf")
(exposes))
(s-import @4.1-4.17 (module "json.Json") (qualifier "json")
@ -133,6 +140,14 @@ main! = |_| {
(inferred-types
(defs
(patt @6.1-6.6 (type "_arg -> _ret")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @6.9-10.2 (type "_arg -> _ret"))))
~~~

View file

@ -12,7 +12,19 @@ fib = |n| if n <= 1 n else fib(n - 1) + fib(n - 2)
# EXPECTED
NIL
# PROBLEMS
NIL
**INVALID IF CONDITION**
This `if` condition needs to be a _Bool_:
**fib_module.md:3:14:**
```roc
fib = |n| if n <= 1 n else fib(n - 1) + fib(n - 2)
```
^^^^^^
Right now, it has the type:
_Num(_size)_
Every `if` condition must evaluate to a _Bool_either `True` or `False`.
# TOKENS
~~~zig
KwModule(1:1-1:7),OpenSquare(1:8-1:9),LowerIdent(1:9-1:12),CloseSquare(1:12-1:13),
@ -70,31 +82,48 @@ NO CHANGE
(e-binop @3.14-3.20 (op "le")
(e-lookup-local @3.14-3.15
(p-assign @3.8-3.9 (ident "n")))
(e-int @3.19-3.20 (value "1")))
(e-num @3.19-3.20 (value "1")))
(e-lookup-local @3.21-3.22
(p-assign @3.8-3.9 (ident "n")))))
(if-else
(e-binop @3.28-3.51 (op "add")
(e-call @3.28-3.38
(e-lookup-local @3.28-3.31
(p-assign @3.1-3.4 (ident "fib")))
(e-binop @3.32-3.37 (op "sub")
(e-lookup-local @3.32-3.33
(p-assign @3.8-3.9 (ident "n")))
(e-int @3.36-3.37 (value "1"))))
(e-num @3.36-3.37 (value "1"))))
(e-call @3.41-3.51
(e-lookup-local @3.41-3.44
(p-assign @3.1-3.4 (ident "fib")))
(e-binop @3.45-3.50 (op "sub")
(e-lookup-local @3.45-3.46
(p-assign @3.8-3.9 (ident "n")))
(e-int @3.49-3.50 (value "2")))))))))))
(e-num @3.49-3.50 (value "2"))))))))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt @3.1-3.4 (type "Num(_size) -> Num(_size2)")))
(patt @3.1-3.4 (type "Error -> Error")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @3.7-3.51 (type "Num(_size) -> Num(_size2)"))))
(expr @3.7-3.51 (type "Error -> Error"))))
~~~

View file

@ -51,22 +51,42 @@ NO CHANGE
# CANONICALIZE
~~~clojure
(can-ir
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err"))))
(s-alias-decl @3.1-3.16
(ty-header @3.1-3.10 (name "FirstType"))
(ty @3.13-3.16 (name "U64")))
(ty-lookup @3.13-3.16 (name "U64") (builtin)))
(s-alias-decl @4.1-4.17
(ty-header @4.1-4.11 (name "SecondType"))
(ty @4.14-4.17 (name "Str")))
(ty-lookup @4.14-4.17 (name "Str") (builtin)))
(s-alias-decl @5.1-5.21
(ty-header @5.1-5.10 (name "ThirdType"))
(ty-apply @5.13-5.21 (symbol "List")
(ty @5.18-5.20 (name "U8")))))
(ty-apply @5.13-5.21 (name "List") (builtin)
(ty-lookup @5.18-5.20 (name "U8") (builtin)))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs)
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err")))))
(alias @3.1-3.16 (type "FirstType")
(ty-header @3.1-3.10 (name "FirstType")))
(alias @4.1-4.17 (type "SecondType")

View file

@ -75,11 +75,32 @@ NO CHANGE
~~~
# CANONICALIZE
~~~clojure
(can-ir (empty true))
(can-ir
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs)
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions))
~~~

View file

@ -579,11 +579,11 @@ NO CHANGE
(p-assign @60.1-60.2 (ident "h"))
(e-closure @60.5-110.2
(captures
(capture @60.1-60.2 (ident "h"))
(capture @89.5-89.6 (ident "a"))
(capture @105.5-105.6 (ident "a"))
(capture @99.5-99.6 (ident "a"))
(capture @94.4-94.5 (ident "a"))
(capture @105.5-105.6 (ident "a")))
(capture @89.5-89.6 (ident "a"))
(capture @60.1-60.2 (ident "h"))
(capture @94.4-94.5 (ident "a")))
(e-lambda @60.5-110.2
(args
(p-assign @60.6-60.7 (ident "x"))
@ -611,8 +611,6 @@ NO CHANGE
(s-let @69.2-72.3
(p-assign @69.2-69.4 (ident "h2"))
(e-call @69.7-72.3
(e-lookup-local @69.7-69.8
(p-assign @60.1-60.2 (ident "h")))
(e-lookup-local @70.3-70.4
(p-assign @60.6-60.7 (ident "x")))
(e-lookup-local @71.3-71.4
@ -675,44 +673,57 @@ NO CHANGE
(value
(e-lookup-local @108.8-108.9
(p-assign @105.5-105.6 (ident "a"))))))))))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err"))))
(s-alias-decl @14.1-23.11
(ty-header @14.1-14.5 (name "A")
(ty-args
(ty-var @14.3-14.4 (name "a"))))
(ty-var @14.8-14.9 (name "a")))
(ty-rigid-var @14.3-14.4 (name "a"))))
(ty-rigid-var @14.3-14.4 (name "a")))
(s-alias-decl @24.1-33.11
(ty-header @24.1-24.5 (name "B")
(ty-args
(ty-var @24.3-24.4 (name "b"))))
(ty-var @24.8-24.9 (name "b")))
(ty-rigid-var @24.3-24.4 (name "b"))))
(ty-rigid-var @24.3-24.4 (name "b")))
(s-alias-decl @35.1-41.2
(ty-header @35.1-38.2 (name "C")
(ty-args
(ty-var @36.2-36.3 (name "a"))
(ty-var @37.2-37.3 (name "b"))))
(ty-rigid-var @36.2-36.3 (name "a"))
(ty-rigid-var @37.2-37.3 (name "b"))))
(ty-tuple @38.5-41.2
(ty-var @39.2-39.3 (name "a"))
(ty-var @40.2-40.3 (name "b"))))
(ty-rigid-var @36.2-36.3 (name "a"))
(ty-rigid-var @37.2-37.3 (name "b"))))
(s-alias-decl @42.1-48.2
(ty-header @42.1-45.2 (name "D")
(ty-args
(ty-var @43.2-43.3 (name "a"))
(ty-var @44.2-44.3 (name "b"))))
(ty-apply @45.5-48.2 (symbol "C")
(ty-var @46.2-46.3 (name "a"))
(ty-var @47.2-47.3 (name "b"))))
(ty-rigid-var @43.2-43.3 (name "a"))
(ty-rigid-var @44.2-44.3 (name "b"))))
(ty-apply @45.5-48.2 (name "C") (local)
(ty-rigid-var @43.2-43.3 (name "a"))
(ty-rigid-var @44.2-44.3 (name "b"))))
(s-alias-decl @49.1-52.2
(ty-header @49.1-49.2 (name "E"))
(ty-record @49.5-52.2
(field (field "a")
(ty @50.6-50.9 (name "Str")))
(ty-lookup @50.6-50.9 (name "Str") (builtin)))
(field (field "b")
(ty @51.6-51.9 (name "Str")))))
(ty-lookup @51.6-51.9 (name "Str") (builtin)))))
(s-alias-decl @53.1-56.2
(ty-header @53.1-53.2 (name "F"))
(ty-tag-union @53.5-56.2
(ty @54.2-54.3 (name "A"))
(ty @55.2-55.3 (name "B"))))
(tag_name @54.2-54.3 (name "A"))
(tag_name @55.2-55.3 (name "B"))))
(s-import @4.1-7.2 (module "I1")
(exposes
(exposed (name "I11") (wildcard false))
@ -723,8 +734,8 @@ NO CHANGE
(exposed (name "I22") (alias "Ias2") (wildcard false))))
(s-type-anno @58.1-58.42 (name "g")
(ty-fn @58.5-58.11 (effectful false)
(ty-var @58.5-58.6 (name "e"))
(ty-var @58.10-58.11 (name "e")))
(ty-rigid-var @58.5-58.6 (name "e"))
(ty-rigid-var @58.5-58.6 (name "e")))
(where
(alias @58.18-58.29 (module-of "e") (ident "A"))
(alias @58.31-58.42 (module-of "e") (ident "B"))))
@ -735,30 +746,37 @@ NO CHANGE
~~~clojure
(inferred-types
(defs
(patt @60.1-60.2 (type "[Z1((field, field2)), Z2(c, d), Z3(f), Z4(List(elem))]others, [Z1((field3, field4)), Z2(i, j), Z3(k), Z4(List(elem2))]others2 -> _ret")))
(patt @60.1-60.2 (type "[Z1((Error, Error)), Z2(Error, Error), Z3(c), Z4(List(Error))]d, [Z1((Error, Error)), Z2(Error, Error), Z3(c), Z4(List(Error))]d -> Error")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err")))))
(alias @14.1-23.11 (type "A(a)")
(ty-header @14.1-14.5 (name "A")
(ty-args
(ty-var @14.3-14.4 (name "a")))))
(ty-rigid-var @14.3-14.4 (name "a")))))
(alias @24.1-33.11 (type "B(b)")
(ty-header @24.1-24.5 (name "B")
(ty-args
(ty-var @24.3-24.4 (name "b")))))
(ty-rigid-var @24.3-24.4 (name "b")))))
(alias @35.1-41.2 (type "C(a, b)")
(ty-header @35.1-38.2 (name "C")
(ty-args
(ty-var @36.2-36.3 (name "a"))
(ty-var @37.2-37.3 (name "b")))))
(ty-rigid-var @36.2-36.3 (name "a"))
(ty-rigid-var @37.2-37.3 (name "b")))))
(alias @42.1-48.2 (type "D(a, b)")
(ty-header @42.1-45.2 (name "D")
(ty-args
(ty-var @43.2-43.3 (name "a"))
(ty-var @44.2-44.3 (name "b")))))
(ty-rigid-var @43.2-43.3 (name "a"))
(ty-rigid-var @44.2-44.3 (name "b")))))
(alias @49.1-52.2 (type "E")
(ty-header @49.1-49.2 (name "E")))
(alias @53.1-56.2 (type "F")
(ty-header @53.1-53.2 (name "F"))))
(expressions
(expr @60.5-110.2 (type "[Z1((field, field2)), Z2(c, d), Z3(f), Z4(List(elem))]others, [Z1((field3, field4)), Z2(i, j), Z3(k), Z4(List(elem2))]others2 -> _ret"))))
(expr @60.5-110.2 (type "[Z1((Error, Error)), Z2(Error, Error), Z3(c), Z4(List(Error))]d, [Z1((Error, Error)), Z2(Error, Error), Z3(c), Z4(List(Error))]d -> Error"))))
~~~

View file

@ -72,11 +72,32 @@ NO CHANGE
~~~
# CANONICALIZE
~~~clojure
(can-ir (empty true))
(can-ir
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs)
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions))
~~~

View file

@ -53,10 +53,23 @@ NO CHANGE
(can-ir
(d-let
(p-assign @6.1-6.2 (ident "a"))
(e-int @6.5-6.8 (value "97")))
(e-num @6.5-6.8 (value "97")))
(d-let
(p-assign @7.1-7.2 (ident "b"))
(e-int @7.5-7.8 (value "97"))))
(e-num @7.5-7.8 (value "97")))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
@ -64,6 +77,14 @@ NO CHANGE
(defs
(patt @6.1-6.2 (type "Num(_size)"))
(patt @7.1-7.2 (type "Num(_size)")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @6.5-6.8 (type "Num(_size)"))
(expr @7.5-7.8 (type "Num(_size)"))))

View file

@ -89,11 +89,32 @@ NO CHANGE
~~~
# CANONICALIZE
~~~clojure
(can-ir (empty true))
(can-ir
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs)
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions))
~~~

View file

@ -116,11 +116,32 @@ NO CHANGE
~~~
# CANONICALIZE
~~~clojure
(can-ir (empty true))
(can-ir
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs)
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions))
~~~

View file

@ -81,11 +81,32 @@ app [
~~~
# CANONICALIZE
~~~clojure
(can-ir (empty true))
(can-ir
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs)
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions))
~~~

View file

@ -688,11 +688,11 @@ h = |x, y| {
(p-assign @60.1-60.2 (ident "h"))
(e-closure @60.5-110.2
(captures
(capture @60.1-60.2 (ident "h"))
(capture @89.5-89.6 (ident "a"))
(capture @105.5-105.6 (ident "a"))
(capture @99.5-99.6 (ident "a"))
(capture @94.4-94.5 (ident "a"))
(capture @105.5-105.6 (ident "a")))
(capture @89.5-89.6 (ident "a"))
(capture @60.1-60.2 (ident "h"))
(capture @94.4-94.5 (ident "a")))
(e-lambda @60.5-110.2
(args
(p-assign @60.6-60.7 (ident "x"))
@ -720,8 +720,6 @@ h = |x, y| {
(s-let @69.2-72.3
(p-assign @69.2-69.4 (ident "h2"))
(e-call @69.7-72.3
(e-lookup-local @69.7-69.8
(p-assign @60.1-60.2 (ident "h")))
(e-lookup-local @70.3-70.4
(p-assign @60.6-60.7 (ident "x")))
(e-lookup-local @71.3-71.4
@ -784,44 +782,57 @@ h = |x, y| {
(value
(e-lookup-local @108.8-108.9
(p-assign @105.5-105.6 (ident "a"))))))))))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err"))))
(s-alias-decl @14.1-23.11
(ty-header @14.1-14.5 (name "A")
(ty-args
(ty-var @14.3-14.4 (name "a"))))
(ty-var @14.8-14.9 (name "a")))
(ty-rigid-var @14.3-14.4 (name "a"))))
(ty-rigid-var @14.3-14.4 (name "a")))
(s-alias-decl @24.1-33.11
(ty-header @24.1-24.5 (name "B")
(ty-args
(ty-var @24.3-24.4 (name "b"))))
(ty-var @24.8-24.9 (name "b")))
(ty-rigid-var @24.3-24.4 (name "b"))))
(ty-rigid-var @24.3-24.4 (name "b")))
(s-alias-decl @35.1-41.2
(ty-header @35.1-38.2 (name "C")
(ty-args
(ty-var @36.2-36.3 (name "a"))
(ty-var @37.2-37.3 (name "b"))))
(ty-rigid-var @36.2-36.3 (name "a"))
(ty-rigid-var @37.2-37.3 (name "b"))))
(ty-tuple @38.5-41.2
(ty-var @39.2-39.3 (name "a"))
(ty-var @40.2-40.3 (name "b"))))
(ty-rigid-var @36.2-36.3 (name "a"))
(ty-rigid-var @37.2-37.3 (name "b"))))
(s-alias-decl @42.1-48.2
(ty-header @42.1-45.2 (name "D")
(ty-args
(ty-var @43.2-43.3 (name "a"))
(ty-var @44.2-44.3 (name "b"))))
(ty-apply @45.5-48.2 (symbol "C")
(ty-var @46.2-46.3 (name "a"))
(ty-var @47.2-47.3 (name "b"))))
(ty-rigid-var @43.2-43.3 (name "a"))
(ty-rigid-var @44.2-44.3 (name "b"))))
(ty-apply @45.5-48.2 (name "C") (local)
(ty-rigid-var @43.2-43.3 (name "a"))
(ty-rigid-var @44.2-44.3 (name "b"))))
(s-alias-decl @49.1-52.2
(ty-header @49.1-49.2 (name "E"))
(ty-record @49.5-52.2
(field (field "a")
(ty @50.6-50.9 (name "Str")))
(ty-lookup @50.6-50.9 (name "Str") (builtin)))
(field (field "b")
(ty @51.6-51.9 (name "Str")))))
(ty-lookup @51.6-51.9 (name "Str") (builtin)))))
(s-alias-decl @53.1-56.2
(ty-header @53.1-53.2 (name "F"))
(ty-tag-union @53.5-56.2
(ty @54.2-54.3 (name "A"))
(ty @55.2-55.3 (name "B"))))
(tag_name @54.2-54.3 (name "A"))
(tag_name @55.2-55.3 (name "B"))))
(s-import @4.1-7.2 (module "I1")
(exposes
(exposed (name "I11") (wildcard false))
@ -832,8 +843,8 @@ h = |x, y| {
(exposed (name "I22") (alias "Ias2") (wildcard false))))
(s-type-anno @58.1-58.42 (name "g")
(ty-fn @58.5-58.11 (effectful false)
(ty-var @58.5-58.6 (name "e"))
(ty-var @58.10-58.11 (name "e")))
(ty-rigid-var @58.5-58.6 (name "e"))
(ty-rigid-var @58.5-58.6 (name "e")))
(where
(alias @58.18-58.29 (module-of "e") (ident "A"))
(alias @58.31-58.42 (module-of "e") (ident "B"))))
@ -844,30 +855,37 @@ h = |x, y| {
~~~clojure
(inferred-types
(defs
(patt @60.1-60.2 (type "[Z1((field, field2)), Z2(c, d), Z3(f), Z4(List(elem))]others, [Z1((field3, field4)), Z2(i, j), Z3(k), Z4(List(elem2))]others2 -> _ret")))
(patt @60.1-60.2 (type "[Z1((Error, Error)), Z2(Error, Error), Z3(c), Z4(List(Error))]d, [Z1((Error, Error)), Z2(Error, Error), Z3(c), Z4(List(Error))]d -> Error")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err")))))
(alias @14.1-23.11 (type "A(a)")
(ty-header @14.1-14.5 (name "A")
(ty-args
(ty-var @14.3-14.4 (name "a")))))
(ty-rigid-var @14.3-14.4 (name "a")))))
(alias @24.1-33.11 (type "B(b)")
(ty-header @24.1-24.5 (name "B")
(ty-args
(ty-var @24.3-24.4 (name "b")))))
(ty-rigid-var @24.3-24.4 (name "b")))))
(alias @35.1-41.2 (type "C(a, b)")
(ty-header @35.1-38.2 (name "C")
(ty-args
(ty-var @36.2-36.3 (name "a"))
(ty-var @37.2-37.3 (name "b")))))
(ty-rigid-var @36.2-36.3 (name "a"))
(ty-rigid-var @37.2-37.3 (name "b")))))
(alias @42.1-48.2 (type "D(a, b)")
(ty-header @42.1-45.2 (name "D")
(ty-args
(ty-var @43.2-43.3 (name "a"))
(ty-var @44.2-44.3 (name "b")))))
(ty-rigid-var @43.2-43.3 (name "a"))
(ty-rigid-var @44.2-44.3 (name "b")))))
(alias @49.1-52.2 (type "E")
(ty-header @49.1-49.2 (name "E")))
(alias @53.1-56.2 (type "F")
(ty-header @53.1-53.2 (name "F"))))
(expressions
(expr @60.5-110.2 (type "[Z1((field, field2)), Z2(c, d), Z3(f), Z4(List(elem))]others, [Z1((field3, field4)), Z2(i, j), Z3(k), Z4(List(elem2))]others2 -> _ret"))))
(expr @60.5-110.2 (type "[Z1((Error, Error)), Z2(Error, Error), Z3(c), Z4(List(Error))]d, [Z1((Error, Error)), Z2(Error, Error), Z3(c), Z4(List(Error))]d -> Error"))))
~~~

View file

@ -78,11 +78,32 @@ b! : Str => Str
~~~
# CANONICALIZE
~~~clojure
(can-ir (empty true))
(can-ir
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs)
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions))
~~~

View file

@ -59,10 +59,23 @@ b = 'a'
(can-ir
(d-let
(p-assign @6.1-6.2 (ident "a"))
(e-int @6.5-6.8 (value "97")))
(e-num @6.5-6.8 (value "97")))
(d-let
(p-assign @7.1-7.2 (ident "b"))
(e-int @7.5-7.8 (value "97"))))
(e-num @7.5-7.8 (value "97")))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
@ -70,6 +83,14 @@ b = 'a'
(defs
(patt @6.1-6.2 (type "Num(_size)"))
(patt @7.1-7.2 (type "Num(_size)")))
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions
(expr @6.5-6.8 (type "Num(_size)"))
(expr @7.5-7.8 (type "Num(_size)"))))

View file

@ -100,11 +100,32 @@ b! : Str => Str
~~~
# CANONICALIZE
~~~clojure
(can-ir (empty true))
(can-ir
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Bool"))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "True"))
(tag_name @1.1-1.1 (name "False"))))
(s-nominal-decl @1.1-1.1
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))
(ty-tag-union @1.1-1.1
(tag_name @1.1-1.1 (name "Ok"))
(tag_name @1.1-1.1 (name "Err")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs)
(type_decls
(nominal @1.1-1.1 (type "Bool")
(ty-header @1.1-1.1 (name "Bool")))
(nominal @1.1-1.1 (type "Result(ok, err)")
(ty-header @1.1-1.1 (name "Result")
(ty-args
(ty-rigid-var @1.1-1.1 (name "ok"))
(ty-rigid-var @1.1-1.1 (name "err"))))))
(expressions))
~~~

Some files were not shown because too many files have changed in this diff Show more