diff --git a/src/canonicalize/Can.zig b/src/canonicalize/Can.zig index 9e20d6d8c3..13f05d23e7 100644 --- a/src/canonicalize/Can.zig +++ b/src/canonicalize/Can.zig @@ -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 diff --git a/src/check/Check.zig b/src/check/Check.zig index 11ae64d055..871dfd9a28 100644 --- a/src/check/Check.zig +++ b/src/check/Check.zig @@ -560,23 +560,25 @@ fn checkDef(self: *Self, def_idx: CIR.Def.Idx) std.mem.Allocator.Error!void { std.debug.assert(rank == self.var_pool.current_rank); const def = self.cir.store.getDef(def_idx); + const def_var = ModuleEnv.varFrom(def_idx); + const ptrn_var = ModuleEnv.varFrom(def.pattern); + const expr_var = ModuleEnv.varFrom(def.expr); // Check the pattern try self.checkPattern(def.pattern, rank, .no_expectation); - // Get the defs var slot - const def_var = ModuleEnv.varFrom(def_idx); - // Handle if there's an annotation associated with this def if (def.annotation) |anno_idx| { const annotation = self.cir.store.getAnnotation(anno_idx); self.anno_free_vars.items.clearRetainingCapacity(); try self.generateAnnoTypeInPlace(annotation.type_anno, .annotation); - const anno_var = ModuleEnv.varFrom(annotation.type_anno); // TODO: Duplicate anno var so if the body results in type mismatch, the // annotation isn't corrupted + // We can instantiate, but how do we deal with rigid vars? + // const anno_var = try self.instantiateVaPreserveRigids(ModuleEnv.varFrom(annotation.type_anno), Rank.generalized, .use_last_var); + const anno_var = ModuleEnv.varFrom(annotation.type_anno); _ = try self.checkExpr(def.expr, rank, .{ .expected = .{ .var_ = anno_var, .from_annotation = true }, @@ -585,12 +587,11 @@ fn checkDef(self: *Self, def_idx: CIR.Def.Idx) std.mem.Allocator.Error!void { _ = try self.checkExpr(def.expr, rank, .no_expectation); } - // Unify the def with its expression - _ = try self.unify(def_var, ModuleEnv.varFrom(def.expr), rank); + // Also unify the pattern with the expr - needed so lookups work correctly + _ = try self.unify(ptrn_var, expr_var, rank); - // Also unify the pattern with the def - needed so lookups work correctly - // TODO could we unify directly with the pattern elsewhere, to save a type var and unify() here? - _ = try self.unify(ModuleEnv.varFrom(def.pattern), def_var, rank); + // Set the def var to redirect to the pattern + _ = try self.types.setVarRedirect(def_var, ptrn_var); // Now that we are existing the scope, we must generalize then pop this rank try self.generalizer.generalize(&self.var_pool, rank); @@ -1161,392 +1162,6 @@ fn generateAnnoTypeInPlace(self: *Self, anno_idx: CIR.TypeAnno.Idx, ctx: GenType } } -/// The context use for free var generation -const FreeVarCtx = struct { - scratch: *base.Scratch(FreeVar), - start: usize, - mode: enum { flex, rigid }, - - pub fn sliceFreeVars(self: *const @This()) []FreeVar { - return self.scratch.items.items[self.start..]; - } -}; - -/// Given an annotation, generate the corrosponding type based on the CIR -/// -/// This function will write the type into the type var node at `anno_idx` -fn generateAnnoType(self: *Self, free_vars_ctx: FreeVarCtx, anno_idx: CIR.TypeAnno.Idx) std.mem.Allocator.Error!Var { - const trace = tracy.trace(@src()); - defer trace.end(); - - // First, check if we've seen this anno before - // This guards against recursive types - if (self.seen_annos.get(anno_idx)) |var_| { - return var_; - } - - // Get the annotation - const anno = self.cir.store.getTypeAnno(anno_idx); - const anno_region = self.cir.store.getNodeRegion(ModuleEnv.nodeIdxFrom(anno_idx)); - - // Create a placeholder and put it into the seen variables - const placeholder_var = try self.fresh(Rank.generalized, anno_region); - try self.seen_annos.put(anno_idx, placeholder_var); - - const anno_var = blk: { - switch (anno) { - .rigid_var => |rigid| { - const var_ = inner_blk: { - switch (free_vars_ctx.mode) { - .rigid => break :inner_blk try self.freshFromContent(.{ .rigid_var = rigid.name }, Rank.generalized, anno_region), - .flex => break :inner_blk try self.fresh(Rank.generalized, anno_region), - } - }; - try free_vars_ctx.scratch.append(self.gpa, .{ .ident = rigid.name, .var_ = var_ }); - break :blk var_; - }, - .rigid_var_lookup => |rigid_lookup| { - const rigid_ref = self.cir.store.getTypeAnno(rigid_lookup.ref); - std.debug.assert(rigid_ref == .rigid_var); - const rigid = rigid_ref.rigid_var; - for (free_vars_ctx.sliceFreeVars()) |cached_var| { - if (cached_var.ident.idx == rigid.name.idx) { - break :blk try self.freshRedirect(cached_var.var_, anno_region); - } - } - unreachable; - }, - .underscore => { - break :blk try self.fresh(Rank.generalized, anno_region); - }, - .lookup => |lookup| { - switch (lookup.base) { - .builtin => |builtin_type| { - break :blk try self.generateBuiltinTypeInstance(lookup.name, builtin_type, &.{}, anno_region); - }, - .local => |local| { - break :blk try self.generateTypeDeclInstance(&.{}, anno_region, local.decl_idx); - }, - .external => |_| { - @panic("TODO: External type lookups"); - // // TODO External - // const resolved_external = try self.resolveVarFromExternal(external.module_idx, external.target_node_idx) orelse { - // // TODO? - // break :blk try self.freshFromContent(.err, Rank.generalized, anno_region); - // }; - // break :blk try self.instantiateVarAnon(resolved_external.local_var, .{ .explicit = anno_region }); - }, - } - }, - .apply => |a| { - const scratch_vars_top = self.scratch_vars.top(); - defer self.scratch_vars.clearFrom(scratch_vars_top); - - // Generate the types for the arguments - const anno_args = self.cir.store.sliceTypeAnnos(a.args); - for (anno_args) |anno_arg| { - try self.scratch_vars.append(self.gpa, try self.generateAnnoType( - free_vars_ctx, - anno_arg, - )); - } - const args_var_slice = self.scratch_vars.sliceFromStart(scratch_vars_top); - - switch (a.base) { - .builtin => |builtin_type| { - break :blk try self.generateBuiltinTypeInstance(a.name, builtin_type, args_var_slice, anno_region); - }, - .local => |local| { - break :blk try self.generateTypeDeclInstance(args_var_slice, anno_region, local.decl_idx); - }, - .external => |_| { - @panic("TODO: External type apply"); - // // TODO External - // const resolved_external = try self.resolveVarFromExternal(external.module_idx, external.target_node_idx) orelse { - // // TODO? - // break :blk try self.freshFromContent(.err, Rank.generalized, anno_region); - // }; - // break :blk try self.instantiateVarAnon(resolved_external.local_var, .{ .explicit = anno_region }); - }, - } - }, - .@"fn" => |func| { - const scratch_vars_top = self.scratch_vars.top(); - defer self.scratch_vars.clearFrom(scratch_vars_top); - - const args_anno_slice = self.cir.store.sliceTypeAnnos(func.args); - for (args_anno_slice) |arg_anno_idx| { - try self.scratch_vars.append(self.gpa, try self.generateAnnoType( - free_vars_ctx, - arg_anno_idx, - )); - } - const args_var_slice = self.scratch_vars.sliceFromStart(scratch_vars_top); - - const fn_ret_var = try self.generateAnnoType(free_vars_ctx, func.ret); - - const fn_type = inner_blk: { - if (func.effectful) { - break :inner_blk try self.types.mkFuncEffectful(args_var_slice, fn_ret_var); - } else { - break :inner_blk try self.types.mkFuncPure(args_var_slice, fn_ret_var); - } - }; - break :blk try self.freshFromContent(fn_type, Rank.generalized, anno_region); - }, - .tag_union => |tag_union| { - const scratch_tags_top = self.scratch_tags.top(); - defer self.scratch_tags.clearFrom(scratch_tags_top); - - const tag_anno_slices = self.cir.store.sliceTypeAnnos(tag_union.tags); - for (tag_anno_slices) |tag_anno_idx| { - // Get the tag anno - const tag_type_anno = self.cir.store.getTypeAnno(tag_anno_idx); - std.debug.assert(tag_type_anno == .tag); - const tag = tag_type_anno.tag; - - const scratch_vars_top = self.scratch_vars.top(); - defer self.scratch_vars.clearFrom(scratch_vars_top); - - // Generate the types for each tag arg - const tag_anno_args_slice = self.cir.store.sliceTypeAnnos(tag.args); - for (tag_anno_args_slice) |tag_arg_idx| { - try self.scratch_vars.append(self.gpa, try self.generateAnnoType( - free_vars_ctx, - tag_arg_idx, - )); - } - const tag_vars_slice = self.scratch_vars.sliceFromStart(scratch_vars_top); - - // Add the processed tag to scratch - try self.scratch_tags.append(self.gpa, try self.types.mkTag( - tag.name, - tag_vars_slice, - )); - } - - // Get the slice of tags - const tags_slice = self.scratch_tags.sliceFromStart(scratch_tags_top); - std.mem.sort(types_mod.Tag, tags_slice, self.cir.common.getIdentStore(), comptime types_mod.Tag.sortByNameAsc); - - // Process the ext if it exists. Absence means it's a closed union - const ext_var = inner_blk: { - if (tag_union.ext) |ext_anno_idx| { - break :inner_blk try self.generateAnnoType(free_vars_ctx, ext_anno_idx); - } else { - break :inner_blk try self.freshFromContent(.{ .structure = .empty_tag_union }, Rank.generalized, anno_region); - } - }; - - // Create the type for the anno in the store - break :blk try self.freshFromContent(try self.types.mkTagUnion(tags_slice, ext_var), Rank.generalized, anno_region); - }, - .tag => { - // This indicates a malformed type annotation. Tags should only - // exist as direct childen of tag_unions - std.debug.assert(false); - break :blk try self.freshFromContent(.err, Rank.generalized, anno_region); - }, - .record => |rec| { - const scratch_record_fields_top = self.scratch_record_fields.top(); - defer self.scratch_record_fields.clearFrom(scratch_record_fields_top); - - const recs_anno_slice = self.cir.store.sliceAnnoRecordFields(rec.fields); - - for (recs_anno_slice) |rec_anno_idx| { - const rec_field = self.cir.store.getAnnoRecordField(rec_anno_idx); - - const record_field_var = try self.generateAnnoType(free_vars_ctx, rec_field.ty); - - // Add the processed tag to scratch - try self.scratch_record_fields.append(self.gpa, types_mod.RecordField{ - .name = rec_field.name, - .var_ = record_field_var, - }); - } - - // Get the slice of record_fields - const record_fields_slice = self.scratch_record_fields.sliceFromStart(scratch_record_fields_top); - std.mem.sort(types_mod.RecordField, record_fields_slice, self.cir.common.getIdentStore(), comptime types_mod.RecordField.sortByNameAsc); - const fields_type_range = try self.types.appendRecordFields(record_fields_slice); - - // Process the ext if it exists. Absence means it's a closed union - // TODO: Capture ext in record field CIR - // const ext_var = inner_blk: { - // if (rec.ext) |ext_anno_idx| { - // try self.generateAnnoType(rigid_vars_ctx, ext_anno_idx); - // break :inner_blk ModuleEnv.varFrom(ext_anno_idx); - // } else { - // break :inner_blk try self.freshFromContent(.{ .structure = .empty_record }, Rank.generalized, anno_region); - // } - // }; - const ext_var = try self.freshFromContent(.{ .structure = .empty_record }, Rank.generalized, anno_region); - - // Create the type for the anno in the store - break :blk try self.freshFromContent( - .{ .structure = types_mod.FlatType{ .record = .{ - .fields = fields_type_range, - .ext = ext_var, - } } }, - Rank.generalized, - anno_region, - ); - }, - .tuple => |tuple| { - const scratch_vars_top = self.scratch_vars.top(); - defer self.scratch_vars.clearFrom(scratch_vars_top); - - const elems_anno_slice = self.cir.store.sliceTypeAnnos(tuple.elems); - for (elems_anno_slice) |arg_anno_idx| { - try self.scratch_vars.append(self.gpa, try self.generateAnnoType( - free_vars_ctx, - arg_anno_idx, - )); - } - - const elems_range = try self.types.appendVars( - self.scratch_vars.sliceFromStart(scratch_vars_top), - ); - break :blk try self.freshFromContent(.{ .structure = .{ .tuple = .{ .elems = elems_range } } }, Rank.generalized, anno_region); - }, - .parens => |parens| { - break :blk try self.generateAnnoType(free_vars_ctx, parens.anno); - }, - .malformed => { - break :blk try self.freshFromContent(.err, Rank.generalized, anno_region); - }, - } - }; - - try self.types.setVarRedirect(placeholder_var, anno_var); - return placeholder_var; -} - -/// Generate a type variable from the provided type declaration, substituting -/// the type arguments in the declaration with the type arguments provided -/// -/// Steps: -/// 1. Lookup the provided declaration -/// 2. Assert arities from the decl match the actual provided args from the annotation -/// 3. Iterate over the decl args & the actual args together -/// * Build up a substituion map of decl_arg -> actual_arg -/// 4. Generate the instance of the decl type using the substitution map -fn generateTypeDeclInstance( - self: *Self, - anno_args: []Var, - anno_region: Region, - decl_idx: CIR.Statement.Idx, -) std.mem.Allocator.Error!Var { - const decl_free_vars_top = self.decl_free_vars.top(); - defer self.decl_free_vars.clearFrom(decl_free_vars_top); - - const decl = self.cir.store.getStatement(decl_idx); - switch (decl) { - .s_alias_decl => |alias| { - // Get the type header's args - const header = self.cir.store.getTypeHeader(alias.header); - const header_args = self.cir.store.sliceTypeAnnos(header.args); - - // Then check arity - if (header_args.len != anno_args.len) { - _ = try self.problems.appendProblem(self.gpa, .{ .type_apply_mismatch_arities = .{ - .type_name = header.name, - .region = anno_region, - .num_expected_args = @intCast(header_args.len), - .num_actual_args = @intCast(anno_args.len), - } }); - - // Set error and return - return try self.freshFromContent(.err, Rank.generalized, anno_region); - } - - // Next, generate the provided arg types and build the map of rigid variables in the header - for (header_args, anno_args) |header_arg_idx, anno_arg_var| { - const header_arg = self.cir.store.getTypeAnno(header_arg_idx); - switch (header_arg) { - .rigid_var => |rigid| { - // Then, if it is a rigid var, add to our mapping - try self.decl_free_vars.append(self.gpa, .{ .ident = rigid.name, .var_ = anno_arg_var }); - }, - else => {}, - } - } - - // Now we have a built of list of rigid variables for the decl lhs (header). - // With this in hand, we can now generate the type for the lhs (body). - const backing_var = try self.generateAnnoType( - FreeVarCtx{ .scratch = &self.decl_free_vars, .start = decl_free_vars_top, .mode = .rigid }, - alias.anno, - ); - - return try self.freshFromContent(try self.types.mkAlias( - .{ .ident_idx = header.name }, - backing_var, - anno_args, - ), Rank.generalized, anno_region); - }, - .s_nominal_decl => |nominal| { - // Get the type header's args - const header = self.cir.store.getTypeHeader(nominal.header); - const header_args = self.cir.store.sliceTypeAnnos(header.args); - - // Then check arity - if (header_args.len != anno_args.len) { - _ = try self.problems.appendProblem(self.gpa, .{ .type_apply_mismatch_arities = .{ - .type_name = header.name, - .region = anno_region, - .num_expected_args = @intCast(header_args.len), - .num_actual_args = @intCast(anno_args.len), - } }); - - // Set error and return - return try self.freshFromContent(.err, Rank.generalized, anno_region); - } - - // Next, generate the provided arg types and build the map of rigid variables in the header - for (header_args, anno_args) |header_arg_idx, anno_arg_var| { - const header_arg = self.cir.store.getTypeAnno(header_arg_idx); - switch (header_arg) { - .rigid_var => |rigid| { - // Then, if it is a rigid var, add to our mapping - try self.decl_free_vars.append(self.gpa, .{ .ident = rigid.name, .var_ = anno_arg_var }); - }, - else => {}, - } - } - - // Now we have a built of list of rigid variables for the decl lhs (header). - // With this in hand, we can now generate the type for the lhs (body). - // - // This is necessary because even though nominal types unify only by - // name, args, and origin module, if the rhs of the nominal type is - // invalid (ie an .err) then that error must propgate "through" the - // nominal type. So the whole thing must be materialized here. - // - // TODO: Should this be flex instead of rigid? - const backing_var = try self.generateAnnoType( - FreeVarCtx{ .scratch = &self.decl_free_vars, .start = decl_free_vars_top, .mode = .rigid }, - nominal.anno, - ); - - return try self.freshFromContent(try self.types.mkNominal( - .{ .ident_idx = header.name }, - backing_var, - anno_args, - self.common_idents.module_name, - ), Rank.generalized, anno_region); - }, - .s_runtime_error => { - return try self.freshFromContent(.err, Rank.generalized, anno_region); - }, - else => { - // This indicates a malformed type anno, where the decl is not a real decl - std.debug.assert(false); - return try self.freshFromContent(.err, Rank.generalized, anno_region); - }, - } -} - /// Generate a type variable from the builtin /// /// Writes the resulting type into the slot at `ret_var` @@ -1672,7 +1287,132 @@ fn generateBuiltinTypeInstance( } } -// expr NEW // +// pattern // + +/// Check the types for the provided pattern +fn checkPattern(self: *Self, pattern_idx: CIR.Pattern.Idx, rank: types_mod.Rank, expected: Expected) std.mem.Allocator.Error!void { + const trace = tracy.trace(@src()); + defer trace.end(); + + const pattern = self.cir.store.getPattern(pattern_idx); + // const pattern_region = self.cir.store.getNodeRegion(ModuleEnv.nodeIdxFrom(pattern_idx)); + const pattern_var = ModuleEnv.varFrom(pattern_idx); + + switch (pattern) { + .assign => |_| { + // In the case of an assigned variable, set it to be a flex var initially. + // This will be refined based on how it's used. + try self.updateVar(pattern_var, .{ .flex_var = null }, rank); + }, + .underscore => |_| { + // Underscore can be anything + try self.updateVar(pattern_var, .{ .flex_var = null }, rank); + }, + // tuple // + .tuple => |tuple| { + // Check tuple elements + const elems_slice = self.cir.store.slicePatterns(tuple.patterns); + for (elems_slice) |single_elem_ptrn_idx| { + try self.checkPattern(single_elem_ptrn_idx, rank, .no_expectation); + } + + // Cast the elems idxs to vars (this works because Anno Idx are 1-1 with type Vars) + const elem_vars_slice = try self.types.appendVars(@ptrCast(elems_slice)); + + // Set the type in the store + try self.updateVar(pattern_var, .{ .structure = .{ + .tuple = .{ .elems = elem_vars_slice }, + } }, rank); + }, + else => { + // TODO + }, + } + + // If we were provided with an expected type, unify against it + switch (expected) { + .no_expectation => {}, + .expected => |expected_type| { + if (expected_type.from_annotation) { + _ = try self.unifyFromAnno(expected_type.var_, pattern_var, rank); + } else { + _ = try self.unify(expected_type.var_, pattern_var, rank); + } + }, + } +} + +// pattern OLD // + +// /// Check the types for the provided pattern +// pub fn checkPatternaself: *Self, pattern_idx: CIR.Pattern.Idx) std.mem.Allocator.Error!void { +// const trace = tracy.trace(@src()); +// defer trace.end(); + +// const pattern = self.cir.store.getPattern(pattern_idx); +// const pattern_region = self.cir.store.getNodeRegion(ModuleEnv.nodeIdxFrom(pattern_idx)); +// switch (pattern) { +// .nominal => |p| { +// const real_nominal_var = ModuleEnv.varFrom(p.nominal_type_decl); +// const pattern_backing_var = ModuleEnv.varFrom(p.backing_pattern); +// try self.checkNominal( +// ModuleEnv.varFrom(pattern_idx), +// pattern_region, +// pattern_backing_var, +// p.backing_type, +// real_nominal_var, +// ); +// }, +// .nominal_external => |p| { +// const resolved_external = try self.resolveVarFromExternal(p.module_idx, p.target_node_idx) orelse { +// // If we could not copy the type, set error and continue +// try self.types.setVarContent(ModuleEnv.varFrom(pattern_idx), .err); +// return; +// }; +// const pattern_backing_var = ModuleEnv.varFrom(p.backing_pattern); +// try self.checkNominal( +// ModuleEnv.varFrom(pattern_idx), +// pattern_region, +// pattern_backing_var, +// p.backing_type, +// resolved_external.local_var, +// ); +// }, +// .int_literal => |_| { +// // Integer literal patterns have their type constraints (bits_needed, sign_needed) +// // created during canonicalization. The type variable for this pattern was already +// // created with the appropriate num_unbound or int_unbound content. +// // When this pattern is unified with the match scrutinee, the numeric constraints +// // will be checked and produce NumberDoesNotFit or NegativeUnsignedInt errors +// // if there's a mismatch. +// }, +// .as => |p| { +// try self.checkPattern(p.pattern); +// }, +// .applied_tag => |p| { +// const args_slice = self.cir.store.slicePatterns(p.args); +// for (args_slice) |pat_idx| { +// try self.checkPattern(pat_idx); +// } +// }, +// .tuple => |p| { +// const args_slice = self.cir.store.slicePatterns(p.patterns); +// for (args_slice) |pat_idx| { +// try self.checkPattern(pat_idx); +// } +// }, +// .record_destructure => |p| { +// const destructs_slice = self.cir.store.sliceRecordDestructs(p.destructs); +// for (destructs_slice) |destruct_idx| { +// const destruct = self.cir.store.getRecordDestruct(destruct_idx); +// try self.checkPattern(destruct.kind.toPatternIdx()); +// } +// }, +// else => {}, +// } +// } + +// expr // pub const Expected = union(enum) { no_expectation, @@ -1871,7 +1611,6 @@ fn checkExpr(self: *Self, expr_idx: CIR.Expr.Idx, rank: types_mod.Rank, expected const elems_slice = self.cir.store.exprSlice(tuple.elems); for (elems_slice) |single_elem_expr_idx| { does_fx = try self.checkExpr(single_elem_expr_idx, rank, .no_expectation) or does_fx; - try self.scratch_vars.append(self.gpa, ModuleEnv.varFrom(single_elem_expr_idx)); } // Cast the elems idxs to vars (this works because Anno Idx are 1-1 with type Vars) @@ -2170,7 +1909,7 @@ fn checkExpr(self: *Self, expr_idx: CIR.Expr.Idx, rank: types_mod.Rank, expected // The expected type is an annotation and as such, // should never contain a flex var. If it did, that // would indicate that the annotation is malformed - std.debug.assert(expected_resolved_1.desc.content != .flex_var); + // std.debug.assert(expected_resolved_1.desc.content != .flex_var); // Skip any concrete arguments if (expected_resolved_1.desc.content != .rigid_var) { @@ -2320,7 +2059,6 @@ fn checkExpr(self: *Self, expr_idx: CIR.Expr.Idx, rank: types_mod.Rank, expected const func_args = self.types.sliceVars(func.args); if (func_args.len == call_arg_expr_idxs.len) { - // First, find all the "rigid" variables in a the function's type // and unify the matching corrosponding call arguments together. // @@ -2377,8 +2115,6 @@ fn checkExpr(self: *Self, expr_idx: CIR.Expr.Idx, rank: types_mod.Rank, expected // Check the function's arguments against the actual // called arguments, unifying each one for (func_args, call_arg_expr_idxs, 0..) |expected_arg_var, call_expr_idx, arg_index| { - does_fx = try self.checkExpr(call_expr_idx, rank, .no_expectation) or does_fx; - const unify_result = try self.unify(expected_arg_var, ModuleEnv.varFrom(call_expr_idx), rank); if (unify_result.isProblem()) { // Use the new error detail for bound type variable incompatibility @@ -2638,45 +2374,6 @@ fn checkExpr(self: *Self, expr_idx: CIR.Expr.Idx, rank: types_mod.Rank, expected return does_fx; } -// pattern // - -/// Check the types for the provided pattern -fn checkPattern(self: *Self, pattern_idx: CIR.Pattern.Idx, rank: types_mod.Rank, expected: Expected) std.mem.Allocator.Error!void { - const trace = tracy.trace(@src()); - defer trace.end(); - - const pattern = self.cir.store.getPattern(pattern_idx); - // const pattern_region = self.cir.store.getNodeRegion(ModuleEnv.nodeIdxFrom(pattern_idx)); - const pattern_var = ModuleEnv.varFrom(pattern_idx); - - switch (pattern) { - .assign => |_| { - // In the case of an assigned variable, set it to be a flex var initially. - // This will be refined based on how it's used. - try self.updateVar(pattern_var, .{ .flex_var = null }, rank); - }, - .underscore => |_| { - // Underscore can be anything - try self.updateVar(pattern_var, .{ .flex_var = null }, rank); - }, - else => { - // TODO - }, - } - - // If we were provided with an expected type, unify against it - switch (expected) { - .no_expectation => {}, - .expected => |expected_type| { - if (expected_type.from_annotation) { - _ = try self.unifyFromAnno(expected_type.var_, pattern_var, rank); - } else { - _ = try self.unify(expected_type.var_, pattern_var, rank); - } - }, - } -} - // if-else // /// Check the types for an if-else expr @@ -2942,704 +2639,6 @@ fn checkUnaryNotExpr(self: *Self, expr_idx: CIR.Expr.Idx, expr_region: Region, r return does_fx; } -// pattern OLD // - -// /// Check the types for the provided pattern -// pub fn checkPatternaself: *Self, pattern_idx: CIR.Pattern.Idx) std.mem.Allocator.Error!void { -// const trace = tracy.trace(@src()); -// defer trace.end(); - -// const pattern = self.cir.store.getPattern(pattern_idx); -// const pattern_region = self.cir.store.getNodeRegion(ModuleEnv.nodeIdxFrom(pattern_idx)); -// switch (pattern) { -// .nominal => |p| { -// const real_nominal_var = ModuleEnv.varFrom(p.nominal_type_decl); -// const pattern_backing_var = ModuleEnv.varFrom(p.backing_pattern); -// try self.checkNominal( -// ModuleEnv.varFrom(pattern_idx), -// pattern_region, -// pattern_backing_var, -// p.backing_type, -// real_nominal_var, -// ); -// }, -// .nominal_external => |p| { -// const resolved_external = try self.resolveVarFromExternal(p.module_idx, p.target_node_idx) orelse { -// // If we could not copy the type, set error and continue -// try self.types.setVarContent(ModuleEnv.varFrom(pattern_idx), .err); -// return; -// }; -// const pattern_backing_var = ModuleEnv.varFrom(p.backing_pattern); -// try self.checkNominal( -// ModuleEnv.varFrom(pattern_idx), -// pattern_region, -// pattern_backing_var, -// p.backing_type, -// resolved_external.local_var, -// ); -// }, -// .int_literal => |_| { -// // Integer literal patterns have their type constraints (bits_needed, sign_needed) -// // created during canonicalization. The type variable for this pattern was already -// // created with the appropriate num_unbound or int_unbound content. -// // When this pattern is unified with the match scrutinee, the numeric constraints -// // will be checked and produce NumberDoesNotFit or NegativeUnsignedInt errors -// // if there's a mismatch. -// }, -// .as => |p| { -// try self.checkPattern(p.pattern); -// }, -// .applied_tag => |p| { -// const args_slice = self.cir.store.slicePatterns(p.args); -// for (args_slice) |pat_idx| { -// try self.checkPattern(pat_idx); -// } -// }, -// .tuple => |p| { -// const args_slice = self.cir.store.slicePatterns(p.patterns); -// for (args_slice) |pat_idx| { -// try self.checkPattern(pat_idx); -// } -// }, -// .record_destructure => |p| { -// const destructs_slice = self.cir.store.sliceRecordDestructs(p.destructs); -// for (destructs_slice) |destruct_idx| { -// const destruct = self.cir.store.getRecordDestruct(destruct_idx); -// try self.checkPattern(destruct.kind.toPatternIdx()); -// } -// }, -// else => {}, -// } -// } - -// // expr OLD // - -// /// Check the types for an exprexpression. Returns whether evaluating the expr might perform side effects. -// pub fn checkExpr(self: *Self, expr_idx: CIR.Expr.Idx) std.mem.Allocator.Error!bool { -// return self.checkExprWithExpected(expr_idx, null); -// } - -// /// Check expression with an optional expected type for bidirectional type checking -// pub fn checkExprWithExpected(self: *Self, expr_idx: CIR.Expr.Idx, expected_type: ?Var) std.mem.Allocator.Error!bool { -// return self.checkExprWithExpectedAndAnnotation(expr_idx, expected_type, false); -// } - -// fn checkExprWithExpectedAndAnnotation(self: *Self, expr_idx: CIR.Expr.Idx, expected_type: ?Var, from_annotation: bool) std.mem.Allocator.Error!bool { -// const does_fx = self.checkExprWithExpectedAndAnnotationHelp(expr_idx, expected_type, from_annotation); -// if (expected_type) |expected| { -// if (from_annotation) { -// _ = try self.unifyFromAnno(expected, ModuleEnv.varFrom(expr_idx)); -// } else { -// _ = try self.unify(expected, ModuleEnv.varFrom(expr_idx)); -// } -// } -// return does_fx; -// } - -// /// Do not use directly, use `checkExprWithExpectedAndAnnotation` -// /// -// /// Checks the types of an expression, optionally against -// fn checkExprWithExpectedAndAnnotationHelp(self: *Self, expr_idx: CIR.Expr.Idx, expected_type: ?Var, from_annotation: bool) std.mem.Allocator.Error!bool { -// const trace = tracy.trace(@src()); -// defer trace.end(); - -// const expr = self.cir.store.getExpr(expr_idx); -// const expr_var = ModuleEnv.varFrom(expr_idx); -// const expr_region = self.cir.store.getNodeRegion(ModuleEnv.nodeIdxFrom(expr_idx)); - -// var does_fx = false; // Does this expression potentially perform any side effects? -// switch (expr) { -// .e_int => |_| { -// // Integer literals have their type constraints (bits_needed, sign_needed) -// // created during canonicalization. Here we just need to ensure those -// // constraints will be checked when unified with expected types. -// // The type variable for this expression was already created with the -// // appropriate num_unbound or int_unbound content during canonicalization. - -// // If we have an expected type, unify immediately to constrain the literal -// if (expected_type) |expected| { -// const literal_var = @as(Var, @enumFromInt(@intFromEnum(expr_idx))); -// if (from_annotation) { -// _ = try self.unifyFromAnno(literal_var, expected); -// } else { -// _ = try self.unify(literal_var, expected); -// } -// } -// }, -// .e_num => |_| {}, -// .e_frac_f32 => |_| { -// // Fractional literals have their type constraints (fits_in_f32, fits_in_dec) -// // created during canonicalization. No additional checking needed here. -// }, -// .e_frac_f64 => |_| { -// // Fractional literals have their type constraints (fits_in_f32, fits_in_dec) -// // created during canonicalization. No additional checking needed here. -// }, -// .e_frac_dec => |_| { -// // Decimal literals are similar to frac_f64. -// }, -// .e_dec_small => |_| { -// // Small decimal literals are similar to frac_f64. -// }, -// .e_str_segment => |_| {}, -// .e_str => |_| {}, -// .e_lookup_local => |local| { -// // For lookups, we need to connect the lookup expression to the actual variable -// // The lookup expression should have the same type as the pattern it refers to -// const lookup_var = @as(Var, @enumFromInt(@intFromEnum(expr_idx))); -// const pattern_var = @as(Var, @enumFromInt(@intFromEnum(local.pattern_idx))); - -// _ = try self.unify(lookup_var, pattern_var); -// }, -// .e_lookup_external => |e| { -// const module_idx = @intFromEnum(e.module_idx); -// if (module_idx < self.other_modules.len) { -// const other_module_cir = self.other_modules[module_idx]; -// const other_module_env = other_module_cir; - -// // The idx of the expression in the other module -// const target_node_idx = @as(CIR.Node.Idx, @enumFromInt(e.target_node_idx)); - -// // Check if we've already copied this import -// const cache_key = ImportCacheKey{ -// .module_idx = e.module_idx, -// .node_idx = target_node_idx, -// }; - -// const copied_var = if (self.import_cache.get(cache_key)) |cached_var| -// // Reuse the previously copied type. -// cached_var -// else blk: { -// // First time importing this type - copy it and cache the result -// const imported_var = @as(Var, @enumFromInt(@intFromEnum(target_node_idx))); -// const new_copy = try self.copyVar(imported_var, other_module_env); -// try self.import_cache.put(self.gpa, cache_key, new_copy); -// break :blk new_copy; -// }; -// const instantiated_copy = try self.instantiateVarAnon(copied_var, .use_last_var); - -// // Unify our expression with the copied type -// const result = try self.unify(expr_var, instantiated_copy); -// if (result.isProblem()) { -// self.setProblemTypeMismatchDetail(result.problem, .{ -// .cross_module_import = .{ -// .import_region = expr_idx, -// .module_idx = e.module_idx, -// }, -// }); - -// try self.types.setVarContent(expr_var, .err); -// } -// } else { -// // Import not found -// try self.types.setVarContent(expr_var, .err); -// } -// }, -// .e_list => |list| { -// const elem_var = @as(Var, @enumFromInt(@intFromEnum(list.elem_var))); -// const elems = self.cir.store.exprSlice(list.elems); - -// std.debug.assert(elems.len > 0); // Should never be 0 here, because this is not an .empty_list - -// // We need to type-check the first element, but we don't need to unify it with -// // anything because we already pre-unified the list's elem var with it. -// const first_elem_idx = elems[0]; -// var last_elem_idx: CIR.Expr.Idx = first_elem_idx; -// does_fx = try self.checkExpr(first_elem_idx) or does_fx; - -// for (elems[1..], 1..) |elem_expr_id, i| { -// does_fx = try self.checkExpr(elem_expr_id) or does_fx; - -// // Unify each element's var with the list's elem var -// const result = try self.unify(elem_var, @enumFromInt(@intFromEnum(elem_expr_id))); -// self.setDetailIfTypeMismatch(result, problem.TypeMismatchDetail{ .incompatible_list_elements = .{ -// .last_elem_expr = last_elem_idx, -// .incompatible_elem_index = @intCast(i), -// .list_length = @intCast(elems.len), -// } }); - -// if (!result.isOk()) { -// // Check remaining elements to catch their individual errors -// for (elems[i + 1 ..]) |remaining_elem_id| { -// does_fx = try self.checkExpr(remaining_elem_id) or does_fx; -// } - -// // Break to avoid cascading errors -// break; -// } - -// last_elem_idx = elem_expr_id; -// } -// }, -// .e_empty_list => |_| {}, -// .e_match => |match| { -// does_fx = try self.checkMatchExpr(expr_idx, match); -// }, -// .e_if => |if_expr| { -// does_fx = try self.checkIfElseExpr(expr_idx, expr_region, if_expr); -// }, -// .e_call => |call| { -// // Get all expressions - first is function, rest are arguments -// // First expression is the function being called; the rest are args. -// const func_expr_idx = call.func; -// does_fx = try self.checkExpr(func_expr_idx) or does_fx; // func_expr could be effectful, e.g. `(mk_fn!())(arg)` - -// // Then, check all the arguments -// const actual_args = self.cir.store.sliceExpr(call.args); -// for (actual_args) |arg_expr_idx| { -// // Each arg could also be effectful, e.g. `fn(mk_arg!(), mk_arg!())` -// does_fx = try self.checkExpr(arg_expr_idx) or does_fx; -// } - -// // Don't try to unify with the function if the function is a runtime error. -// const func_expr = self.cir.store.getExpr(func_expr_idx); -// if (func_expr != .e_runtime_error) { -// const func_expr_region = self.cir.store.getRegionAt(ModuleEnv.nodeIdxFrom(func_expr_idx)); - -// const ret_var = @as(Var, @enumFromInt(@intFromEnum(expr_idx))); -// const expected_fn_var = @as(Var, @enumFromInt(@intFromEnum(func_expr_idx))); -// const resolved_func = self.types.resolveVar(expected_fn_var); - -// // Check if this is an annotated function that needs instantiation -// // We only instantiate if the function actually contains type variables -// var cur_call_func_var = expected_fn_var; -// var current_content = resolved_func.desc.content; - -// content_switch: switch (current_content) { -// .structure => |flat_type| switch (flat_type) { -// .fn_effectful => |_| { -// does_fx = true; -// if (self.types.needsInstantiation(cur_call_func_var)) { -// const expected_func_var = try self.instantiateVarAnon(cur_call_func_var, .{ .explicit = expr_region }); -// const resolved_expected_func = self.types.resolveVar(expected_func_var); - -// std.debug.assert(resolved_expected_func.desc.content == .structure); -// std.debug.assert(resolved_expected_func.desc.content.structure == .fn_effectful); -// const expected_fn = resolved_expected_func.desc.content.structure.fn_effectful; - -// does_fx = try self.unifyFunctionCall(actual_args, ret_var, expected_fn_var, expected_fn, expr_region, func_expr_idx) or does_fx; -// return does_fx; -// } -// }, -// .fn_pure => |_| { -// if (self.types.needsInstantiation(cur_call_func_var)) { -// const expected_func_var = try self.instantiateVarAnon(cur_call_func_var, .{ .explicit = expr_region }); -// const resolved_expected_func = self.types.resolveVar(expected_func_var); - -// std.debug.assert(resolved_expected_func.desc.content == .structure); -// std.debug.assert(resolved_expected_func.desc.content.structure == .fn_pure); -// const expected_fn = resolved_expected_func.desc.content.structure.fn_pure; - -// does_fx = try self.unifyFunctionCall(actual_args, ret_var, expected_fn_var, expected_fn, func_expr_region, func_expr_idx) or does_fx; -// return does_fx; -// } -// }, -// .fn_unbound => |_| { -// if (self.types.needsInstantiation(cur_call_func_var)) { -// const expected_func_var = try self.instantiateVarAnon(cur_call_func_var, .{ .explicit = expr_region }); -// const resolved_expected_func = self.types.resolveVar(expected_func_var); - -// std.debug.assert(resolved_expected_func.desc.content == .structure); -// std.debug.assert(resolved_expected_func.desc.content.structure == .fn_unbound); -// const expected_fn = resolved_expected_func.desc.content.structure.fn_unbound; - -// does_fx = try self.unifyFunctionCall(actual_args, ret_var, expected_fn_var, expected_fn, expr_region, func_expr_idx) or does_fx; -// return does_fx; -// } -// }, -// else => { -// // Non-function structure - fall through -// }, -// }, -// .alias => |alias| { -// // Resolve the alias, then continue on to the appropriate branch. -// // (It might be another alias, or we might be done and ready to proceed.) -// const backing_var = self.types.getAliasBackingVar(alias); -// cur_call_func_var = backing_var; -// current_content = self.types.resolveVar(backing_var).desc.content; -// continue :content_switch current_content; -// }, -// else => { -// // Non-structure content - fall through -// }, -// } - -// // We didn't handle the function call above (either because it wasn't a function -// // or it didn't need instantiation), so fall back on this logic. -// const arg_vars: []Var = @constCast(@ptrCast(@alignCast(actual_args))); - -// // Create an unbound function type with the call result as return type -// // The unification will propagate the actual return type to the call -// const func_content = try self.types.mkFuncUnbound(arg_vars, ret_var); -// const expected_func_var = try self.freshFromContent(func_content, expr_region); -// _ = try self.unify(expected_func_var, cur_call_func_var); -// } -// }, -// .e_record => |e| { -// // Perform field-by-field unification between the record structure's -// // field type variables and the actual field value expression types. -// // -// // 1. Resolve the expression var to get the record structure -// // 2. Type check each field value expression (to get concrete types) -// // 3. For each field, unify the field type var with the field value type var -// // 4. Unification propagates concrete types through the type system - -// const record_var_resolved = self.types.resolveVar(expr_var); -// const record_var_content = record_var_resolved.desc.content; - -// // Process each field -// for (self.cir.store.sliceRecordFields(e.fields)) |field_idx| { -// const field = self.cir.store.getRecordField(field_idx); - -// // STEP 1: Check the field value expression first -// // This ensures the field value has a concrete type to unify with -// does_fx = try self.checkExpr(field.value) or does_fx; - -// // STEP 2: Find the corresponding field type in the record structure -// // This only works if record_var_content is .structure.record -// if (record_var_content == .structure and record_var_content.structure == .record) { -// const record_fields = self.types.getRecordFieldsSlice(record_var_content.structure.record.fields); - -// // STEP 3: Find the field with matching name and unify types -// const field_names = record_fields.items(.name); -// const field_vars = record_fields.items(.var_); -// for (field_names, field_vars) |type_field_name, type_field_var| { -// if (type_field_name.idx == field.name.idx) { -// // Extract the type variable from the field value expression -// // Different expression types store their type variables in different places -// const field_expr_type_var = @as(Var, @enumFromInt(@intFromEnum(field.value))); - -// // STEP 4: Unify field type variable with field value type variable -// // This is where concrete types (like Str, Num) get propagated -// // from field values to the record structure -// _ = try self.unify(type_field_var, field_expr_type_var); -// break; -// } -// } -// } -// // If record_var_content is NOT .structure.record, unification is skipped -// // This typically happens when canonicalization didn't set the record structure properly -// } -// }, -// .e_empty_record => |_| {}, -// .e_tag => |_| {}, -// .e_nominal => |e| { -// const real_nominal_var = ModuleEnv.varFrom(e.nominal_type_decl); -// const expr_backing_var = ModuleEnv.varFrom(e.backing_expr); - -// try self.checkNominal( -// ModuleEnv.varFrom(expr_idx), -// expr_region, -// expr_backing_var, -// e.backing_type, -// real_nominal_var, -// ); -// }, -// .e_nominal_external => |e| { -// const resolved_external = try self.resolveVarFromExternal(e.module_idx, e.target_node_idx) orelse { -// // If we could not copy the type, set error and continue -// try self.types.setVarContent(ModuleEnv.varFrom(expr_idx), .err); -// return false; -// }; -// const expr_backing_var = ModuleEnv.varFrom(e.backing_expr); -// try self.checkNominal( -// ModuleEnv.varFrom(expr_idx), -// expr_region, -// expr_backing_var, -// e.backing_type, -// resolved_external.local_var, -// ); -// }, -// .e_zero_argument_tag => |_| {}, -// .e_binop => |binop| { -// does_fx = try self.checkBinopExpr(expr_idx, expr_region, binop, expected_type, from_annotation); -// }, -// .e_unary_minus => |unary| { -// does_fx = try self.checkUnaryMinusExpr(expr_idx, expr_region, unary); -// }, -// .e_unary_not => |unary| { -// does_fx = try self.checkUnaryNotExpr(expr_idx, expr_region, unary); -// }, -// .e_block => |block| { -// const anno_free_vars_top = self.anno_free_vars.top(); -// defer self.anno_free_vars.clearFrom(anno_free_vars_top); - -// // Check all statements in the block -// const statements = self.cir.store.sliceStatements(block.stmts); -// for (statements) |stmt_idx| { -// const stmt = self.cir.store.getStatement(stmt_idx); -// switch (stmt) { -// .s_decl => |decl_stmt| { -// // Check pattern and expression, then unify -// try self.checkPattern(decl_stmt.pattern); -// if (decl_stmt.anno) |anno_idx| { -// const annotation = self.cir.store.getAnnotation(anno_idx); -// const anno_var = try self.generateAnnoType( -// FreeVarCtx{ .scratch = &self.anno_free_vars, .start = 0, .mode = .rigid }, -// annotation.type_anno, -// ); - -// does_fx = try self.checkExprWithExpectedAndAnnotation(decl_stmt.expr, anno_var, true) or does_fx; -// } else { -// does_fx = try self.checkExpr(decl_stmt.expr) or does_fx; -// } - -// // Unify the pattern with the expression -// const decl_pattern_var: Var = @enumFromInt(@intFromEnum(decl_stmt.pattern)); -// const decl_expr_var: Var = @enumFromInt(@intFromEnum(decl_stmt.expr)); -// _ = try self.unify(decl_pattern_var, decl_expr_var); -// }, -// .s_reassign => |reassign| { -// does_fx = try self.checkExpr(reassign.expr) or does_fx; -// }, -// .s_expr => |expr_stmt| { -// does_fx = try self.checkExpr(expr_stmt.expr) or does_fx; -// }, -// else => { -// // Other statement types don't need expression checking -// }, -// } -// } -// // Check the final expression -// does_fx = try self.checkExpr(block.final_expr) or does_fx; - -// // Link the root expr with the final expr -// _ = try self.unify( -// @enumFromInt(@intFromEnum(expr_idx)), -// @enumFromInt(@intFromEnum(block.final_expr)), -// ); -// }, -// .e_closure => |closure| { -// // The type of a closure is the type of the lambda it wraps. -// // The lambda's type is determined by its arguments and body. -// // We need to check the lambda expression itself to get its type. -// // If we have an expected type, pass it to the lambda to catch type errors early -// if (expected_type) |expected| { -// does_fx = try self.checkExprWithExpectedAndAnnotation(closure.lambda_idx, expected, from_annotation); -// } else { -// does_fx = try self.checkExpr(closure.lambda_idx); -// } -// const lambda_var = ModuleEnv.varFrom(closure.lambda_idx); -// const closure_var = ModuleEnv.varFrom(expr_idx); -// _ = try self.unify(closure_var, lambda_var); -// }, -// .e_lambda => |lambda| { -// does_fx = try self.checkLambdaWithAnno(expr_idx, expr_region, lambda, expected_type); -// }, -// .e_tuple => |tuple| { -// // Check tuple elements -// const elems_slice = self.cir.store.exprSlice(tuple.elems); -// for (elems_slice) |single_elem_expr_idx| { -// does_fx = try self.checkExpr(single_elem_expr_idx) or does_fx; -// } - -// // The tuple type is created in the type store in canonicalize, so -// // nothing more needs to be done here -// }, -// .e_dot_access => |dot_access| { -// // Check the receiver expression -// does_fx = try self.checkExpr(dot_access.receiver) or does_fx; - -// // Get the type of the receiver -// const receiver_var = @as(Var, @enumFromInt(@intFromEnum(dot_access.receiver))); -// const resolved_receiver = self.types.resolveVar(receiver_var); - -// // Handle different receiver types -// switch (resolved_receiver.desc.content) { -// .structure => |structure| switch (structure) { -// .nominal_type => |nominal| { -// // This is a static dispatch on a nominal type -// if (dot_access.args) |args_span| { -// // Method call with arguments -// // Get the origin module path -// const origin_module_path = self.cir.getIdent(nominal.origin_module); - -// // Find which imported module matches this path -// var origin_module_idx: ?CIR.Import.Idx = null; -// var origin_module: ?*const ModuleEnv = null; - -// // Check if it's the current module -// if (std.mem.eql(u8, origin_module_path, self.cir.module_name)) { -// origin_module = self.cir; -// } else { -// // Search through imported modules -// for (self.other_modules, 0..) |other_module, idx| { -// if (std.mem.eql(u8, origin_module_path, other_module.module_name)) { -// origin_module_idx = @enumFromInt(idx); -// origin_module = other_module; -// break; -// } -// } -// } - -// if (origin_module) |module| { -// // Look up the method in the origin module's exports -// // Need to convert identifier from current module to target module -// const method_name_str = self.cir.getIdent(dot_access.field_name); - -// // Search through the module's exposed items -// const node_idx_opt = if (module.common.findIdent(method_name_str)) |target_ident| -// module.getExposedNodeIndexById(target_ident) -// else -// null; - -// if (node_idx_opt) |node_idx| { -// // Found the method! -// const target_node_idx = @as(CIR.Node.Idx, @enumFromInt(node_idx)); - -// // Check if we've already copied this import -// const cache_key = ImportCacheKey{ -// .module_idx = origin_module_idx orelse @enumFromInt(0), // Current module -// .node_idx = target_node_idx, -// }; - -// const method_var = if (self.import_cache.get(cache_key)) |cached_var| -// cached_var -// else blk: { -// // Copy the method's type from the origin module to our type store -// const source_var = @as(Var, @enumFromInt(@intFromEnum(target_node_idx))); -// const new_copy = try self.copyVar(source_var, @constCast(module)); -// try self.import_cache.put(self.gpa, cache_key, new_copy); -// break :blk new_copy; -// }; -// const method_instantiated = try self.instantiateVarAnon(method_var, .use_last_var); - -// // Check all arguments -// var i: u32 = 0; -// while (i < args_span.span.len) : (i += 1) { -// const arg_expr_idx = @as(CIR.Expr.Idx, @enumFromInt(args_span.span.start + i)); -// does_fx = try self.checkExpr(arg_expr_idx) or does_fx; -// } - -// // Create argument list for the function call -// var args = std.ArrayList(Var).init(self.gpa); -// defer args.deinit(); - -// // Add the receiver (the nominal type) as the first argument -// try args.append(receiver_var); - -// // Add the remaining arguments -// i = 0; -// while (i < args_span.span.len) : (i += 1) { -// const arg_expr_idx = @as(CIR.Expr.Idx, @enumFromInt(args_span.span.start + i)); -// const arg_var = @as(Var, @enumFromInt(@intFromEnum(arg_expr_idx))); -// try args.append(arg_var); -// } - -// // Create a function type for the method call -// const dot_access_var = @as(Var, @enumFromInt(@intFromEnum(expr_idx))); -// const func_content = try self.types.mkFuncUnbound(args.items, dot_access_var); -// const expected_func_var = try self.freshFromContent(func_content, expr_region); - -// // Unify with the imported method type -// _ = try self.unify(expected_func_var, method_instantiated); - -// // Store the resolved method info for code generation -// // This will be used by the code generator to emit the correct function call -// // For now, the type information in the expression variable is sufficient -// } else { -// // Method not found in origin module -// // TODO: Add a proper error type for method not found on nominal type -// try self.types.setVarContent(@enumFromInt(@intFromEnum(expr_idx)), .err); -// } -// } else { -// // Origin module not found -// // TODO: Add a proper error type for origin module not found -// try self.types.setVarContent(@enumFromInt(@intFromEnum(expr_idx)), .err); -// } -// } else { -// // No arguments - this might be a field access on a nominal type's backing type -// // TODO: Handle field access on nominal types -// try self.types.setVarContent(@enumFromInt(@intFromEnum(expr_idx)), .err); -// } -// }, -// .record => |record| { -// // Receiver is already a record, find the field -// const fields = self.types.getRecordFieldsSlice(record.fields); - -// // Find the field with the matching name -// for (fields.items(.name), fields.items(.var_)) |field_name, field_var| { -// if (field_name == dot_access.field_name) { -// // Unify the dot access expression with the field type -// const dot_access_var = @as(Var, @enumFromInt(@intFromEnum(expr_idx))); -// _ = try self.unify(dot_access_var, field_var); -// break; -// } -// } -// }, -// .record_unbound => |record_unbound| { -// // Receiver is an unbound record, find the field -// const fields = self.types.getRecordFieldsSlice(record_unbound); - -// // Find the field with the matching name -// for (fields.items(.name), fields.items(.var_)) |field_name, field_var| { -// if (field_name == dot_access.field_name) { -// // Unify the dot access expression with the field type -// const dot_access_var = @as(Var, @enumFromInt(@intFromEnum(expr_idx))); -// _ = try self.unify(dot_access_var, field_var); -// break; -// } -// } -// }, -// else => { -// // Receiver is not a record, this is a type error -// // For now, we'll let unification handle the error -// }, -// }, -// .flex_var => { -// // Receiver is unbound, we need to constrain it to be a record with the field -// // Create a fresh variable for the field type -// const field_var = try self.fresh(expr_region); -// const dot_access_var = @as(Var, @enumFromInt(@intFromEnum(expr_idx))); -// _ = try self.unify(dot_access_var, field_var); - -// // Create a record type with this field -// const field_idx = try self.types.appendRecordField(.{ -// .name = dot_access.field_name, -// .var_ = field_var, -// }); -// const fields_range = types_mod.RecordField.SafeMultiList.Range{ -// .start = field_idx, -// .count = 1, -// }; - -// // Create an extension variable for other possible fields -// // Create the record content -// const record_content = types_mod.Content{ -// .structure = .{ -// .record_unbound = fields_range, -// }, -// }; - -// // Unify the receiver with this record type -// // -// // TODO: Do we need to insert a CIR placeholder node here as well? -// // What happens if later this type variable has a problem, and we -// // try to look up it's region in CIR? -// const record_var = try self.freshFromContent(record_content, expr_region); - -// // Use the dot access expression as the constraint origin for better error reporting -// _ = try self.unifyWithConstraintOrigin(receiver_var, record_var, dot_access_var); - -// // Record that this variable was constrained by this dot access expression -// try self.constraint_origins.put(receiver_var, dot_access_var); -// // Constraint origin recorded for better error reporting -// }, -// else => { -// // Other cases (rigid_var, alias, etc.) - let unification handle errors -// }, -// } -// }, -// .e_runtime_error => {}, -// .e_crash => {}, -// .e_dbg => {}, -// .e_ellipsis => {}, -// .e_expect => {}, -// } - -// return does_fx; -// } - // binop // /// Check the types for a binary operation expression diff --git a/src/check/problem.zig b/src/check/problem.zig index a4df5c00e8..33e22d61e6 100644 --- a/src/check/problem.zig +++ b/src/check/problem.zig @@ -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; } diff --git a/src/check/snapshot.zig b/src/check/snapshot.zig index 349e7f563c..837760bd85 100644 --- a/src/check/snapshot.zig +++ b/src/check/snapshot.zig @@ -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| { diff --git a/src/check/test/type_checking_integration.zig b/src/check/test/type_checking_integration.zig index 6446b8df45..7313d63ccf 100644 --- a/src/check/test/type_checking_integration.zig +++ b/src/check/test/type_checking_integration.zig @@ -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, diff --git a/src/check/unify.zig b/src/check/unify.zig index 565711ae89..3c3f64b26b 100644 --- a/src/check/unify.zig +++ b/src/check/unify.zig @@ -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); diff --git a/src/types/TypeWriter.zig b/src/types/TypeWriter.zig index 8c940f5b59..45728017da 100644 --- a/src/types/TypeWriter.zig +++ b/src/types/TypeWriter.zig @@ -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. diff --git a/src/types/instantiate.zig b/src/types/instantiate.zig index 7bbaf661d5..0107d368e4 100644 --- a/src/types/instantiate.zig +++ b/src/types/instantiate.zig @@ -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 { diff --git a/src/types/store.zig b/src/types/store.zig index 0d5d73c935..0633dda3fa 100644 --- a/src/types/store.zig +++ b/src/types/store.zig @@ -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 diff --git a/test/snapshots/annotations.md b/test/snapshots/annotations.md index af381122ac..5e1149e936 100644 --- a/test/snapshots/annotations.md +++ b/test/snapshots/annotations.md @@ -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")))) diff --git a/test/snapshots/bool_closure_type_check.md b/test/snapshots/bool_closure_type_check.md index 79e7c7efff..22da50aa5d 100644 --- a/test/snapshots/bool_closure_type_check.md +++ b/test/snapshots/bool_closure_type_check.md @@ -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")) ~~~ diff --git a/test/snapshots/bound_type_var_no_annotation.md b/test/snapshots/bound_type_var_no_annotation.md index 50df3f0a50..82af190bd0 100644 --- a/test/snapshots/bound_type_var_no_annotation.md +++ b/test/snapshots/bound_type_var_no_annotation.md @@ -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))")))) ~~~ diff --git a/test/snapshots/can_basic_scoping.md b/test/snapshots/can_basic_scoping.md index 9b9ecedbe1..388bd80dab 100644 --- a/test/snapshots/can_basic_scoping.md +++ b/test/snapshots/can_basic_scoping.md @@ -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)")) diff --git a/test/snapshots/can_dot_access_with_vars.md b/test/snapshots/can_dot_access_with_vars.md index e10278a9c4..7dc09e8d05 100644 --- a/test/snapshots/can_dot_access_with_vars.md +++ b/test/snapshots/can_dot_access_with_vars.md @@ -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 diff --git a/test/snapshots/can_frac_literal.md b/test/snapshots/can_frac_literal.md index 2e40f9ffc5..a962c16cb9 100644 --- a/test/snapshots/can_frac_literal.md +++ b/test/snapshots/can_frac_literal.md @@ -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))")))) ~~~ diff --git a/test/snapshots/can_hex_integer.md b/test/snapshots/can_hex_integer.md index 3cb0c1d5ba..439a2a1f19 100644 --- a/test/snapshots/can_hex_integer.md +++ b/test/snapshots/can_hex_integer.md @@ -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))")))) ~~~ diff --git a/test/snapshots/can_import_json.md b/test/snapshots/can_import_json.md index 41c704728e..89c312c4a4 100644 --- a/test/snapshots/can_import_json.md +++ b/test/snapshots/can_import_json.md @@ -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")))) ~~~ diff --git a/test/snapshots/can_import_nested_modules.md b/test/snapshots/can_import_nested_modules.md index 12cf9b65bc..c993e6e328 100644 --- a/test/snapshots/can_import_nested_modules.md +++ b/test/snapshots/can_import_nested_modules.md @@ -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")) diff --git a/test/snapshots/can_import_type_annotations.md b/test/snapshots/can_import_type_annotations.md index 27c050a1e0..72b51a8a1a 100644 --- a/test/snapshots/can_import_type_annotations.md +++ b/test/snapshots/can_import_type_annotations.md @@ -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")) diff --git a/test/snapshots/can_import_unresolved_qualified.md b/test/snapshots/can_import_unresolved_qualified.md index a98fe52534..beaeeb4c49 100644 --- a/test/snapshots/can_import_unresolved_qualified.md +++ b/test/snapshots/can_import_unresolved_qualified.md @@ -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")) diff --git a/test/snapshots/can_list_first_concrete.md b/test/snapshots/can_list_first_concrete.md index 9b80eba04b..cbe9c66708 100644 --- a/test/snapshots/can_list_first_concrete.md +++ b/test/snapshots/can_list_first_concrete.md @@ -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")))) diff --git a/test/snapshots/can_list_mismatch_then_nested_error.md b/test/snapshots/can_list_mismatch_then_nested_error.md index ac3505ca67..6ad1d7a6dc 100644 --- a/test/snapshots/can_list_mismatch_then_nested_error.md +++ b/test/snapshots/can_list_mismatch_then_nested_error.md @@ -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"))))))) ~~~ diff --git a/test/snapshots/can_list_multiline_mismatch.md b/test/snapshots/can_list_multiline_mismatch.md index b0d2319799..32b862a597 100644 --- a/test/snapshots/can_list_multiline_mismatch.md +++ b/test/snapshots/can_list_multiline_mismatch.md @@ -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 diff --git a/test/snapshots/can_list_nested_heterogeneous.md b/test/snapshots/can_list_nested_heterogeneous.md index 4240f1fcc5..f6083a2fee 100644 --- a/test/snapshots/can_list_nested_heterogeneous.md +++ b/test/snapshots/can_list_nested_heterogeneous.md @@ -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 diff --git a/test/snapshots/can_list_triple_nested_heterogeneous.md b/test/snapshots/can_list_triple_nested_heterogeneous.md index 895d72fb59..de5e2121f9 100644 --- a/test/snapshots/can_list_triple_nested_heterogeneous.md +++ b/test/snapshots/can_list_triple_nested_heterogeneous.md @@ -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) diff --git a/test/snapshots/can_list_two_elements.md b/test/snapshots/can_list_two_elements.md index baad52566f..f9555ec618 100644 --- a/test/snapshots/can_list_two_elements.md +++ b/test/snapshots/can_list_two_elements.md @@ -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"))))) ~~~ diff --git a/test/snapshots/can_nested_heterogeneous_lists.md b/test/snapshots/can_nested_heterogeneous_lists.md index 45b411b7f0..426feafe6b 100644 --- a/test/snapshots/can_nested_heterogeneous_lists.md +++ b/test/snapshots/can_nested_heterogeneous_lists.md @@ -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 diff --git a/test/snapshots/can_two_decls.md b/test/snapshots/can_two_decls.md index cc3d0f0ced..27433aa505 100644 --- a/test/snapshots/can_two_decls.md +++ b/test/snapshots/can_two_decls.md @@ -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)")))) diff --git a/test/snapshots/can_var_scoping_invalid_top_level.md b/test/snapshots/can_var_scoping_invalid_top_level.md index 7794bc050d..a1b192a2e9 100644 --- a/test/snapshots/can_var_scoping_invalid_top_level.md +++ b/test/snapshots/can_var_scoping_invalid_top_level.md @@ -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)")))) ~~~ diff --git a/test/snapshots/can_var_scoping_regular_var.md b/test/snapshots/can_var_scoping_regular_var.md index c75632d776..ef325ecb64 100644 --- a/test/snapshots/can_var_scoping_regular_var.md +++ b/test/snapshots/can_var_scoping_regular_var.md @@ -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")))) ~~~ diff --git a/test/snapshots/can_var_scoping_var_redeclaration.md b/test/snapshots/can_var_scoping_var_redeclaration.md index aced20f924..8349364faa 100644 --- a/test/snapshots/can_var_scoping_var_redeclaration.md +++ b/test/snapshots/can_var_scoping_var_redeclaration.md @@ -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")))) ~~~ diff --git a/test/snapshots/def_simple_with_annotation.md b/test/snapshots/def_simple_with_annotation.md index 4c644c06fb..6ca4086f0a 100644 --- a/test/snapshots/def_simple_with_annotation.md +++ b/test/snapshots/def_simple_with_annotation.md @@ -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")))) ~~~ diff --git a/test/snapshots/eval/lambda_simple_application.md b/test/snapshots/eval/lambda_simple_application.md index e58c93fc60..a1b842f2d0 100644 --- a/test/snapshots/eval/lambda_simple_application.md +++ b/test/snapshots/eval/lambda_simple_application.md @@ -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 diff --git a/test/snapshots/eval/mixed_destructure_closure.md b/test/snapshots/eval/mixed_destructure_closure.md index 25b5c9608c..7cb77082d7 100644 --- a/test/snapshots/eval/mixed_destructure_closure.md +++ b/test/snapshots/eval/mixed_destructure_closure.md @@ -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")) ~~~ diff --git a/test/snapshots/eval/record_argument_closure.md b/test/snapshots/eval/record_argument_closure.md index 23dd743e45..7ed68473ed 100644 --- a/test/snapshots/eval/record_argument_closure.md +++ b/test/snapshots/eval/record_argument_closure.md @@ -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 diff --git a/test/snapshots/eval/record_argument_closure_single.md b/test/snapshots/eval/record_argument_closure_single.md index ff8d650c92..c590190cc6 100644 --- a/test/snapshots/eval/record_argument_closure_single.md +++ b/test/snapshots/eval/record_argument_closure_single.md @@ -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 diff --git a/test/snapshots/eval/simple_add.md b/test/snapshots/eval/simple_add.md index 83cc93c16a..df04453965 100644 --- a/test/snapshots/eval/simple_add.md +++ b/test/snapshots/eval/simple_add.md @@ -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))")))) ~~~ diff --git a/test/snapshots/eval/tuple_argument_closure.md b/test/snapshots/eval/tuple_argument_closure.md index 31ba9086f7..81bdf9c0c7 100644 --- a/test/snapshots/eval/tuple_argument_closure.md +++ b/test/snapshots/eval/tuple_argument_closure.md @@ -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 diff --git a/test/snapshots/eval/tuple_bool.md b/test/snapshots/eval/tuple_bool.md index 702daa348e..0a59b8bba5 100644 --- a/test/snapshots/eval/tuple_bool.md +++ b/test/snapshots/eval/tuple_bool.md @@ -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)")) ~~~ diff --git a/test/snapshots/eval/tuple_numbers.md b/test/snapshots/eval/tuple_numbers.md index e80744f8f4..a6b025fb38 100644 --- a/test/snapshots/eval/tuple_numbers.md +++ b/test/snapshots/eval/tuple_numbers.md @@ -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)))")) ~~~ diff --git a/test/snapshots/exposed_items_test.md b/test/snapshots/exposed_items_test.md index b34c8b51e8..26476febe3 100644 --- a/test/snapshots/exposed_items_test.md +++ b/test/snapshots/exposed_items_test.md @@ -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)")))) ~~~ diff --git a/test/snapshots/expr/ann_closed_union.md b/test/snapshots/expr/ann_closed_union.md index b999e933e5..44750a1c8b 100644 --- a/test/snapshots/expr/ann_closed_union.md +++ b/test/snapshots/expr/ann_closed_union.md @@ -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)]")) ~~~ diff --git a/test/snapshots/expr/ann_effectful_fn.md b/test/snapshots/expr/ann_effectful_fn.md index 8b2ea01e88..a8204ab890 100644 --- a/test/snapshots/expr/ann_effectful_fn.md +++ b/test/snapshots/expr/ann_effectful_fn.md @@ -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 diff --git a/test/snapshots/expr/apply_function.md b/test/snapshots/expr/apply_function.md index efdd0a75a3..7336badd28 100644 --- a/test/snapshots/expr/apply_function.md +++ b/test/snapshots/expr/apply_function.md @@ -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")))) ~~~ diff --git a/test/snapshots/expr/binop_simple_add.md b/test/snapshots/expr/binop_simple_add.md index 99f273b7e3..9eab101212 100644 --- a/test/snapshots/expr/binop_simple_add.md +++ b/test/snapshots/expr/binop_simple_add.md @@ -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 diff --git a/test/snapshots/expr/block_defs_simple.md b/test/snapshots/expr/block_defs_simple.md index 6b412e42eb..6ee6344f16 100644 --- a/test/snapshots/expr/block_defs_simple.md +++ b/test/snapshots/expr/block_defs_simple.md @@ -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 diff --git a/test/snapshots/expr/block_pattern_unify.md b/test/snapshots/expr/block_pattern_unify.md index 845a628727..c53ea4a821 100644 --- a/test/snapshots/expr/block_pattern_unify.md +++ b/test/snapshots/expr/block_pattern_unify.md @@ -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")))) ~~~ diff --git a/test/snapshots/expr/boolean_tuple.md b/test/snapshots/expr/boolean_tuple.md index c6cf01af72..8182a39c9d 100644 --- a/test/snapshots/expr/boolean_tuple.md +++ b/test/snapshots/expr/boolean_tuple.md @@ -37,5 +37,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.14 (type "(Bool, Bool)")) +(expr @1.1-1.14 (type "(Error, Error)")) ~~~ diff --git a/test/snapshots/expr/double_question_binop.md b/test/snapshots/expr/double_question_binop.md index d982bc30b6..1003e5c465 100644 --- a/test/snapshots/expr/double_question_binop.md +++ b/test/snapshots/expr/double_question_binop.md @@ -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")))) diff --git a/test/snapshots/expr/float_negative.md b/test/snapshots/expr/float_negative.md index d3c770bf12..46fe886c59 100644 --- a/test/snapshots/expr/float_negative.md +++ b/test/snapshots/expr/float_negative.md @@ -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))")) ~~~ diff --git a/test/snapshots/expr/float_scientific.md b/test/snapshots/expr/float_scientific.md index 4d79be6e98..72f35bfa2b 100644 --- a/test/snapshots/expr/float_scientific.md +++ b/test/snapshots/expr/float_scientific.md @@ -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))")) ~~~ diff --git a/test/snapshots/expr/float_simple.md b/test/snapshots/expr/float_simple.md index a7d3a18edf..7794c027ab 100644 --- a/test/snapshots/expr/float_simple.md +++ b/test/snapshots/expr/float_simple.md @@ -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))")) ~~~ diff --git a/test/snapshots/expr/function_call.md b/test/snapshots/expr/function_call.md index 9274b45518..54bcb98bef 100644 --- a/test/snapshots/expr/function_call.md +++ b/test/snapshots/expr/function_call.md @@ -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 diff --git a/test/snapshots/expr/if_expression.md b/test/snapshots/expr/if_expression.md index ce3e482c1c..dea4d03484 100644 --- a/test/snapshots/expr/if_expression.md +++ b/test/snapshots/expr/if_expression.md @@ -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 diff --git a/test/snapshots/expr/if_numeric_comparison.md b/test/snapshots/expr/if_numeric_comparison.md index 510f022fd1..bcede04bab 100644 --- a/test/snapshots/expr/if_numeric_comparison.md +++ b/test/snapshots/expr/if_numeric_comparison.md @@ -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 diff --git a/test/snapshots/expr/if_true_literal.md b/test/snapshots/expr/if_true_literal.md index e2aec3873c..2247763a64 100644 --- a/test/snapshots/expr/if_true_literal.md +++ b/test/snapshots/expr/if_true_literal.md @@ -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 diff --git a/test/snapshots/expr/int_hex.md b/test/snapshots/expr/int_hex.md index bbb7d79c60..7772931375 100644 --- a/test/snapshots/expr/int_hex.md +++ b/test/snapshots/expr/int_hex.md @@ -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))")) ~~~ diff --git a/test/snapshots/expr/int_large.md b/test/snapshots/expr/int_large.md index bd955b67ea..c6038a2943 100644 --- a/test/snapshots/expr/int_large.md +++ b/test/snapshots/expr/int_large.md @@ -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 diff --git a/test/snapshots/expr/int_with_underscores.md b/test/snapshots/expr/int_with_underscores.md index 22fa517610..83b5a463fb 100644 --- a/test/snapshots/expr/int_with_underscores.md +++ b/test/snapshots/expr/int_with_underscores.md @@ -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 diff --git a/test/snapshots/expr/lambda_simple.md b/test/snapshots/expr/lambda_simple.md index 6cfa94ce5b..273bf59f0b 100644 --- a/test/snapshots/expr/lambda_simple.md +++ b/test/snapshots/expr/lambda_simple.md @@ -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 diff --git a/test/snapshots/expr/list_integers.md b/test/snapshots/expr/list_integers.md index 2efdfa390c..c31417eeab 100644 --- a/test/snapshots/expr/list_integers.md +++ b/test/snapshots/expr/list_integers.md @@ -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 diff --git a/test/snapshots/expr/list_nested.md b/test/snapshots/expr/list_nested.md index 7b89609f75..e5f005b6cb 100644 --- a/test/snapshots/expr/list_nested.md +++ b/test/snapshots/expr/list_nested.md @@ -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 diff --git a/test/snapshots/expr/list_type_err.md b/test/snapshots/expr/list_type_err.md index ade06b7558..f769a06322 100644 --- a/test/snapshots/expr/list_type_err.md +++ b/test/snapshots/expr/list_type_err.md @@ -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"))))) ~~~ diff --git a/test/snapshots/expr/min_parens_number.md b/test/snapshots/expr/min_parens_number.md index 16aea0a6c7..9c8b684db4 100644 --- a/test/snapshots/expr/min_parens_number.md +++ b/test/snapshots/expr/min_parens_number.md @@ -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 diff --git a/test/snapshots/expr/not_tag.md b/test/snapshots/expr/not_tag.md index b44cb41081..cf13921bb7 100644 --- a/test/snapshots/expr/not_tag.md +++ b/test/snapshots/expr/not_tag.md @@ -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 diff --git a/test/snapshots/expr/num_bang_amp_z_dot_t.md b/test/snapshots/expr/num_bang_amp_z_dot_t.md index 30f0e43732..7592948548 100644 --- a/test/snapshots/expr/num_bang_amp_z_dot_t.md +++ b/test/snapshots/expr/num_bang_amp_z_dot_t.md @@ -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 diff --git a/test/snapshots/expr/number_literal_suffixes.md b/test/snapshots/expr/number_literal_suffixes.md index 100acae9eb..d89bdff387 100644 --- a/test/snapshots/expr/number_literal_suffixes.md +++ b/test/snapshots/expr/number_literal_suffixes.md @@ -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)) }")) ~~~ diff --git a/test/snapshots/expr/record_field_update.md b/test/snapshots/expr/record_field_update.md index aed73c53bd..1c7472014d 100644 --- a/test/snapshots/expr/record_field_update.md +++ b/test/snapshots/expr/record_field_update.md @@ -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 }")) ~~~ diff --git a/test/snapshots/expr/record_literal_field_bang.md b/test/snapshots/expr/record_literal_field_bang.md index 20b4ff4a30..fa13ccf55f 100644 --- a/test/snapshots/expr/record_literal_field_bang.md +++ b/test/snapshots/expr/record_literal_field_bang.md @@ -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 diff --git a/test/snapshots/expr/record_simple.md b/test/snapshots/expr/record_simple.md index 2a425e6c51..f2c57058bc 100644 --- a/test/snapshots/expr/record_simple.md +++ b/test/snapshots/expr/record_simple.md @@ -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 diff --git a/test/snapshots/expr/record_updater_basic.md b/test/snapshots/expr/record_updater_basic.md index 5495cde6fd..8284216557 100644 --- a/test/snapshots/expr/record_updater_basic.md +++ b/test/snapshots/expr/record_updater_basic.md @@ -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) } }")))) ~~~ diff --git a/test/snapshots/expr/record_updater_chained.md b/test/snapshots/expr/record_updater_chained.md index ad64aa7c62..80cbf86b2d 100644 --- a/test/snapshots/expr/record_updater_chained.md +++ b/test/snapshots/expr/record_updater_chained.md @@ -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 } }")))) ~~~ diff --git a/test/snapshots/expr/string_interpolation_simple.md b/test/snapshots/expr/string_interpolation_simple.md index 6d62d1425d..2a4c081634 100644 --- a/test/snapshots/expr/string_interpolation_simple.md +++ b/test/snapshots/expr/string_interpolation_simple.md @@ -46,5 +46,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.17 (type "Str")) +(expr @1.1-1.17 (type "Error")) ~~~ diff --git a/test/snapshots/expr/tag_applications_simple.md b/test/snapshots/expr/tag_applications_simple.md index 872d555fdb..4c3b56405c 100644 --- a/test/snapshots/expr/tag_applications_simple.md +++ b/test/snapshots/expr/tag_applications_simple.md @@ -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 - +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") diff --git a/test/snapshots/expr/tag_vs_function_calls.md b/test/snapshots/expr/tag_vs_function_calls.md index cd4c26eeb1..2504e170cc 100644 --- a/test/snapshots/expr/tag_vs_function_calls.md +++ b/test/snapshots/expr/tag_vs_function_calls.md @@ -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) }")) ~~~ diff --git a/test/snapshots/expr/tag_with_payload.md b/test/snapshots/expr/tag_with_payload.md index 8d73514f0b..aaba2c2c74 100644 --- a/test/snapshots/expr/tag_with_payload.md +++ b/test/snapshots/expr/tag_with_payload.md @@ -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 diff --git a/test/snapshots/expr/tuple.md b/test/snapshots/expr/tuple.md index 852f2a1f46..6c15fb2fe0 100644 --- a/test/snapshots/expr/tuple.md +++ b/test/snapshots/expr/tuple.md @@ -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)")) ~~~ diff --git a/test/snapshots/expr/tuple_comprehensive.md b/test/snapshots/expr/tuple_comprehensive.md index 7b8bed436d..60737c0eb9 100644 --- a/test/snapshots/expr/tuple_comprehensive.md +++ b/test/snapshots/expr/tuple_comprehensive.md @@ -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")))) ~~~ diff --git a/test/snapshots/expr/tuple_patterns.md b/test/snapshots/expr/tuple_patterns.md index e07b59d389..62ad7a2e4a 100644 --- a/test/snapshots/expr/tuple_patterns.md +++ b/test/snapshots/expr/tuple_patterns.md @@ -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)) diff --git a/test/snapshots/expr/tuple_simple_unbound.md b/test/snapshots/expr/tuple_simple_unbound.md index 595fecd238..7d39faaae4 100644 --- a/test/snapshots/expr/tuple_simple_unbound.md +++ b/test/snapshots/expr/tuple_simple_unbound.md @@ -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)")) ~~~ diff --git a/test/snapshots/expr/tuple_type.md b/test/snapshots/expr/tuple_type.md index e97cad15de..066fcf5ac4 100644 --- a/test/snapshots/expr/tuple_type.md +++ b/test/snapshots/expr/tuple_type.md @@ -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 diff --git a/test/snapshots/expr/tuple_unification_test.md b/test/snapshots/expr/tuple_unification_test.md index 968970e53c..fadca31343 100644 --- a/test/snapshots/expr/tuple_unification_test.md +++ b/test/snapshots/expr/tuple_unification_test.md @@ -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 diff --git a/test/snapshots/expr/two_arg_closure.md b/test/snapshots/expr/two_arg_closure.md index 6d467b2b08..b0918d6736 100644 --- a/test/snapshots/expr/two_arg_closure.md +++ b/test/snapshots/expr/two_arg_closure.md @@ -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 diff --git a/test/snapshots/expr_if_missing_else.md b/test/snapshots/expr_if_missing_else.md index 9c0fdc9996..f5b27a858a 100644 --- a/test/snapshots/expr_if_missing_else.md +++ b/test/snapshots/expr_if_missing_else.md @@ -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")))) ~~~ diff --git a/test/snapshots/expr_int_simple.md b/test/snapshots/expr_int_simple.md index c8710b02f5..f86b50ac47 100644 --- a/test/snapshots/expr_int_simple.md +++ b/test/snapshots/expr_int_simple.md @@ -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 diff --git a/test/snapshots/expr_no_space_dot_int.md b/test/snapshots/expr_no_space_dot_int.md index f668a30f0f..d0a4118633 100644 --- a/test/snapshots/expr_no_space_dot_int.md +++ b/test/snapshots/expr_no_space_dot_int.md @@ -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")))) ~~~ diff --git a/test/snapshots/external_decl_lookup.md b/test/snapshots/external_decl_lookup.md index 6d4d28290c..74c21b462b 100644 --- a/test/snapshots/external_decl_lookup.md +++ b/test/snapshots/external_decl_lookup.md @@ -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")))) ~~~ diff --git a/test/snapshots/fib_module.md b/test/snapshots/fib_module.md index 7268220086..e22f00dfd0 100644 --- a/test/snapshots/fib_module.md +++ b/test/snapshots/fib_module.md @@ -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")))) ~~~ diff --git a/test/snapshots/file_multiple_type_decls.md b/test/snapshots/file_multiple_type_decls.md index b469badebb..4ac1d8e57b 100644 --- a/test/snapshots/file_multiple_type_decls.md +++ b/test/snapshots/file_multiple_type_decls.md @@ -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") diff --git a/test/snapshots/formatting/multiline/app.md b/test/snapshots/formatting/multiline/app.md index 16576ae5b7..96debe1c63 100644 --- a/test/snapshots/formatting/multiline/app.md +++ b/test/snapshots/formatting/multiline/app.md @@ -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)) ~~~ diff --git a/test/snapshots/formatting/multiline/everything.md b/test/snapshots/formatting/multiline/everything.md index 4699a604d7..dc4c9278e3 100644 --- a/test/snapshots/formatting/multiline/everything.md +++ b/test/snapshots/formatting/multiline/everything.md @@ -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")))) ~~~ diff --git a/test/snapshots/formatting/multiline/hosted.md b/test/snapshots/formatting/multiline/hosted.md index 76d13ecde7..57b9c535e6 100644 --- a/test/snapshots/formatting/multiline/hosted.md +++ b/test/snapshots/formatting/multiline/hosted.md @@ -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)) ~~~ diff --git a/test/snapshots/formatting/multiline/module.md b/test/snapshots/formatting/multiline/module.md index 1c83587087..dfb02ee1e1 100644 --- a/test/snapshots/formatting/multiline/module.md +++ b/test/snapshots/formatting/multiline/module.md @@ -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)")))) diff --git a/test/snapshots/formatting/multiline/package.md b/test/snapshots/formatting/multiline/package.md index 09d5d9aa70..ac15d17650 100644 --- a/test/snapshots/formatting/multiline/package.md +++ b/test/snapshots/formatting/multiline/package.md @@ -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)) ~~~ diff --git a/test/snapshots/formatting/multiline/platform.md b/test/snapshots/formatting/multiline/platform.md index 97fe444c44..a0a62cdb28 100644 --- a/test/snapshots/formatting/multiline/platform.md +++ b/test/snapshots/formatting/multiline/platform.md @@ -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)) ~~~ diff --git a/test/snapshots/formatting/multiline_without_comma/app.md b/test/snapshots/formatting/multiline_without_comma/app.md index 13e2986998..d63135fd16 100644 --- a/test/snapshots/formatting/multiline_without_comma/app.md +++ b/test/snapshots/formatting/multiline_without_comma/app.md @@ -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)) ~~~ diff --git a/test/snapshots/formatting/multiline_without_comma/everything.md b/test/snapshots/formatting/multiline_without_comma/everything.md index 6e426f39ca..f3f37beb12 100644 --- a/test/snapshots/formatting/multiline_without_comma/everything.md +++ b/test/snapshots/formatting/multiline_without_comma/everything.md @@ -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")))) ~~~ diff --git a/test/snapshots/formatting/multiline_without_comma/hosted.md b/test/snapshots/formatting/multiline_without_comma/hosted.md index 0237120a3a..b1e0b7cfd4 100644 --- a/test/snapshots/formatting/multiline_without_comma/hosted.md +++ b/test/snapshots/formatting/multiline_without_comma/hosted.md @@ -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)) ~~~ diff --git a/test/snapshots/formatting/multiline_without_comma/module.md b/test/snapshots/formatting/multiline_without_comma/module.md index 6673f9da91..b46db50384 100644 --- a/test/snapshots/formatting/multiline_without_comma/module.md +++ b/test/snapshots/formatting/multiline_without_comma/module.md @@ -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)")))) diff --git a/test/snapshots/formatting/multiline_without_comma/package.md b/test/snapshots/formatting/multiline_without_comma/package.md index 9febc83c9a..0103e425b6 100644 --- a/test/snapshots/formatting/multiline_without_comma/package.md +++ b/test/snapshots/formatting/multiline_without_comma/package.md @@ -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)) ~~~ diff --git a/test/snapshots/formatting/multiline_without_comma/platform.md b/test/snapshots/formatting/multiline_without_comma/platform.md index 472a82a734..41e53945a2 100644 --- a/test/snapshots/formatting/multiline_without_comma/platform.md +++ b/test/snapshots/formatting/multiline_without_comma/platform.md @@ -136,11 +136,32 @@ platform "pf" ~~~ # 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)) ~~~ diff --git a/test/snapshots/formatting/singleline/app.md b/test/snapshots/formatting/singleline/app.md index abc64b6942..48b3ebd79e 100644 --- a/test/snapshots/formatting/singleline/app.md +++ b/test/snapshots/formatting/singleline/app.md @@ -63,11 +63,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)) ~~~ diff --git a/test/snapshots/formatting/singleline/everything.md b/test/snapshots/formatting/singleline/everything.md index 43bcb3551c..d1d973d3ae 100644 --- a/test/snapshots/formatting/singleline/everything.md +++ b/test/snapshots/formatting/singleline/everything.md @@ -401,11 +401,11 @@ NO CHANGE (p-assign @18.1-18.2 (ident "h")) (e-closure @18.5-31.2 (captures - (capture @18.1-18.2 (ident "h")) - (capture @26.7-26.8 (ident "a")) + (capture @29.7-29.8 (ident "a")) (capture @28.8-28.9 (ident "a")) - (capture @27.6-27.7 (ident "a")) - (capture @29.7-29.8 (ident "a"))) + (capture @26.7-26.8 (ident "a")) + (capture @18.1-18.2 (ident "h")) + (capture @27.6-27.7 (ident "a"))) (e-lambda @18.5-31.2 (args (p-assign @18.6-18.7 (ident "x")) @@ -433,8 +433,6 @@ NO CHANGE (s-let @20.2-20.14 (p-assign @20.2-20.4 (ident "h2")) (e-call @20.7-20.14 - (e-lookup-local @20.7-20.8 - (p-assign @18.1-18.2 (ident "h"))) (e-lookup-local @20.9-20.10 (p-assign @18.6-18.7 (ident "x"))) (e-lookup-local @20.12-20.13 @@ -497,44 +495,57 @@ NO CHANGE (value (e-lookup-local @29.17-29.18 (p-assign @29.7-29.8 (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 @8.1-8.74 (ty-header @8.1-8.5 (name "A") (ty-args - (ty-var @8.3-8.4 (name "a")))) - (ty-var @8.8-8.9 (name "a"))) + (ty-rigid-var @8.3-8.4 (name "a")))) + (ty-rigid-var @8.3-8.4 (name "a"))) (s-alias-decl @9.1-9.74 (ty-header @9.1-9.5 (name "B") (ty-args - (ty-var @9.3-9.4 (name "b")))) - (ty-var @9.8-9.9 (name "b"))) + (ty-rigid-var @9.3-9.4 (name "b")))) + (ty-rigid-var @9.3-9.4 (name "b"))) (s-alias-decl @11.1-11.17 (ty-header @11.1-11.8 (name "C") (ty-args - (ty-var @11.3-11.4 (name "a")) - (ty-var @11.6-11.7 (name "b")))) + (ty-rigid-var @11.3-11.4 (name "a")) + (ty-rigid-var @11.6-11.7 (name "b")))) (ty-tuple @11.11-11.17 - (ty-var @11.12-11.13 (name "a")) - (ty-var @11.15-11.16 (name "b")))) + (ty-rigid-var @11.3-11.4 (name "a")) + (ty-rigid-var @11.6-11.7 (name "b")))) (s-alias-decl @12.1-12.18 (ty-header @12.1-12.8 (name "D") (ty-args - (ty-var @12.3-12.4 (name "a")) - (ty-var @12.6-12.7 (name "b")))) - (ty-apply @12.11-12.18 (symbol "C") - (ty-var @12.13-12.14 (name "a")) - (ty-var @12.16-12.17 (name "b")))) + (ty-rigid-var @12.3-12.4 (name "a")) + (ty-rigid-var @12.6-12.7 (name "b")))) + (ty-apply @12.11-12.18 (name "C") (local) + (ty-rigid-var @12.3-12.4 (name "a")) + (ty-rigid-var @12.6-12.7 (name "b")))) (s-alias-decl @13.1-13.25 (ty-header @13.1-13.2 (name "E")) (ty-record @13.5-13.25 (field (field "a") - (ty @13.11-13.14 (name "Str"))) + (ty-lookup @13.11-13.14 (name "Str") (builtin))) (field (field "b") - (ty @13.20-13.23 (name "Str"))))) + (ty-lookup @13.20-13.23 (name "Str") (builtin))))) (s-alias-decl @14.1-14.11 (ty-header @14.1-14.2 (name "F")) (ty-tag-union @14.5-14.11 - (ty @14.6-14.7 (name "A")) - (ty @14.9-14.10 (name "B")))) + (tag_name @14.6-14.7 (name "A")) + (tag_name @14.9-14.10 (name "B")))) (s-import @4.1-4.30 (module "I1") (exposes (exposed (name "I11") (wildcard false)) @@ -545,8 +556,8 @@ NO CHANGE (exposed (name "I22") (alias "Ias2") (wildcard false)))) (s-type-anno @16.1-16.42 (name "g") (ty-fn @16.5-16.11 (effectful false) - (ty-var @16.5-16.6 (name "e")) - (ty-var @16.10-16.11 (name "e"))) + (ty-rigid-var @16.5-16.6 (name "e")) + (ty-rigid-var @16.5-16.6 (name "e"))) (where (alias @16.18-16.29 (module-of "e") (ident "A")) (alias @16.31-16.42 (module-of "e") (ident "B")))) @@ -557,30 +568,37 @@ NO CHANGE ~~~clojure (inferred-types (defs - (patt @18.1-18.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 @18.1-18.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 @8.1-8.74 (type "A(a)") (ty-header @8.1-8.5 (name "A") (ty-args - (ty-var @8.3-8.4 (name "a"))))) + (ty-rigid-var @8.3-8.4 (name "a"))))) (alias @9.1-9.74 (type "B(b)") (ty-header @9.1-9.5 (name "B") (ty-args - (ty-var @9.3-9.4 (name "b"))))) + (ty-rigid-var @9.3-9.4 (name "b"))))) (alias @11.1-11.17 (type "C(a, b)") (ty-header @11.1-11.8 (name "C") (ty-args - (ty-var @11.3-11.4 (name "a")) - (ty-var @11.6-11.7 (name "b"))))) + (ty-rigid-var @11.3-11.4 (name "a")) + (ty-rigid-var @11.6-11.7 (name "b"))))) (alias @12.1-12.18 (type "D(a, b)") (ty-header @12.1-12.8 (name "D") (ty-args - (ty-var @12.3-12.4 (name "a")) - (ty-var @12.6-12.7 (name "b"))))) + (ty-rigid-var @12.3-12.4 (name "a")) + (ty-rigid-var @12.6-12.7 (name "b"))))) (alias @13.1-13.25 (type "E") (ty-header @13.1-13.2 (name "E"))) (alias @14.1-14.11 (type "F") (ty-header @14.1-14.2 (name "F")))) (expressions - (expr @18.5-31.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 @18.5-31.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")))) ~~~ diff --git a/test/snapshots/formatting/singleline/hosted.md b/test/snapshots/formatting/singleline/hosted.md index 1c2295b767..0326a396ac 100644 --- a/test/snapshots/formatting/singleline/hosted.md +++ b/test/snapshots/formatting/singleline/hosted.md @@ -66,11 +66,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)) ~~~ diff --git a/test/snapshots/formatting/singleline/module.md b/test/snapshots/formatting/singleline/module.md index 9b4129bad8..68467fd998 100644 --- a/test/snapshots/formatting/singleline/module.md +++ b/test/snapshots/formatting/singleline/module.md @@ -47,10 +47,23 @@ NO CHANGE (can-ir (d-let (p-assign @3.1-3.2 (ident "a")) - (e-int @3.5-3.8 (value "97"))) + (e-num @3.5-3.8 (value "97"))) (d-let (p-assign @4.1-4.2 (ident "b")) - (e-int @4.5-4.8 (value "97")))) + (e-num @4.5-4.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 @@ -58,6 +71,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.8 (type "Num(_size)")) (expr @4.5-4.8 (type "Num(_size)")))) diff --git a/test/snapshots/formatting/singleline/package.md b/test/snapshots/formatting/singleline/package.md index 1f702d9e04..591e0a8b0c 100644 --- a/test/snapshots/formatting/singleline/package.md +++ b/test/snapshots/formatting/singleline/package.md @@ -73,11 +73,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)) ~~~ diff --git a/test/snapshots/formatting/singleline/platform.md b/test/snapshots/formatting/singleline/platform.md index 647a69e940..f609974630 100644 --- a/test/snapshots/formatting/singleline/platform.md +++ b/test/snapshots/formatting/singleline/platform.md @@ -86,11 +86,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)) ~~~ diff --git a/test/snapshots/formatting/singleline_with_comma/app.md b/test/snapshots/formatting/singleline_with_comma/app.md index ae97d4781c..bb3f43d766 100644 --- a/test/snapshots/formatting/singleline_with_comma/app.md +++ b/test/snapshots/formatting/singleline_with_comma/app.md @@ -69,11 +69,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)) ~~~ diff --git a/test/snapshots/formatting/singleline_with_comma/everything.md b/test/snapshots/formatting/singleline_with_comma/everything.md index ada7a3b04f..268b37569e 100644 --- a/test/snapshots/formatting/singleline_with_comma/everything.md +++ b/test/snapshots/formatting/singleline_with_comma/everything.md @@ -513,11 +513,11 @@ h = | (p-assign @18.1-18.2 (ident "h")) (e-closure @18.5-31.2 (captures - (capture @18.1-18.2 (ident "h")) - (capture @26.7-26.8 (ident "a")) + (capture @29.7-29.8 (ident "a")) (capture @28.8-28.9 (ident "a")) - (capture @27.6-27.7 (ident "a")) - (capture @29.7-29.8 (ident "a"))) + (capture @26.7-26.8 (ident "a")) + (capture @18.1-18.2 (ident "h")) + (capture @27.6-27.7 (ident "a"))) (e-lambda @18.5-31.2 (args (p-assign @18.6-18.7 (ident "x")) @@ -545,8 +545,6 @@ h = | (s-let @20.2-20.15 (p-assign @20.2-20.4 (ident "h2")) (e-call @20.7-20.15 - (e-lookup-local @20.7-20.8 - (p-assign @18.1-18.2 (ident "h"))) (e-lookup-local @20.9-20.10 (p-assign @18.6-18.7 (ident "x"))) (e-lookup-local @20.12-20.13 @@ -609,44 +607,57 @@ h = | (value (e-lookup-local @29.18-29.19 (p-assign @29.7-29.8 (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 @8.1-8.77 (ty-header @8.1-8.5 (name "A") (ty-args - (ty-var @8.3-8.4 (name "a")))) - (ty-var @8.8-8.9 (name "a"))) + (ty-rigid-var @8.3-8.4 (name "a")))) + (ty-rigid-var @8.3-8.4 (name "a"))) (s-alias-decl @9.1-9.77 (ty-header @9.1-9.5 (name "B") (ty-args - (ty-var @9.3-9.4 (name "b")))) - (ty-var @9.8-9.9 (name "b"))) + (ty-rigid-var @9.3-9.4 (name "b")))) + (ty-rigid-var @9.3-9.4 (name "b"))) (s-alias-decl @11.1-11.19 (ty-header @11.1-11.9 (name "C") (ty-args - (ty-var @11.3-11.4 (name "a")) - (ty-var @11.6-11.7 (name "b")))) + (ty-rigid-var @11.3-11.4 (name "a")) + (ty-rigid-var @11.6-11.7 (name "b")))) (ty-tuple @11.12-11.19 - (ty-var @11.13-11.14 (name "a")) - (ty-var @11.16-11.17 (name "b")))) + (ty-rigid-var @11.3-11.4 (name "a")) + (ty-rigid-var @11.6-11.7 (name "b")))) (s-alias-decl @12.1-12.20 (ty-header @12.1-12.9 (name "D") (ty-args - (ty-var @12.3-12.4 (name "a")) - (ty-var @12.6-12.7 (name "b")))) - (ty-apply @12.12-12.20 (symbol "C") - (ty-var @12.14-12.15 (name "a")) - (ty-var @12.17-12.18 (name "b")))) + (ty-rigid-var @12.3-12.4 (name "a")) + (ty-rigid-var @12.6-12.7 (name "b")))) + (ty-apply @12.12-12.20 (name "C") (local) + (ty-rigid-var @12.3-12.4 (name "a")) + (ty-rigid-var @12.6-12.7 (name "b")))) (s-alias-decl @13.1-13.26 (ty-header @13.1-13.2 (name "E")) (ty-record @13.5-13.26 (field (field "a") - (ty @13.11-13.14 (name "Str"))) + (ty-lookup @13.11-13.14 (name "Str") (builtin))) (field (field "b") - (ty @13.20-13.23 (name "Str"))))) + (ty-lookup @13.20-13.23 (name "Str") (builtin))))) (s-alias-decl @14.1-14.12 (ty-header @14.1-14.2 (name "F")) (ty-tag-union @14.5-14.12 - (ty @14.6-14.7 (name "A")) - (ty @14.9-14.10 (name "B")))) + (tag_name @14.6-14.7 (name "A")) + (tag_name @14.9-14.10 (name "B")))) (s-import @4.1-4.31 (module "I1") (exposes (exposed (name "I11") (wildcard false)) @@ -657,8 +668,8 @@ h = | (exposed (name "I22") (alias "Ias2") (wildcard false)))) (s-type-anno @16.1-16.43 (name "g") (ty-fn @16.5-16.11 (effectful false) - (ty-var @16.5-16.6 (name "e")) - (ty-var @16.10-16.11 (name "e"))) + (ty-rigid-var @16.5-16.6 (name "e")) + (ty-rigid-var @16.5-16.6 (name "e"))) (where (alias @16.18-16.29 (module-of "e") (ident "A")) (alias @16.31-16.42 (module-of "e") (ident "B")))) @@ -669,30 +680,37 @@ h = | ~~~clojure (inferred-types (defs - (patt @18.1-18.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 @18.1-18.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 @8.1-8.77 (type "A(a)") (ty-header @8.1-8.5 (name "A") (ty-args - (ty-var @8.3-8.4 (name "a"))))) + (ty-rigid-var @8.3-8.4 (name "a"))))) (alias @9.1-9.77 (type "B(b)") (ty-header @9.1-9.5 (name "B") (ty-args - (ty-var @9.3-9.4 (name "b"))))) + (ty-rigid-var @9.3-9.4 (name "b"))))) (alias @11.1-11.19 (type "C(a, b)") (ty-header @11.1-11.9 (name "C") (ty-args - (ty-var @11.3-11.4 (name "a")) - (ty-var @11.6-11.7 (name "b"))))) + (ty-rigid-var @11.3-11.4 (name "a")) + (ty-rigid-var @11.6-11.7 (name "b"))))) (alias @12.1-12.20 (type "D(a, b)") (ty-header @12.1-12.9 (name "D") (ty-args - (ty-var @12.3-12.4 (name "a")) - (ty-var @12.6-12.7 (name "b"))))) + (ty-rigid-var @12.3-12.4 (name "a")) + (ty-rigid-var @12.6-12.7 (name "b"))))) (alias @13.1-13.26 (type "E") (ty-header @13.1-13.2 (name "E"))) (alias @14.1-14.12 (type "F") (ty-header @14.1-14.2 (name "F")))) (expressions - (expr @18.5-31.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 @18.5-31.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")))) ~~~ diff --git a/test/snapshots/formatting/singleline_with_comma/hosted.md b/test/snapshots/formatting/singleline_with_comma/hosted.md index 5412090a01..5fbfe1343b 100644 --- a/test/snapshots/formatting/singleline_with_comma/hosted.md +++ b/test/snapshots/formatting/singleline_with_comma/hosted.md @@ -72,11 +72,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)) ~~~ diff --git a/test/snapshots/formatting/singleline_with_comma/module.md b/test/snapshots/formatting/singleline_with_comma/module.md index 5da4c3ac6c..43f286c425 100644 --- a/test/snapshots/formatting/singleline_with_comma/module.md +++ b/test/snapshots/formatting/singleline_with_comma/module.md @@ -53,10 +53,23 @@ b = 'a' (can-ir (d-let (p-assign @3.1-3.2 (ident "a")) - (e-int @3.5-3.8 (value "97"))) + (e-num @3.5-3.8 (value "97"))) (d-let (p-assign @4.1-4.2 (ident "b")) - (e-int @4.5-4.8 (value "97")))) + (e-num @4.5-4.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 @@ b = 'a' (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.8 (type "Num(_size)")) (expr @4.5-4.8 (type "Num(_size)")))) diff --git a/test/snapshots/formatting/singleline_with_comma/package.md b/test/snapshots/formatting/singleline_with_comma/package.md index 7aa80bf1d6..53d01df6f9 100644 --- a/test/snapshots/formatting/singleline_with_comma/package.md +++ b/test/snapshots/formatting/singleline_with_comma/package.md @@ -84,11 +84,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)) ~~~ diff --git a/test/snapshots/formatting/singleline_with_comma/platform.md b/test/snapshots/formatting/singleline_with_comma/platform.md index 67a613e69c..214158ab0a 100644 --- a/test/snapshots/formatting/singleline_with_comma/platform.md +++ b/test/snapshots/formatting/singleline_with_comma/platform.md @@ -106,11 +106,32 @@ platform "pf" ~~~ # 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)) ~~~ diff --git a/test/snapshots/function_no_annotation.md b/test/snapshots/function_no_annotation.md index 1a45102bcc..c0ddc8c8a5 100644 --- a/test/snapshots/function_no_annotation.md +++ b/test/snapshots/function_no_annotation.md @@ -118,9 +118,6 @@ NO CHANGE (args (p-assign @9.18-9.19 (ident "n"))) (e-call @9.21-9.36 - (e-lookup-external @9.21-9.33 - (module-idx "0") - (target-node-idx "0")) (e-lookup-local @9.34-9.35 (p-assign @9.18-9.19 (ident "n")))))) (d-let @@ -133,20 +130,27 @@ NO CHANGE (args (p-assign @12.13-12.14 (ident "x"))) (e-call @12.16-12.45 - (e-lookup-local @12.16-12.29 - (p-assign @9.1-9.14 (ident "print_number!"))) (e-call @12.30-12.44 - (e-lookup-local @12.30-12.38 - (p-assign @6.1-6.9 (ident "multiply"))) (e-lookup-local @12.39-12.40 (p-assign @12.13-12.14 (ident "x"))) - (e-int @12.42-12.43 (value "2"))))))) + (e-num @12.42-12.43 (value "2"))))))) (d-let (p-assign @14.1-14.6 (ident "main!")) (e-call @14.9-14.21 - (e-lookup-local @14.9-14.17 - (p-assign @12.1-12.9 (ident "process!"))) - (e-int @14.18-14.20 (value "42")))) + (e-num @14.18-14.20 (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.17 (module "pf.Stdout") (qualifier "pf") (exposes))) ~~~ @@ -158,6 +162,14 @@ NO CHANGE (patt @9.1-9.14 (type "_arg -> _ret")) (patt @12.1-12.9 (type "Num(_size) -> _ret")) (patt @14.1-14.6 (type "_a"))) + (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.12-6.24 (type "Num(_size), Num(_size2) -> Num(_size3)")) (expr @9.17-9.36 (type "_arg -> _ret")) diff --git a/test/snapshots/fuzz_crash/fuzz_crash_001.md b/test/snapshots/fuzz_crash/fuzz_crash_001.md index b1d92d1951..45145368f5 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_001.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_001.md @@ -67,11 +67,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_002.md b/test/snapshots/fuzz_crash/fuzz_crash_002.md index 1b8e5a9d1e..d684237896 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_002.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_002.md @@ -288,11 +288,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_003.md b/test/snapshots/fuzz_crash/fuzz_crash_003.md index 4bc2b8645a..60b6018e15 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_003.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_003.md @@ -90,11 +90,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_004.md b/test/snapshots/fuzz_crash/fuzz_crash_004.md index f5b5dd7169..5ec54b9c39 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_004.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_004.md @@ -41,11 +41,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_005.md b/test/snapshots/fuzz_crash/fuzz_crash_005.md index 2e27555299..eaf601be16 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_005.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_005.md @@ -41,11 +41,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_006.md b/test/snapshots/fuzz_crash/fuzz_crash_006.md index 168ec62e67..335b769003 100644 Binary files a/test/snapshots/fuzz_crash/fuzz_crash_006.md and b/test/snapshots/fuzz_crash/fuzz_crash_006.md differ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_007.md b/test/snapshots/fuzz_crash/fuzz_crash_007.md index 5393d4b382..d0a1dd5209 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_007.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_007.md @@ -67,11 +67,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_008.md b/test/snapshots/fuzz_crash/fuzz_crash_008.md index cac7c936df..9a0b25a13c 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_008.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_008.md @@ -73,11 +73,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_009.md b/test/snapshots/fuzz_crash/fuzz_crash_009.md index c658ddb5df..9b003a3497 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_009.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_009.md @@ -125,13 +125,34 @@ foo = (d-let (p-assign @4.1-4.4 (ident "foo")) (e-string @6.5-6.12 - (e-literal @6.6-6.12 (string "onmo %"))))) + (e-literal @6.6-6.12 (string "onmo %")))) + (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 @6.5-6.12 (type "Str")))) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_010.md b/test/snapshots/fuzz_crash/fuzz_crash_010.md index 42a40d45c9..90c66e6fb1 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_010.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_010.md @@ -129,13 +129,34 @@ foo = (d-let (p-assign @3.1-3.4 (ident "foo")) (e-string @5.5-5.35 - (e-literal @5.6-5.35 (string "on (string 'onmo %')))"))))) + (e-literal @5.6-5.35 (string "on (string 'onmo %')))")))) + (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 "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 @5.5-5.35 (type "Str")))) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_011.md b/test/snapshots/fuzz_crash/fuzz_crash_011.md index c7fe7f94b3..23c6fa6d34 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_011.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_011.md @@ -76,11 +76,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_012.md b/test/snapshots/fuzz_crash/fuzz_crash_012.md index d74e2605a6..a9b57b3ffb 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_012.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_012.md @@ -119,11 +119,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_013.md b/test/snapshots/fuzz_crash/fuzz_crash_013.md index 2d6ce9a6f3..e8b1559aa4 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_013.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_013.md @@ -54,11 +54,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_014.md b/test/snapshots/fuzz_crash/fuzz_crash_014.md index 35f7441cb6..0616296d83 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_014.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_014.md @@ -86,11 +86,32 @@ EndOfFile(4:1-4:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_015.md b/test/snapshots/fuzz_crash/fuzz_crash_015.md index a6d861eebe..d02dbd3e30 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_015.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_015.md @@ -121,11 +121,32 @@ EndOfFile(5:1-5:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_016.md b/test/snapshots/fuzz_crash/fuzz_crash_016.md index fcf26ac6c0..e1cda2a040 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_016.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_016.md @@ -54,11 +54,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_017.md b/test/snapshots/fuzz_crash/fuzz_crash_017.md index 3a6f13ca4f..1c88dcf9ba 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_017.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_017.md @@ -127,13 +127,34 @@ foo = (can-ir (d-let (p-assign @2.1-2.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 @2.1-2.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 @2.7-2.20 (type "Error")))) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_018.md b/test/snapshots/fuzz_crash/fuzz_crash_018.md index 085ec65af3..2a3df91b81 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_018.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_018.md @@ -71,11 +71,32 @@ b : S ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_019.md b/test/snapshots/fuzz_crash/fuzz_crash_019.md index 3871ac3fbb..0d3610d585 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_019.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_019.md @@ -872,17 +872,70 @@ All patterns in an `match` must have compatible types. **TYPE MISMATCH** This expression is used in an unexpected way: -**fuzz_crash_019.md:84:2:84:4:** +**fuzz_crash_019.md:84:2:86:3:** ```roc me( + ..., # r + )crash ke"Unr!" #) ``` - ^^ It has the type: + __arg -> _ret_ + +But I expected it to be: _[Blue]_others, [Tb]_others2 -> Error_ -But here it's being used as: - __arg -> _ret_ +**INVALID BOOL OPERATION** +I'm having trouble with this bool operation: +**fuzz_crash_019.md:105:16:** +```roc + b?? 12 > 5 or 13 + 2 < 5 and 10 - 1 >= 16 or 12 <= 3 e_fn(arg1)?.od()?.ned()?.recd? +``` + ^^^^^^^^^^ + +Both sides of `and` must be _Bool_ values, but the left side is: + _Num(_size)_ + +Note: Roc does not have "truthiness" where other values like strings, numbers or lists are automatically converted to bools. You must do that conversion yourself! + +**INVALID BOOL OPERATION** +I'm having trouble with this bool operation: +**fuzz_crash_019.md:105:16:** +```roc + b?? 12 > 5 or 13 + 2 < 5 and 10 - 1 >= 16 or 12 <= 3 e_fn(arg1)?.od()?.ned()?.recd? +``` + ^^^^^^^^^^^^ + +Both sides of `and` must be _Bool_ values, but the right side is: + _Num(_size)_ + +Note: Roc does not have "truthiness" where other values like strings, numbers or lists are automatically converted to bools. You must do that conversion yourself! + +**INVALID BOOL OPERATION** +I'm having trouble with this bool operation: +**fuzz_crash_019.md:105:16:** +```roc + b?? 12 > 5 or 13 + 2 < 5 and 10 - 1 >= 16 or 12 <= 3 e_fn(arg1)?.od()?.ned()?.recd? +``` + ^^^^^^^ + +Both sides of `and` must be _Bool_ values, but the right side is: + _Num(_size)_ + +Note: Roc does not have "truthiness" where other values like strings, numbers or lists are automatically converted to bools. You must do that conversion yourself! + +**INVALID BOOL OPERATION** +I'm having trouble with this bool operation: +**fuzz_crash_019.md:105:2:** +```roc + b?? 12 > 5 or 13 + 2 < 5 and 10 - 1 >= 16 or 12 <= 3 e_fn(arg1)?.od()?.ned()?.recd? +``` + ^^^^^^^^^^ + +Both sides of `and` must be _Bool_ values, but the left side is: + _Num(_size)_ + +Note: Roc does not have "truthiness" where other values like strings, numbers or lists are automatically converted to bools. You must do that conversion yourself! # TOKENS ~~~zig @@ -1491,9 +1544,9 @@ expect { (if-branch (e-lookup-local @35.16-35.19 (p-assign @35.8-35.11 (ident "num"))) - (e-int @35.20-35.21 (value "2")))) + (e-num @35.20-35.21 (value "2")))) (if-else - (e-int @35.27-35.28 (value "5")))))) + (e-num @35.27-35.28 (value "5")))))) (d-let (p-assign @38.1-38.4 (ident "add")) (e-lambda @38.7-47.2 @@ -1501,7 +1554,7 @@ expect { (p-assign @38.8-38.11 (ident "num"))) (e-block @38.13-47.2 (s-expr @39.2-39.3 - (e-int @39.2-39.3 (value "1"))) + (e-num @39.2-39.3 (value "1"))) (e-if @40.2-46.3 (if-branches (if-branch @@ -1514,7 +1567,7 @@ expect { (if-else (e-block @43.9-46.3 (s-dbg @44.3-44.10 - (e-int @44.7-44.10 (value "123"))) + (e-num @44.7-44.10 (value "123"))) (e-runtime-error (tag "ident_not_in_scope")))))))) (d-let (p-assign @49.1-49.3 (ident "me")) @@ -1547,13 +1600,13 @@ expect { (pattern (degenerate false) (p-assign @57.2-57.4 (ident "er")))) (value - (e-int @58.4-58.5 (value "1")))) + (e-num @58.4-58.5 (value "1")))) (branch (patterns (pattern (degenerate false) (p-str @58.6-58.11 (text """)))) (value - (e-int @58.15-58.17 (value "20")))) + (e-num @58.15-58.17 (value "20")))) (branch (patterns (pattern (degenerate false) @@ -1572,20 +1625,20 @@ expect { (p-int @60.10-60.11 (value "3")) (p-assign @60.12-60.15 (ident "est")))))) (value - (e-int @60.16-60.19 (value "123")))) + (e-num @60.16-60.19 (value "123")))) (branch (patterns (pattern (degenerate false) (p-list @61.3-62.4 (patterns)))) (value - (e-int @62.5-62.7 (value "23")))) + (e-num @62.5-62.7 (value "23")))) (branch (patterns (pattern (degenerate false) (p-small-dec @63.3-63.6))) (value - (e-int @63.7-63.10 (value "314")))) + (e-num @63.7-63.10 (value "314")))) (branch (patterns (pattern (degenerate false) @@ -1593,7 +1646,7 @@ expect { (pattern (degenerate false) (p-small-dec @64.10-64.14))) (value - (e-int @64.18-64.21 (value "314")))) + (e-num @64.18-64.21 (value "314")))) (branch (patterns (pattern (degenerate false) @@ -1601,7 +1654,7 @@ expect { (patterns (p-int @65.4-65.5 (value "1")))))) (value - (e-int @65.12-65.15 (value "123")))) + (e-num @65.12-65.15 (value "123")))) (branch (patterns (pattern (degenerate false) @@ -1611,21 +1664,21 @@ expect { (p-int @66.7-66.8 (value "2")) (p-int @66.10-66.11 (value "3")))))) (value - (e-int @66.12-66.15 (value "123")))) + (e-num @66.12-66.15 (value "123")))) (branch (patterns (pattern (degenerate false) (p-record-destructure @67.3-67.7 (destructs)))) (value - (e-int @67.11-67.13 (value "12")))) + (e-num @67.11-67.13 (value "12")))) (branch (patterns (pattern (degenerate false) (p-nominal @68.3-68.10 (p-applied-tag @68.3-68.10)))) (value - (e-int @68.14-68.16 (value "12"))))))))) + (e-num @68.14-68.16 (value "12"))))))))) (d-let (p-assign @75.1-75.3 (ident "ma")) (e-closure @75.5-111.2 @@ -1643,7 +1696,7 @@ expect { (e-literal @76.7-76.8 (string "d")))) (s-var @77.2-77.14 (p-assign @77.2-77.14 (ident "er")) - (e-int @77.11-77.14 (value "123"))) + (e-num @77.11-77.14 (value "123"))) (s-expect @78.2-78.14 (e-runtime-error (tag "ident_not_in_scope"))) (s-return @79.2-80.6 @@ -1652,8 +1705,6 @@ expect { (e-not-implemented @1.1-1.1)) (s-expr @84.2-86.3 (e-call @84.2-86.3 - (e-lookup-local @84.2-84.4 - (p-assign @49.1-49.3 (ident "me"))) (e-not-implemented @1.1-1.1))) (s-runtime-error (tag "crash_expects_string")) (s-expr @86.11-86.17 @@ -1670,18 +1721,17 @@ expect { (e-list @88.5-91.3 (elems (e-call @89.3-89.14 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @89.7-89.9 (p-assign @77.2-77.14 (ident "er")))) - (e-int @89.16-89.19 (value "456")) - (e-int @90.1-90.2 (value "9"))))) + (e-num @89.16-89.19 (value "456")) + (e-num @90.1-90.2 (value "9"))))) (s-runtime-error (tag "not_implemented")) (s-let @96.2-96.59 (p-assign @96.2-96.4 (ident "rd")) (e-record @96.7-96.59 (fields (field (name "foo") - (e-int @96.14-96.17 (value "123"))) + (e-num @96.14-96.17 (value "123"))) (field (name "bar") (e-string @96.24-96.27 (e-literal @96.25-96.26 (string "H")))) @@ -1698,7 +1748,7 @@ expect { (p-assign @97.2-97.3 (ident "t")) (e-tuple @97.6-97.48 (elems - (e-int @97.7-97.10 (value "123")) + (e-num @97.7-97.10 (value "123")) (e-string @97.12-97.19 (e-literal @97.13-97.18 (string "World"))) (e-runtime-error (tag "ident_not_in_scope")) @@ -1710,15 +1760,15 @@ expect { (p-assign @97.2-97.3 (ident "t"))))) (e-list @97.38-97.47 (elems - (e-int @97.39-97.40 (value "1")) - (e-int @97.42-97.43 (value "2")) - (e-int @97.45-97.46 (value "3"))))))) + (e-num @97.39-97.40 (value "1")) + (e-num @97.42-97.43 (value "2")) + (e-num @97.45-97.46 (value "3"))))))) (s-expr @98.2-98.3 (e-runtime-error (tag "ident_not_in_scope"))) (s-expr @98.4-104.3 (e-tuple @98.4-104.3 (elems - (e-int @99.3-99.6 (value "123")) + (e-num @99.3-99.6 (value "123")) (e-string @100.3-100.10 (e-literal @100.4-100.9 (string "World"))) (e-runtime-error (tag "ident_not_in_scope")) @@ -1729,31 +1779,31 @@ expect { (e-runtime-error (tag "ident_not_in_scope")))) (e-list @103.3-103.12 (elems - (e-int @103.4-103.5 (value "1")) - (e-int @103.7-103.8 (value "2")) - (e-int @103.10-103.11 (value "3"))))))) + (e-num @103.4-103.5 (value "1")) + (e-num @103.7-103.8 (value "2")) + (e-num @103.10-103.11 (value "3"))))))) (s-expr @105.2-105.54 (e-binop @105.2-105.54 (op "or") (e-binop @105.2-105.12 (op "gt") (e-binop @105.2-105.8 (op "null_coalesce") (e-runtime-error (tag "ident_not_in_scope")) - (e-int @105.6-105.8 (value "12"))) - (e-int @105.11-105.12 (value "5"))) + (e-num @105.6-105.8 (value "12"))) + (e-num @105.11-105.12 (value "5"))) (e-binop @105.16-105.54 (op "or") (e-binop @105.16-105.43 (op "and") (e-binop @105.16-105.26 (op "lt") (e-binop @105.16-105.22 (op "add") - (e-int @105.16-105.18 (value "13")) - (e-int @105.21-105.22 (value "2"))) - (e-int @105.25-105.26 (value "5"))) + (e-num @105.16-105.18 (value "13")) + (e-num @105.21-105.22 (value "2"))) + (e-num @105.25-105.26 (value "5"))) (e-binop @105.31-105.43 (op "ge") (e-binop @105.31-105.37 (op "sub") - (e-int @105.31-105.33 (value "10")) - (e-int @105.36-105.37 (value "1"))) - (e-int @105.41-105.43 (value "16")))) + (e-num @105.31-105.33 (value "10")) + (e-num @105.36-105.37 (value "1"))) + (e-num @105.41-105.43 (value "16")))) (e-binop @105.47-105.54 (op "le") - (e-int @105.47-105.49 (value "12")) - (e-int @105.53-105.54 (value "3")))))) + (e-num @105.47-105.49 (value "12")) + (e-num @105.53-105.54 (value "3")))))) (s-expr @105.55-105.85 (e-dot-access @105.55-105.85 (field "unknown") (receiver @@ -1767,56 +1817,68 @@ expect { (e-string @107.3-109.6 (e-literal @107.4-107.6 (string "Ho")) (e-call @108.4-108.9 - (e-runtime-error (tag "ident_not_in_scope")) (e-runtime-error (tag "ident_not_in_scope"))) (e-literal @109.4-109.5 (string " "))))))))) (d-let (p-assign @114.1-114.2 (ident "e")) (e-empty_record @114.5-114.7)) + (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 @13.1-13.33 (ty-header @13.1-13.10 (name "Map") (ty-args - (ty-var @13.5-13.6 (name "a")) - (ty-var @13.8-13.9 (name "b")))) + (ty-rigid-var @13.5-13.6 (name "a")) + (ty-rigid-var @13.8-13.9 (name "b")))) (ty-fn @13.13-13.33 (effectful false) - (ty @13.13-13.16 (name "Lis")) + (ty-malformed @13.13-13.16) (ty-malformed @13.19-13.21) - (ty-apply @13.26-13.33 (symbol "List") - (ty-var @13.31-13.32 (name "b"))))) + (ty-apply @13.26-13.33 (name "List") (builtin) + (ty-rigid-var @13.8-13.9 (name "b"))))) (s-alias-decl @14.1-20.15 (ty-header @14.1-15.2 (name "MapML")) (ty-fn @17.3-20.15 (effectful false) - (ty-apply @17.3-18.4 (symbol "List")) + (ty-apply @17.3-18.4 (name "List") (builtin)) (ty-malformed @19.4-19.6) - (ty-apply @20.4-20.15 (symbol "List") + (ty-apply @20.4-20.15 (name "List") (builtin) (ty-malformed @20.12-20.13)))) (s-alias-decl @24.1-24.27 (ty-header @24.1-24.4 (name "Som")) (ty-record @24.7-24.27 (field (field "foo") - (ty @24.15-24.16 (name "O"))) + (ty-malformed @24.15-24.16)) (field (field "bar") (ty-malformed @24.24-24.25)))) (s-alias-decl @25.1-26.2 (ty-header @25.1-25.6 (name "Ml") (ty-args - (ty-var @25.4-25.5 (name "a")))) + (ty-rigid-var @25.4-25.5 (name "a")))) (ty-record @25.9-26.2)) (s-alias-decl @28.1-29.2 (ty-header @28.1-28.9 (name "Soine") (ty-args - (ty-var @28.7-28.8 (name "a")))) + (ty-rigid-var @28.7-28.8 (name "a")))) (ty-record @28.12-29.2)) (s-alias-decl @30.1-30.19 (ty-header @30.1-30.9 (name "Maybe") (ty-args - (ty-var @30.7-30.8 (name "a")))) + (ty-rigid-var @30.7-30.8 (name "a")))) (ty-tag-union @30.12-30.19 - (ty @30.13-30.18 (name "Somne")))) + (tag_name @30.13-30.18 (name "Somne")))) (s-alias-decl @32.1-33.2 (ty-header @32.1-32.10 (name "Mayine") (ty-args - (ty-var @32.8-32.9 (name "a")))) + (ty-rigid-var @32.8-32.9 (name "a")))) (ty-tag-union @32.13-33.2)) (s-import @4.1-4.34 (module "pf.Stdout") (qualifier "pf") (exposes @@ -1835,7 +1897,7 @@ expect { (s-expr @119.2-119.10 (e-binop @119.2-119.10 (op "eq") (e-runtime-error (tag "ident_not_in_scope")) - (e-int @119.9-119.10 (value "1")))) + (e-num @119.9-119.10 (value "1")))) (e-binop @120.1-120.9 (op "eq") (e-runtime-error (tag "ident_not_in_scope")) (e-runtime-error (tag "ident_not_in_scope")))))) @@ -1846,15 +1908,22 @@ expect { (defs (patt @35.1-35.4 (type "Bool -> Num(_size)")) (patt @38.1-38.4 (type "Bool -> Error")) - (patt @49.1-49.3 (type "Error")) + (patt @49.1-49.3 (type "[Blue]_others, [Tb]_others2 -> Error")) (patt @75.1-75.3 (type "_arg -> [Stdo!(Str)]_others")) (patt @114.1-114.2 (type "{}"))) (type_decls + (nominal @1.1-1.1 (type "Bool") + (ty-header @1.1-1.1 (name "Bool"))) + (nominal @1.1-1.1 (type "Error") + (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 @13.1-13.33 (type "Map(a, b)") (ty-header @13.1-13.10 (name "Map") (ty-args - (ty-var @13.5-13.6 (name "a")) - (ty-var @13.8-13.9 (name "b"))))) + (ty-rigid-var @13.5-13.6 (name "a")) + (ty-rigid-var @13.8-13.9 (name "b"))))) (alias @14.1-20.15 (type "MapML") (ty-header @14.1-15.2 (name "MapML"))) (alias @24.1-24.27 (type "Som") @@ -1862,23 +1931,23 @@ expect { (alias @25.1-26.2 (type "Ml(a)") (ty-header @25.1-25.6 (name "Ml") (ty-args - (ty-var @25.4-25.5 (name "a"))))) + (ty-rigid-var @25.4-25.5 (name "a"))))) (alias @28.1-29.2 (type "Soine(a)") (ty-header @28.1-28.9 (name "Soine") (ty-args - (ty-var @28.7-28.8 (name "a"))))) + (ty-rigid-var @28.7-28.8 (name "a"))))) (alias @30.1-30.19 (type "Maybe(a)") (ty-header @30.1-30.9 (name "Maybe") (ty-args - (ty-var @30.7-30.8 (name "a"))))) + (ty-rigid-var @30.7-30.8 (name "a"))))) (alias @32.1-33.2 (type "Mayine(a)") (ty-header @32.1-32.10 (name "Mayine") (ty-args - (ty-var @32.8-32.9 (name "a")))))) + (ty-rigid-var @32.8-32.9 (name "a")))))) (expressions (expr @35.7-35.28 (type "Bool -> Num(_size)")) (expr @38.7-47.2 (type "Bool -> Error")) - (expr @49.6-69.3 (type "Error")) + (expr @49.6-69.3 (type "[Blue]_others, [Tb]_others2 -> Error")) (expr @75.5-111.2 (type "_arg -> [Stdo!(Str)]_others")) (expr @114.5-114.7 (type "{}")))) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_020.md b/test/snapshots/fuzz_crash/fuzz_crash_020.md index 75e66fdc2b..113ad3e3a0 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_020.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_020.md @@ -846,7 +846,6 @@ app [main!] { pf: platform "c" } ^^^^^ You can fix this by either defining `main!` in this module, or by removing it from the list of exposed values. -**INCOMPATIBLE MATCH PATTERNS** The pattern in the fourth branch of this `match` differs from previous ones: **fuzz_crash_020.md:52:2:** ```roc @@ -881,6 +880,58 @@ All patterns in an `match` must have compatible types. +**INVALID BOOL OPERATION** +I'm having trouble with this bool operation: +**fuzz_crash_020.md:105:16:** +```roc + b?? 12 > 5 or 13 + 2 < 5 and 10 - 1 >= 16 or 12 <= 3 e_fn(arg1)?.od()?.ned()?.recd? +``` + ^^^^^^^^^^ + +Both sides of `and` must be _Bool_ values, but the left side is: + _Num(_size)_ + +Note: Roc does not have "truthiness" where other values like strings, numbers or lists are automatically converted to bools. You must do that conversion yourself! + +**INVALID BOOL OPERATION** +I'm having trouble with this bool operation: +**fuzz_crash_020.md:105:16:** +```roc + b?? 12 > 5 or 13 + 2 < 5 and 10 - 1 >= 16 or 12 <= 3 e_fn(arg1)?.od()?.ned()?.recd? +``` + ^^^^^^^^^^^^ + +Both sides of `and` must be _Bool_ values, but the right side is: + _Num(_size)_ + +Note: Roc does not have "truthiness" where other values like strings, numbers or lists are automatically converted to bools. You must do that conversion yourself! + +**INVALID BOOL OPERATION** +I'm having trouble with this bool operation: +**fuzz_crash_020.md:105:16:** +```roc + b?? 12 > 5 or 13 + 2 < 5 and 10 - 1 >= 16 or 12 <= 3 e_fn(arg1)?.od()?.ned()?.recd? +``` + ^^^^^^^ + +Both sides of `and` must be _Bool_ values, but the right side is: + _Num(_size)_ + +Note: Roc does not have "truthiness" where other values like strings, numbers or lists are automatically converted to bools. You must do that conversion yourself! + +**INVALID BOOL OPERATION** +I'm having trouble with this bool operation: +**fuzz_crash_020.md:105:2:** +```roc + b?? 12 > 5 or 13 + 2 < 5 and 10 - 1 >= 16 or 12 <= 3 e_fn(arg1)?.od()?.ned()?.recd? +``` + ^^^^^^^^^^ + +Both sides of `and` must be _Bool_ values, but the left side is: + _Num(_size)_ + +Note: Roc does not have "truthiness" where other values like strings, numbers or lists are automatically converted to bools. You must do that conversion yourself! + # TOKENS ~~~zig KwApp(2:1-2:4),OpenSquare(2:5-2:6),LowerIdent(2:6-2:11),CloseSquare(2:11-2:12),OpenCurly(2:13-2:14),LowerIdent(2:15-2:17),OpColon(2:17-2:18),KwPlatform(2:19-2:27),StringStart(2:28-2:29),StringPart(2:29-2:30),StringEnd(2:30-2:31),CloseCurly(2:32-2:33), @@ -1486,9 +1537,9 @@ expect { (if-branch (e-lookup-local @35.16-35.19 (p-assign @35.8-35.11 (ident "num"))) - (e-int @35.20-35.21 (value "2")))) + (e-num @35.20-35.21 (value "2")))) (if-else - (e-int @35.27-35.28 (value "5")))))) + (e-num @35.27-35.28 (value "5")))))) (d-let (p-assign @38.1-38.4 (ident "add")) (e-lambda @38.7-47.2 @@ -1496,7 +1547,7 @@ expect { (p-applied-tag @38.8-38.11)) (e-block @38.13-47.2 (s-expr @39.2-39.3 - (e-int @39.2-39.3 (value "1"))) + (e-num @39.2-39.3 (value "1"))) (e-if @40.2-46.3 (if-branches (if-branch @@ -1508,7 +1559,7 @@ expect { (if-else (e-block @43.9-46.3 (s-dbg @44.3-44.10 - (e-int @44.7-44.10 (value "123"))) + (e-num @44.7-44.10 (value "123"))) (e-runtime-error (tag "ident_not_in_scope")))))))) (d-let (p-assign @49.1-49.3 (ident "me")) @@ -1540,13 +1591,13 @@ expect { (pattern (degenerate false) (p-assign @57.2-57.4 (ident "er")))) (value - (e-int @58.4-58.5 (value "1")))) + (e-num @58.4-58.5 (value "1")))) (branch (patterns (pattern (degenerate false) (p-str @58.6-58.11 (text """)))) (value - (e-int @58.15-58.17 (value "20")))) + (e-num @58.15-58.17 (value "20")))) (branch (patterns (pattern (degenerate false) @@ -1565,20 +1616,20 @@ expect { (p-int @60.10-60.11 (value "3")) (p-assign @60.12-60.15 (ident "est")))))) (value - (e-int @60.16-60.19 (value "123")))) + (e-num @60.16-60.19 (value "123")))) (branch (patterns (pattern (degenerate false) (p-list @61.3-62.4 (patterns)))) (value - (e-int @62.5-62.7 (value "23")))) + (e-num @62.5-62.7 (value "23")))) (branch (patterns (pattern (degenerate false) (p-small-dec @63.3-63.6))) (value - (e-int @63.7-63.10 (value "314")))) + (e-num @63.7-63.10 (value "314")))) (branch (patterns (pattern (degenerate false) @@ -1586,7 +1637,7 @@ expect { (pattern (degenerate false) (p-small-dec @64.10-64.14))) (value - (e-int @64.18-64.21 (value "314")))) + (e-num @64.18-64.21 (value "314")))) (branch (patterns (pattern (degenerate false) @@ -1594,7 +1645,7 @@ expect { (patterns (p-int @65.4-65.5 (value "1")))))) (value - (e-int @65.12-65.15 (value "123")))) + (e-num @65.12-65.15 (value "123")))) (branch (patterns (pattern (degenerate false) @@ -1604,21 +1655,21 @@ expect { (p-int @66.7-66.8 (value "2")) (p-int @66.10-66.11 (value "3")))))) (value - (e-int @66.12-66.15 (value "123")))) + (e-num @66.12-66.15 (value "123")))) (branch (patterns (pattern (degenerate false) (p-record-destructure @67.3-67.7 (destructs)))) (value - (e-int @67.11-67.13 (value "12")))) + (e-num @67.11-67.13 (value "12")))) (branch (patterns (pattern (degenerate false) (p-nominal @68.3-68.10 (p-applied-tag @68.3-68.10)))) (value - (e-int @68.14-68.16 (value "12"))))))))) + (e-num @68.14-68.16 (value "12"))))))))) (d-let (p-assign @75.1-75.3 (ident "ma")) (e-closure @75.5-111.2 @@ -1636,7 +1687,7 @@ expect { (e-literal @76.7-76.8 (string "d")))) (s-var @77.2-77.14 (p-assign @77.2-77.14 (ident "er")) - (e-int @77.11-77.14 (value "123"))) + (e-num @77.11-77.14 (value "123"))) (s-expect @78.2-78.14 (e-runtime-error (tag "ident_not_in_scope"))) (s-return @79.2-80.6 @@ -1645,8 +1696,6 @@ expect { (e-not-implemented @1.1-1.1)) (s-expr @84.2-86.3 (e-call @84.2-86.3 - (e-lookup-local @84.2-84.4 - (p-assign @49.1-49.3 (ident "me"))) (e-not-implemented @1.1-1.1))) (s-runtime-error (tag "crash_expects_string")) (s-expr @86.11-86.17 @@ -1663,18 +1712,17 @@ expect { (e-list @88.5-91.3 (elems (e-call @89.3-89.14 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @89.7-89.9 (p-assign @77.2-77.14 (ident "er")))) - (e-int @89.16-89.19 (value "456")) - (e-int @90.1-90.2 (value "9"))))) + (e-num @89.16-89.19 (value "456")) + (e-num @90.1-90.2 (value "9"))))) (s-runtime-error (tag "not_implemented")) (s-let @96.2-96.59 (p-assign @96.2-96.4 (ident "rd")) (e-record @96.7-96.59 (fields (field (name "foo") - (e-int @96.14-96.17 (value "123"))) + (e-num @96.14-96.17 (value "123"))) (field (name "bar") (e-string @96.24-96.27 (e-literal @96.25-96.26 (string "H")))) @@ -1691,7 +1739,7 @@ expect { (p-assign @97.2-97.3 (ident "t")) (e-tuple @97.6-97.48 (elems - (e-int @97.7-97.10 (value "123")) + (e-num @97.7-97.10 (value "123")) (e-string @97.12-97.19 (e-literal @97.13-97.18 (string "World"))) (e-runtime-error (tag "ident_not_in_scope")) @@ -1703,15 +1751,15 @@ expect { (p-assign @97.2-97.3 (ident "t"))))) (e-list @97.38-97.47 (elems - (e-int @97.39-97.40 (value "1")) - (e-int @97.42-97.43 (value "2")) - (e-int @97.45-97.46 (value "3"))))))) + (e-num @97.39-97.40 (value "1")) + (e-num @97.42-97.43 (value "2")) + (e-num @97.45-97.46 (value "3"))))))) (s-expr @98.2-98.3 (e-runtime-error (tag "ident_not_in_scope"))) (s-expr @98.4-104.3 (e-tuple @98.4-104.3 (elems - (e-int @99.3-99.6 (value "123")) + (e-num @99.3-99.6 (value "123")) (e-string @100.3-100.10 (e-literal @100.4-100.9 (string "World"))) (e-runtime-error (tag "ident_not_in_scope")) @@ -1722,31 +1770,31 @@ expect { (e-runtime-error (tag "ident_not_in_scope")))) (e-list @103.3-103.12 (elems - (e-int @103.4-103.5 (value "1")) - (e-int @103.7-103.8 (value "2")) - (e-int @103.10-103.11 (value "3"))))))) + (e-num @103.4-103.5 (value "1")) + (e-num @103.7-103.8 (value "2")) + (e-num @103.10-103.11 (value "3"))))))) (s-expr @105.2-105.54 (e-binop @105.2-105.54 (op "or") (e-binop @105.2-105.12 (op "gt") (e-binop @105.2-105.8 (op "null_coalesce") (e-runtime-error (tag "ident_not_in_scope")) - (e-int @105.6-105.8 (value "12"))) - (e-int @105.11-105.12 (value "5"))) + (e-num @105.6-105.8 (value "12"))) + (e-num @105.11-105.12 (value "5"))) (e-binop @105.16-105.54 (op "or") (e-binop @105.16-105.43 (op "and") (e-binop @105.16-105.26 (op "lt") (e-binop @105.16-105.22 (op "add") - (e-int @105.16-105.18 (value "13")) - (e-int @105.21-105.22 (value "2"))) - (e-int @105.25-105.26 (value "5"))) + (e-num @105.16-105.18 (value "13")) + (e-num @105.21-105.22 (value "2"))) + (e-num @105.25-105.26 (value "5"))) (e-binop @105.31-105.43 (op "ge") (e-binop @105.31-105.37 (op "sub") - (e-int @105.31-105.33 (value "10")) - (e-int @105.36-105.37 (value "1"))) - (e-int @105.41-105.43 (value "16")))) + (e-num @105.31-105.33 (value "10")) + (e-num @105.36-105.37 (value "1"))) + (e-num @105.41-105.43 (value "16")))) (e-binop @105.47-105.54 (op "le") - (e-int @105.47-105.49 (value "12")) - (e-int @105.53-105.54 (value "3")))))) + (e-num @105.47-105.49 (value "12")) + (e-num @105.53-105.54 (value "3")))))) (s-expr @105.55-105.85 (e-dot-access @105.55-105.85 (field "unknown") (receiver @@ -1760,56 +1808,68 @@ expect { (e-string @107.3-109.6 (e-literal @107.4-107.6 (string "Ho")) (e-call @108.4-108.9 - (e-runtime-error (tag "ident_not_in_scope")) (e-runtime-error (tag "ident_not_in_scope"))) (e-literal @109.4-109.5 (string " "))))))))) (d-let (p-assign @114.1-114.2 (ident "e")) (e-empty_record @114.5-114.7)) + (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 @13.1-13.33 (ty-header @13.1-13.10 (name "Map") (ty-args - (ty-var @13.5-13.6 (name "a")) - (ty-var @13.8-13.9 (name "b")))) + (ty-rigid-var @13.5-13.6 (name "a")) + (ty-rigid-var @13.8-13.9 (name "b")))) (ty-fn @13.13-13.33 (effectful false) - (ty @13.13-13.16 (name "Lis")) + (ty-malformed @13.13-13.16) (ty-malformed @13.19-13.21) - (ty-apply @13.26-13.33 (symbol "List") - (ty-var @13.31-13.32 (name "b"))))) + (ty-apply @13.26-13.33 (name "List") (builtin) + (ty-rigid-var @13.8-13.9 (name "b"))))) (s-alias-decl @14.1-20.15 (ty-header @14.1-15.2 (name "MapML")) (ty-fn @17.3-20.15 (effectful false) - (ty-apply @17.3-18.4 (symbol "List")) + (ty-apply @17.3-18.4 (name "List") (builtin)) (ty-malformed @19.4-19.6) - (ty-apply @20.4-20.15 (symbol "List") + (ty-apply @20.4-20.15 (name "List") (builtin) (ty-malformed @20.12-20.13)))) (s-alias-decl @24.1-24.27 (ty-header @24.1-24.4 (name "Som")) (ty-record @24.7-24.27 (field (field "foo") - (ty @24.15-24.16 (name "O"))) + (ty-malformed @24.15-24.16)) (field (field "bar") (ty-malformed @24.24-24.25)))) (s-alias-decl @25.1-26.2 (ty-header @25.1-25.6 (name "Ml") (ty-args - (ty-var @25.4-25.5 (name "a")))) + (ty-rigid-var @25.4-25.5 (name "a")))) (ty-record @25.9-26.2)) (s-alias-decl @28.1-29.2 (ty-header @28.1-28.9 (name "Soine") (ty-args - (ty-var @28.7-28.8 (name "a")))) + (ty-rigid-var @28.7-28.8 (name "a")))) (ty-record @28.12-29.2)) (s-alias-decl @30.1-30.19 (ty-header @30.1-30.9 (name "Maybe") (ty-args - (ty-var @30.7-30.8 (name "a")))) + (ty-rigid-var @30.7-30.8 (name "a")))) (ty-tag-union @30.12-30.19 - (ty @30.13-30.18 (name "Somne")))) + (tag_name @30.13-30.18 (name "Somne")))) (s-alias-decl @32.1-33.2 (ty-header @32.1-32.10 (name "Mayine") (ty-args - (ty-var @32.8-32.9 (name "a")))) + (ty-rigid-var @32.8-32.9 (name "a")))) (ty-tag-union @32.13-33.2)) (s-import @4.1-4.34 (module "pf.Stdout") (qualifier "pf") (exposes @@ -1828,7 +1888,7 @@ expect { (s-expr @119.2-119.10 (e-binop @119.2-119.10 (op "eq") (e-runtime-error (tag "ident_not_in_scope")) - (e-int @119.9-119.10 (value "1")))) + (e-num @119.9-119.10 (value "1")))) (e-binop @120.1-120.9 (op "eq") (e-runtime-error (tag "ident_not_in_scope")) (e-runtime-error (tag "ident_not_in_scope")))))) @@ -1843,11 +1903,18 @@ expect { (patt @75.1-75.3 (type "_arg -> [Stdo!(Str)]_others")) (patt @114.1-114.2 (type "{}"))) (type_decls + (nominal @1.1-1.1 (type "Bool") + (ty-header @1.1-1.1 (name "Bool"))) + (nominal @1.1-1.1 (type "Error") + (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 @13.1-13.33 (type "Map(a, b)") (ty-header @13.1-13.10 (name "Map") (ty-args - (ty-var @13.5-13.6 (name "a")) - (ty-var @13.8-13.9 (name "b"))))) + (ty-rigid-var @13.5-13.6 (name "a")) + (ty-rigid-var @13.8-13.9 (name "b"))))) (alias @14.1-20.15 (type "MapML") (ty-header @14.1-15.2 (name "MapML"))) (alias @24.1-24.27 (type "Som") @@ -1855,19 +1922,19 @@ expect { (alias @25.1-26.2 (type "Ml(a)") (ty-header @25.1-25.6 (name "Ml") (ty-args - (ty-var @25.4-25.5 (name "a"))))) + (ty-rigid-var @25.4-25.5 (name "a"))))) (alias @28.1-29.2 (type "Soine(a)") (ty-header @28.1-28.9 (name "Soine") (ty-args - (ty-var @28.7-28.8 (name "a"))))) + (ty-rigid-var @28.7-28.8 (name "a"))))) (alias @30.1-30.19 (type "Maybe(a)") (ty-header @30.1-30.9 (name "Maybe") (ty-args - (ty-var @30.7-30.8 (name "a"))))) + (ty-rigid-var @30.7-30.8 (name "a"))))) (alias @32.1-33.2 (type "Mayine(a)") (ty-header @32.1-32.10 (name "Mayine") (ty-args - (ty-var @32.8-32.9 (name "a")))))) + (ty-rigid-var @32.8-32.9 (name "a")))))) (expressions (expr @35.7-35.28 (type "Bool -> Num(_size)")) (expr @38.7-47.2 (type "[Rum]_others -> Error")) diff --git a/test/snapshots/fuzz_crash/fuzz_crash_021.md b/test/snapshots/fuzz_crash/fuzz_crash_021.md index 2e3bb28968..333d03739f 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_021.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_021.md @@ -175,6 +175,19 @@ EndOfFile(4:1-4:1), # 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.15 (ty-header @3.1-3.11 (name "")) (ty-malformed @3.14-3.15))) @@ -184,7 +197,14 @@ EndOfFile(4:1-4:1), (inferred-types (defs) (type_decls - (alias @3.1-3.15 (type "Error") + (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.15 (type "") (ty-header @3.1-3.11 (name "")))) (expressions)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_022.md b/test/snapshots/fuzz_crash/fuzz_crash_022.md index 793dc8987c..9d2665ab9f 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_022.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_022.md @@ -221,12 +221,23 @@ ain! = |_| getUser(900) (args (p-underscore @8.10-8.11)) (e-call @8.13-8.25 - (e-lookup-local @8.13-8.20 - (p-assign @6.1-6.8 (ident "getUser"))) - (e-int @8.21-8.24 (value "900")))))) + (e-num @8.21-8.24 (value "900")))))) + (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.13 (ty-header @3.1-3.7 (name "UserId")) - (ty @3.10-3.13 (name "U64")))) + (ty-lookup @3.10-3.13 (name "U64") (builtin)))) ~~~ # TYPES ~~~clojure @@ -235,6 +246,13 @@ ain! = |_| getUser(900) (patt @6.1-6.8 (type "_arg -> Error")) (patt @8.2-8.6 (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"))))) (alias @3.1-3.13 (type "UserId") (ty-header @3.1-3.7 (name "UserId")))) (expressions diff --git a/test/snapshots/fuzz_crash/fuzz_crash_024.md b/test/snapshots/fuzz_crash/fuzz_crash_024.md index 4a9c51331c..75806b0ac4 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_024.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_024.md @@ -224,7 +224,20 @@ t = 0 (e-runtime-error (tag "expr_not_canonicalized"))) (d-let (p-assign @7.5-7.6 (ident "t")) - (e-int @7.8-7.9 (value "0")))) + (e-num @7.8-7.9 (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 @@ -232,6 +245,14 @@ t = 0 (defs (patt @4.5-4.6 (type "Error")) (patt @7.5-7.6 (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.8-4.9 (type "Error")) (expr @7.8-7.9 (type "Num(_size)")))) diff --git a/test/snapshots/fuzz_crash/fuzz_crash_025.md b/test/snapshots/fuzz_crash/fuzz_crash_025.md index fc3b1d3e92..2d11685540 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_025.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_025.md @@ -152,11 +152,13 @@ e = 3402823669209384634633746074317682114553.14: I8 ``` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The type annotation says it should have the type: - _U128_ +It has the type: + _Num(Frac(_size))_ -But here it's being used as: - _Frac(_size)_ +But the type annotation says it should have the type: + _Num(Int(Unsigned128))_ + +**Hint:** This might be because the numeric literal is either negative or too large to fit in the unsigned type. # TOKENS ~~~zig @@ -271,72 +273,93 @@ j = -17011687303715884105728 (can-ir (d-let (p-assign @4.1-4.2 (ident "a")) - (e-int @4.5-4.8 (value "255")) + (e-num @4.5-4.8 (value "255")) (annotation @4.1-4.2 (declared-type - (ty @3.5-3.7 (name "U8"))))) + (ty-lookup @3.5-3.7 (name "U8") (builtin))))) (d-let (p-assign @7.1-7.2 (ident "b")) - (e-int @7.5-7.10 (value "65535")) + (e-num @7.5-7.10 (value "65535")) (annotation @7.1-7.2 (declared-type - (ty @6.5-6.8 (name "U16"))))) + (ty-lookup @6.5-6.8 (name "U16") (builtin))))) (d-let (p-assign @10.1-10.2 (ident "c")) - (e-int @10.5-10.14 (value "429496729")) + (e-num @10.5-10.14 (value "429496729")) (annotation @10.1-10.2 (declared-type - (ty @9.5-9.8 (name "U32"))))) + (ty-lookup @9.5-9.8 (name "U32") (builtin))))) (d-let (p-assign @14.1-14.2 (ident "e")) (e-frac-f64 @14.5-14.48 (value "3.4028236692093846e39")) (annotation @14.1-14.2 (declared-type - (ty @13.5-13.9 (name "U128"))))) + (ty-lookup @13.5-13.9 (name "U128") (builtin))))) (d-let (p-assign @18.1-18.2 (ident "g")) - (e-int @18.5-18.11 (value "-32768")) + (e-num @18.5-18.11 (value "-32768")) (annotation @18.1-18.2 (declared-type - (ty @17.5-17.8 (name "I16"))))) + (ty-lookup @17.5-17.8 (name "I16") (builtin))))) (d-let (p-assign @21.1-21.2 (ident "h")) - (e-int @21.5-21.12 (value "-483648")) + (e-num @21.5-21.12 (value "-483648")) (annotation @21.1-21.2 (declared-type - (ty @20.5-20.8 (name "I32"))))) + (ty-lookup @20.5-20.8 (name "I32") (builtin))))) (d-let (p-assign @24.1-24.2 (ident "i")) - (e-int @24.5-24.17 (value "-92233725808")) + (e-num @24.5-24.17 (value "-92233725808")) (annotation @24.1-24.2 (declared-type - (ty @23.5-23.8 (name "I64"))))) + (ty-lookup @23.5-23.8 (name "I64") (builtin))))) (d-let (p-assign @27.1-27.2 (ident "j")) - (e-int @27.5-27.29 (value "-17011687303715884105728")) + (e-num @27.5-27.29 (value "-17011687303715884105728")) (annotation @27.1-27.2 (declared-type - (ty @26.5-26.9 (name "I128")))))) + (ty-lookup @26.5-26.9 (name "I128") (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.2 (type "U8")) - (patt @7.1-7.2 (type "U16")) - (patt @10.1-10.2 (type "U32")) + (patt @4.1-4.2 (type "Num(Int(Unsigned8))")) + (patt @7.1-7.2 (type "Num(Int(Unsigned16))")) + (patt @10.1-10.2 (type "Num(Int(Unsigned32))")) (patt @14.1-14.2 (type "Error")) - (patt @18.1-18.2 (type "I16")) - (patt @21.1-21.2 (type "I32")) - (patt @24.1-24.2 (type "I64")) - (patt @27.1-27.2 (type "I128"))) + (patt @18.1-18.2 (type "Num(Int(Signed16))")) + (patt @21.1-21.2 (type "Num(Int(Signed32))")) + (patt @24.1-24.2 (type "Num(Int(Signed64))")) + (patt @27.1-27.2 (type "Num(Int(Signed128))"))) + (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.8 (type "U8")) - (expr @7.5-7.10 (type "U16")) - (expr @10.5-10.14 (type "U32")) + (expr @4.5-4.8 (type "Num(Int(Unsigned8))")) + (expr @7.5-7.10 (type "Num(Int(Unsigned16))")) + (expr @10.5-10.14 (type "Num(Int(Unsigned32))")) (expr @14.5-14.48 (type "Error")) - (expr @18.5-18.11 (type "I16")) - (expr @21.5-21.12 (type "I32")) - (expr @24.5-24.17 (type "I64")) - (expr @27.5-27.29 (type "I128")))) + (expr @18.5-18.11 (type "Num(Int(Signed16))")) + (expr @21.5-21.12 (type "Num(Int(Signed32))")) + (expr @24.5-24.17 (type "Num(Int(Signed64))")) + (expr @27.5-27.29 (type "Num(Int(Signed128))")))) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_026.md b/test/snapshots/fuzz_crash/fuzz_crash_026.md index b3bb2fa38c..f71592fc49 100644 Binary files a/test/snapshots/fuzz_crash/fuzz_crash_026.md and b/test/snapshots/fuzz_crash/fuzz_crash_026.md differ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_028.md b/test/snapshots/fuzz_crash/fuzz_crash_028.md index 93d3c96a15..b948766d02 100644 Binary files a/test/snapshots/fuzz_crash/fuzz_crash_028.md and b/test/snapshots/fuzz_crash/fuzz_crash_028.md differ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_029.md b/test/snapshots/fuzz_crash/fuzz_crash_029.md index fcd2ad2e43..24b617851d 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_029.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_029.md @@ -456,11 +456,32 @@ pkg : ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_030.md b/test/snapshots/fuzz_crash/fuzz_crash_030.md index 203958af24..1f9d8327f1 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_030.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_030.md @@ -213,11 +213,32 @@ EndOfFile(17:1-17:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_031.md b/test/snapshots/fuzz_crash/fuzz_crash_031.md index 5839967f8b..75cb4a8fea 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_031.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_031.md @@ -118,13 +118,34 @@ t = (can-ir (d-let (p-assign @4.7-4.8 (ident "t")) - (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 @4.7-4.8 (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.10-4.11 (type "Error")))) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_032.md b/test/snapshots/fuzz_crash/fuzz_crash_032.md index 4c7dad55c6..07c402fb59 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_032.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_032.md @@ -365,21 +365,41 @@ olor = |color| { (declared-type (ty-fn @5.8-5.16 (effectful false) (ty-underscore @1.1-1.1) - (ty-var @5.13-5.16 (name "tus")))))) + (ty-rigid-var @5.13-5.16 (name "tus")))))) + (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.24 (ty-header @3.1-3.12 (name "LocalStatus")) (ty-fn @3.14-3.24 (effectful true) (ty-malformed @3.14-3.17) - (ty @3.21-3.24 (name "Loc"))))) + (ty-malformed @3.21-3.24)))) ~~~ # TYPES ~~~clojure (inferred-types (defs - (patt @6.1-6.5 (type "Error -> Error"))) + (patt @6.1-6.5 (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"))))) (alias @3.1-3.24 (type "LocalStatus") (ty-header @3.1-3.12 (name "LocalStatus")))) (expressions - (expr @6.8-12.2 (type "Error -> Error")))) + (expr @6.8-12.2 (type "_arg -> Error")))) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_034.md b/test/snapshots/fuzz_crash/fuzz_crash_034.md index 1a42fa006b..a398179159 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_034.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_034.md @@ -53,11 +53,32 @@ module [] ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_035.md b/test/snapshots/fuzz_crash/fuzz_crash_035.md index 6e7bc042f9..bcc7a014a3 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_035.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_035.md @@ -41,11 +41,32 @@ module [] ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_036.md b/test/snapshots/fuzz_crash/fuzz_crash_036.md index 4ed6f53f67..54c8241af1 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_036.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_036.md @@ -66,11 +66,32 @@ module [] ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_037.md b/test/snapshots/fuzz_crash/fuzz_crash_037.md index 8d23a72d50..7e6a4e175a 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_037.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_037.md @@ -86,11 +86,32 @@ module [] ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_038.md b/test/snapshots/fuzz_crash/fuzz_crash_038.md index 7709218b7d..ff3d15fb23 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_038.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_038.md @@ -54,11 +54,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_039.md b/test/snapshots/fuzz_crash/fuzz_crash_039.md index b959e526e1..79941d588a 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_039.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_039.md @@ -52,11 +52,32 @@ EndOfFile(3:1-3:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_040.md b/test/snapshots/fuzz_crash/fuzz_crash_040.md index 99a0c477df..801d2e7169 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_040.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_040.md @@ -89,11 +89,32 @@ o : ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_041.md b/test/snapshots/fuzz_crash/fuzz_crash_041.md index 71f34c7fcf..905d316694 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_041.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_041.md @@ -151,11 +151,32 @@ app [] { f: platform "" } ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_042.md b/test/snapshots/fuzz_crash/fuzz_crash_042.md index c66aeab519..1896da0bae 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_042.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_042.md @@ -72,6 +72,19 @@ g : r -> R.a.E # 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-import @1.9-1.19 (module "u.R") (qualifier "u") (exposes))) ~~~ @@ -79,5 +92,13 @@ g : r -> R.a.E ~~~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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_043.md b/test/snapshots/fuzz_crash/fuzz_crash_043.md index 717e632cc5..9789001e2c 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_043.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_043.md @@ -102,11 +102,32 @@ o : ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_044.md b/test/snapshots/fuzz_crash/fuzz_crash_044.md index dcfc7120bc..a110c050bd 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_044.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_044.md @@ -146,11 +146,32 @@ app [] { f: platform "" } ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_045.md b/test/snapshots/fuzz_crash/fuzz_crash_045.md index 4ac86969ee..8af48b3e3f 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_045.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_045.md @@ -37,11 +37,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_046.md b/test/snapshots/fuzz_crash/fuzz_crash_046.md index b29247b85b..2fd5136743 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_046.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_046.md @@ -53,11 +53,32 @@ app [] { f: platform "" } ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_047.md b/test/snapshots/fuzz_crash/fuzz_crash_047.md index 3fefbc058c..809c8c26dc 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_047.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_047.md @@ -70,7 +70,7 @@ updated = { (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-5.11 @@ -79,15 +79,36 @@ updated = { (p-assign @3.1-3.7 (ident "person")))) (fields (field (name "age") - (e-int @5.7-5.9 (value "31"))))))) + (e-num @5.7-5.9 (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-5.11 (type "{ age: Num(_size) }")))) + (expr @4.11-5.11 (type "{ age: Num(_size), { name: Str, age: Num(_size2) } }")))) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_048.md b/test/snapshots/fuzz_crash/fuzz_crash_048.md index 92fd10912a..441c058655 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_048.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_048.md @@ -126,11 +126,32 @@ tag_tuple : Value((a, b, c)) ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_050.md b/test/snapshots/fuzz_crash/fuzz_crash_050.md index e38e420f90..e0694f0eac 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_050.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_050.md @@ -79,13 +79,34 @@ _0 = { (d-let (p-assign @1.9-1.11 (ident "_0")) (e-block @1.12-2.2 - (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 @1.9-1.11 (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 @1.12-2.2 (type "Error")))) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_051.md b/test/snapshots/fuzz_crash/fuzz_crash_051.md index f00ea3172c..72b314e147 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_051.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_051.md @@ -50,11 +50,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_052.md b/test/snapshots/fuzz_crash/fuzz_crash_052.md index 390abd8988..278db3e1e5 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_052.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_052.md @@ -60,6 +60,19 @@ import # 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-import @1.9-2.2 (module "S") (exposes))) ~~~ @@ -67,5 +80,13 @@ import ~~~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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_053.md b/test/snapshots/fuzz_crash/fuzz_crash_053.md index 56bb1d5035..7c73a4bb66 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_053.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_053.md @@ -50,11 +50,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_054.md b/test/snapshots/fuzz_crash/fuzz_crash_054.md index c25758a0bd..23e5c96465 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_054.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_054.md @@ -57,6 +57,19 @@ import S exposing [ # 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-import @1.20-2.3 (module "S") (exposes (exposed (name "c") (alias "f") (wildcard false))))) @@ -65,5 +78,13 @@ import S exposing [ ~~~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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_055.md b/test/snapshots/fuzz_crash/fuzz_crash_055.md index f1c6ed3c51..823c91b73c 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_055.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_055.md @@ -41,17 +41,38 @@ r : a # 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-type-anno @1.9-2.14 (name "r") - (ty-var @1.11-1.12 (name "a")) + (ty-rigid-var @1.11-1.12 (name "a")) (where (method @2.1-2.14 (module-of "a") (ident "h") (args) - (ty-var @2.13-2.14 (name "s"))))) + (ty-rigid-var @2.13-2.14 (name "s"))))) (ext-decl @2.1-2.14 (ident "module(a).h") (kind "value"))) ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_056.md b/test/snapshots/fuzz_crash/fuzz_crash_056.md index 168d5d147f..ab0470a39f 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_056.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_056.md @@ -42,11 +42,32 @@ app [] { f: platform "", r: "", o: "" } ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_057.md b/test/snapshots/fuzz_crash/fuzz_crash_057.md index 47399b33a4..020eee1dff 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_057.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_057.md @@ -53,19 +53,40 @@ u : o # 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-type-anno @1.9-1.36 (name "s") (ty-fn @1.11-1.15 (effectful false) - (ty-var @1.11-1.12 (name "b")) - (ty-var @1.14-1.15 (name "c"))) + (ty-rigid-var @1.11-1.12 (name "b")) + (ty-rigid-var @1.14-1.15 (name "c"))) (where (method @1.22-1.35 (module-of "a") (ident "t") (args) - (ty-var @1.34-1.35 (name "c"))))) + (ty-rigid-var @1.14-1.15 (name "c"))))) (ext-decl @1.22-1.35 (ident "module(a).t") (kind "value"))) ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_058.md b/test/snapshots/fuzz_crash/fuzz_crash_058.md index f72a342c3b..c26df16951 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_058.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_058.md @@ -52,11 +52,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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_059.md b/test/snapshots/fuzz_crash/fuzz_crash_059.md index a1354e7e8e..6e3538c1ab 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_059.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_059.md @@ -156,6 +156,19 @@ G # 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-import @1.20-2.2 (module "B") (alias "G") (exposes))) ~~~ @@ -163,5 +176,13 @@ G ~~~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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_060.md b/test/snapshots/fuzz_crash/fuzz_crash_060.md index 4657e1d88d..ec0e9d79bd 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_060.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_060.md @@ -219,6 +219,19 @@ C : k # 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 @1.9-1.12 (ty-header @1.9-1.10 (name "C")) (ty-malformed @1.11-1.12))) @@ -228,7 +241,14 @@ C : k (inferred-types (defs) (type_decls - (alias @1.9-1.12 (type "Error") + (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 @1.9-1.12 (type "C") (ty-header @1.9-1.10 (name "C")))) (expressions)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_061.md b/test/snapshots/fuzz_crash/fuzz_crash_061.md index 4a09c9a5d7..989114153b 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_061.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_061.md @@ -74,11 +74,32 @@ EndOfFile(3:1-3:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_062.md b/test/snapshots/fuzz_crash/fuzz_crash_062.md index 60c3ba91c4..1e09f91d02 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_062.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_062.md @@ -52,11 +52,32 @@ EndOfFile(3:1-3:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_063.md b/test/snapshots/fuzz_crash/fuzz_crash_063.md index 2e53586619..0b019441a5 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_063.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_063.md @@ -50,11 +50,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_064.md b/test/snapshots/fuzz_crash/fuzz_crash_064.md index af2b603647..ffb2479240 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_064.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_064.md @@ -41,11 +41,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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_065.md b/test/snapshots/fuzz_crash/fuzz_crash_065.md index 3e50fe1109..05fa834bd1 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_065.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_065.md @@ -65,11 +65,32 @@ module [] ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_067.md b/test/snapshots/fuzz_crash/fuzz_crash_067.md index f1c35b9204..689210c4aa 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_067.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_067.md @@ -64,13 +64,34 @@ f = || { (e-lambda @3.5-5.2 (args) (e-block @3.8-5.2 - (e-runtime-error (tag "crash_expects_string")))))) + (e-runtime-error (tag "crash_expects_string"))))) + (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 "({}) -> 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.5-5.2 (type "({}) -> Error")))) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_068.md b/test/snapshots/fuzz_crash/fuzz_crash_068.md index 417832e8c3..65ce2a1b05 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_068.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_068.md @@ -92,11 +92,32 @@ module [] ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_069.md b/test/snapshots/fuzz_crash/fuzz_crash_069.md index a3f6798a53..c5133107c7 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_069.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_069.md @@ -40,11 +40,32 @@ package ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_070.md b/test/snapshots/fuzz_crash/fuzz_crash_070.md index bf98f6dabf..66bfd463c9 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_070.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_070.md @@ -79,11 +79,32 @@ module [] ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_071.md b/test/snapshots/fuzz_crash/fuzz_crash_071.md index 7fd755190d..60a1ae6bdc 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_071.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_071.md @@ -49,11 +49,32 @@ package ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_072.md b/test/snapshots/fuzz_crash/fuzz_crash_072.md index 7eec31229e..2b464dd050 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_072.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_072.md @@ -157,11 +157,32 @@ module [] ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_073.md b/test/snapshots/fuzz_crash/fuzz_crash_073.md index a88f2af216..3531a806fb 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_073.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_073.md @@ -72,11 +72,32 @@ module [] ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_074.md b/test/snapshots/fuzz_crash/fuzz_crash_074.md index 45329f0dd5..6102ff98fc 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_074.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_074.md @@ -50,11 +50,32 @@ package ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_075.md b/test/snapshots/fuzz_crash/fuzz_crash_075.md index 5ea2e4dd66..76d44c9e1c 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_075.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_075.md @@ -50,11 +50,32 @@ package ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_076.md b/test/snapshots/fuzz_crash/fuzz_crash_076.md index e824ba38bc..61b38fc889 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_076.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_076.md @@ -43,11 +43,32 @@ package ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_077.md b/test/snapshots/fuzz_crash/fuzz_crash_077.md index 95dcf5eaa2..4ec67db1c5 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_077.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_077.md @@ -52,11 +52,32 @@ package ~~~ # 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)) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_crash_078.md b/test/snapshots/fuzz_crash/fuzz_crash_078.md index 2918436e58..06b5e39a2f 100644 --- a/test/snapshots/fuzz_crash/fuzz_crash_078.md +++ b/test/snapshots/fuzz_crash/fuzz_crash_078.md @@ -51,13 +51,34 @@ e = """ (can-ir (d-let (p-assign @1.9-1.10 (ident "e")) - (e-string @1.11-1.14))) + (e-string @1.11-1.14)) + (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 @1.9-1.10 (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 @1.11-1.14 (type "Str")))) ~~~ diff --git a/test/snapshots/fuzz_crash/fuzz_hang_001.md b/test/snapshots/fuzz_crash/fuzz_hang_001.md index 0a69178837..517552a3f8 100644 --- a/test/snapshots/fuzz_crash/fuzz_hang_001.md +++ b/test/snapshots/fuzz_crash/fuzz_hang_001.md @@ -54,11 +54,32 @@ EndOfFile(2:1-2:1), ~~~ # 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)) ~~~ diff --git a/test/snapshots/hello_world.md b/test/snapshots/hello_world.md index f2422ca0a4..26af58dbab 100644 --- a/test/snapshots/hello_world.md +++ b/test/snapshots/hello_world.md @@ -71,11 +71,21 @@ NO CHANGE (args (p-underscore @5.10-5.11)) (e-call @5.13-5.42 - (e-lookup-external @5.13-5.25 - (module-idx "0") - (target-node-idx "0")) (e-string @5.26-5.41 (e-literal @5.27-5.40 (string "Hello, world!")))))) + (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))) ~~~ @@ -84,6 +94,14 @@ NO CHANGE (inferred-types (defs (patt @5.1-5.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 @5.9-5.42 (type "_arg -> _ret")))) ~~~ diff --git a/test/snapshots/hello_world_with_block.md b/test/snapshots/hello_world_with_block.md index bd743b5d85..4225158d73 100644 --- a/test/snapshots/hello_world_with_block.md +++ b/test/snapshots/hello_world_with_block.md @@ -105,11 +105,21 @@ NO CHANGE (e-string @9.10-9.17 (e-literal @9.11-9.16 (string "World")))) (e-call @11.2-11.31 - (e-lookup-external @11.2-11.14 - (module-idx "0") - (target-node-idx "0")) (e-string @11.15-11.30 (e-literal @11.16-11.29 (string "Hello, world!"))))))) + (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 @6.1-6.17 (module "pf.Stdout") (qualifier "pf") (exposes))) ~~~ @@ -118,6 +128,14 @@ NO CHANGE (inferred-types (defs (patt @8.1-8.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 @8.9-12.2 (type "_arg -> _ret")))) ~~~ diff --git a/test/snapshots/import_exposing_alias.md b/test/snapshots/import_exposing_alias.md index ef8efda210..8add3020a5 100644 --- a/test/snapshots/import_exposing_alias.md +++ b/test/snapshots/import_exposing_alias.md @@ -100,25 +100,32 @@ NO CHANGE (e-string @6.17-6.22 (e-literal @6.18-6.21 (string "Bob")))) (field (name "age") - (e-int @6.29-6.31 (value "25")))))) + (e-num @6.29-6.31 (value "25")))))) (s-let @7.2-7.24 (p-assign @7.2-7.9 (ident "encoded")) (e-call @7.12-7.24 - (e-lookup-external @7.12-7.18 - (module-idx "0") - (target-node-idx "0")) (e-lookup-local @7.19-7.23 (p-assign @6.2-6.6 (ident "data"))))) (s-let @8.2-8.29 (p-assign @8.2-8.9 (ident "decoded")) (e-call @8.12-8.29 - (e-lookup-external @8.12-8.20 - (module-idx "0") - (target-node-idx "0")) (e-lookup-local @8.21-8.28 (p-assign @7.2-7.9 (ident "encoded"))))) (e-lookup-local @9.2-9.9 (p-assign @8.2-8.9 (ident "decoded"))))) + (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.65 (module "json.Json") (qualifier "json") (exposes (exposed (name "decode") (alias "fromJson") (wildcard false)) @@ -129,6 +136,14 @@ NO CHANGE (inferred-types (defs (patt @5.1-5.5 (type "_a"))) + (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-10.2 (type "_a")))) ~~~ diff --git a/test/snapshots/issue/minimal_underscore.md b/test/snapshots/issue/minimal_underscore.md index 72e1058127..1fb8c54f41 100644 --- a/test/snapshots/issue/minimal_underscore.md +++ b/test/snapshots/issue/minimal_underscore.md @@ -47,6 +47,19 @@ 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-nominal-decl @3.1-3.13 (ty-header @3.1-3.8 (name "BadType")) (ty-underscore @1.1-1.1))) @@ -56,7 +69,14 @@ NO CHANGE (inferred-types (defs) (type_decls - (nominal @3.1-3.13 (type "Error") + (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"))))) + (nominal @3.1-3.13 (type "BadType") (ty-header @3.1-3.8 (name "BadType")))) (expressions)) ~~~ diff --git a/test/snapshots/issue/simple_underscore_error.md b/test/snapshots/issue/simple_underscore_error.md index 1b8ced23b5..389c634da4 100644 --- a/test/snapshots/issue/simple_underscore_error.md +++ b/test/snapshots/issue/simple_underscore_error.md @@ -26,6 +26,20 @@ module [] Underscores in type annotations mean "I don't care about this type", which doesn't make sense when declaring a type. If you need a placeholder type variable, use a named type variable like `a` instead. +**TYPE MISMATCH** +This expression is used in an unexpected way: +**simple_underscore_error.md:6:7:6:9:** +```roc +foo = 42 +``` + ^^ + +It has the type: + _Num(_size)_ + +But the type annotation says it should have the type: + _BadType_ + # TOKENS ~~~zig KwModule(1:1-1:7),OpenSquare(1:8-1:9),CloseSquare(1:9-1:10), @@ -59,10 +73,23 @@ NO CHANGE (can-ir (d-let (p-assign @6.1-6.4 (ident "foo")) - (e-int @6.7-6.9 (value "42")) + (e-num @6.7-6.9 (value "42")) (annotation @6.1-6.4 (declared-type - (ty @5.7-5.14 (name "BadType"))))) + (ty-lookup @5.7-5.14 (name "BadType") (local))))) + (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-nominal-decl @3.1-3.13 (ty-header @3.1-3.8 (name "BadType")) (ty-underscore @1.1-1.1))) @@ -73,7 +100,14 @@ NO CHANGE (defs (patt @6.1-6.4 (type "Error"))) (type_decls - (nominal @3.1-3.13 (type "Error") + (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"))))) + (nominal @3.1-3.13 (type "BadType") (ty-header @3.1-3.8 (name "BadType")))) (expressions (expr @6.7-6.9 (type "Error")))) diff --git a/test/snapshots/issue/test_error_propagation.md b/test/snapshots/issue/test_error_propagation.md index 7db377af18..4e968953ea 100644 --- a/test/snapshots/issue/test_error_propagation.md +++ b/test/snapshots/issue/test_error_propagation.md @@ -28,6 +28,20 @@ module [] Underscores in type annotations mean "I don't care about this type", which doesn't make sense when declaring a type. If you need a placeholder type variable, use a named type variable like `a` instead. +**TYPE MISMATCH** +This expression is used in an unexpected way: +**test_error_propagation.md:8:9:8:15:** +```roc +value = "test" +``` + ^^^^^^ + +It has the type: + _Str_ + +But the type annotation says it should have the type: + _GoodAlias_ + # TOKENS ~~~zig KwModule(1:1-1:7),OpenSquare(1:8-1:9),CloseSquare(1:9-1:10), @@ -71,13 +85,26 @@ NO CHANGE (e-literal @8.10-8.14 (string "test"))) (annotation @8.1-8.6 (declared-type - (ty @7.9-7.18 (name "GoodAlias"))))) + (ty-lookup @7.9-7.18 (name "GoodAlias") (local))))) + (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-nominal-decl @3.1-3.13 (ty-header @3.1-3.8 (name "BadBase")) (ty-underscore @1.1-1.1)) (s-nominal-decl @5.1-5.21 (ty-header @5.1-5.10 (name "GoodAlias")) - (ty @5.14-5.21 (name "BadBase")))) + (ty-lookup @5.14-5.21 (name "BadBase") (local)))) ~~~ # TYPES ~~~clojure @@ -85,9 +112,16 @@ NO CHANGE (defs (patt @8.1-8.6 (type "Error"))) (type_decls - (nominal @3.1-3.13 (type "Error") + (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"))))) + (nominal @3.1-3.13 (type "BadBase") (ty-header @3.1-3.8 (name "BadBase"))) - (nominal @5.1-5.21 (type "Error") + (nominal @5.1-5.21 (type "GoodAlias") (ty-header @5.1-5.10 (name "GoodAlias")))) (expressions (expr @8.9-8.15 (type "Error")))) diff --git a/test/snapshots/issue/underscore_error_propagation.md b/test/snapshots/issue/underscore_error_propagation.md index 5f19da7dc7..8668773a69 100644 --- a/test/snapshots/issue/underscore_error_propagation.md +++ b/test/snapshots/issue/underscore_error_propagation.md @@ -36,6 +36,20 @@ module [] Underscores in type annotations mean "I don't care about this type", which doesn't make sense when declaring a type. If you need a placeholder type variable, use a named type variable like `a` instead. +**TYPE MISMATCH** +This expression is used in an unexpected way: +**underscore_error_propagation.md:8:9:8:15:** +```roc +value = "test" +``` + ^^^^^^ + +It has the type: + _Str_ + +But the type annotation says it should have the type: + _BadDerived_ + **TYPE MISMATCH** This expression is used in an unexpected way: **underscore_error_propagation.md:15:13:15:19:** @@ -44,12 +58,12 @@ goodValue = "test" ``` ^^^^^^ -The type annotation says it should have the type: - _GoodDerived_ - -But here it's being used as: +It has the type: _Str_ +But the type annotation says it should have the type: + _GoodDerived_ + # TOKENS ~~~zig KwModule(1:1-1:7),OpenSquare(1:8-1:9),CloseSquare(1:9-1:10), @@ -111,26 +125,39 @@ NO CHANGE (e-literal @8.10-8.14 (string "test"))) (annotation @8.1-8.6 (declared-type - (ty @7.9-7.19 (name "BadDerived"))))) + (ty-lookup @7.9-7.19 (name "BadDerived") (local))))) (d-let (p-assign @15.1-15.10 (ident "goodValue")) (e-string @15.13-15.19 (e-literal @15.14-15.18 (string "test"))) (annotation @15.1-15.10 (declared-type - (ty @14.13-14.24 (name "GoodDerived"))))) + (ty-lookup @14.13-14.24 (name "GoodDerived") (local))))) + (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-nominal-decl @3.1-3.13 (ty-header @3.1-3.8 (name "BadBase")) (ty-underscore @1.1-1.1)) (s-nominal-decl @5.1-5.22 (ty-header @5.1-5.11 (name "BadDerived")) - (ty @5.15-5.22 (name "BadBase"))) + (ty-lookup @5.15-5.22 (name "BadBase") (local))) (s-nominal-decl @10.1-10.16 (ty-header @10.1-10.9 (name "GoodBase")) - (ty @10.13-10.16 (name "Str"))) + (ty-lookup @10.13-10.16 (name "Str") (builtin))) (s-nominal-decl @12.1-12.24 (ty-header @12.1-12.12 (name "GoodDerived")) - (ty @12.16-12.24 (name "GoodBase")))) + (ty-lookup @12.16-12.24 (name "GoodBase") (local)))) ~~~ # TYPES ~~~clojure @@ -139,13 +166,20 @@ NO CHANGE (patt @8.1-8.6 (type "Error")) (patt @15.1-15.10 (type "Error"))) (type_decls - (nominal @3.1-3.13 (type "Error") + (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"))))) + (nominal @3.1-3.13 (type "BadBase") (ty-header @3.1-3.8 (name "BadBase"))) - (nominal @5.1-5.22 (type "Error") + (nominal @5.1-5.22 (type "BadDerived") (ty-header @5.1-5.11 (name "BadDerived"))) (nominal @10.1-10.16 (type "GoodBase") (ty-header @10.1-10.9 (name "GoodBase"))) - (nominal @12.1-12.24 (type "Error") + (nominal @12.1-12.24 (type "GoodDerived") (ty-header @12.1-12.12 (name "GoodDerived")))) (expressions (expr @8.9-8.15 (type "Error")) diff --git a/test/snapshots/issue/underscore_error_type.md b/test/snapshots/issue/underscore_error_type.md index 7595b89cff..f4a1b308a8 100644 --- a/test/snapshots/issue/underscore_error_type.md +++ b/test/snapshots/issue/underscore_error_type.md @@ -65,6 +65,17 @@ Underscores in type annotations mean "I don't care about this type", which doesn **UNDERSCORE IN TYPE ALIAS** Underscores are not allowed in type alias declarations. +**underscore_error_type.md:8:12:8:16:** +```roc +BadList := List(_) +``` + ^^^^ + +Underscores in type annotations mean "I don't care about this type", which doesn't make sense when declaring a type. If you need a placeholder type variable, use a named type variable like `a` instead. + +**UNDERSCORE IN TYPE ALIAS** +Underscores are not allowed in type alias declarations. + **underscore_error_type.md:1:1:1:1:** ```roc module [] @@ -106,6 +117,76 @@ BadTuple := (_, U32) Underscores in type annotations mean "I don't care about this type", which doesn't make sense when declaring a type. If you need a placeholder type variable, use a named type variable like `a` instead. +**TYPE MISMATCH** +This expression is used in an unexpected way: +**underscore_error_type.md:6:7:6:9:** +```roc +foo = 42 +``` + ^^ + +It has the type: + _Num(_size)_ + +But the type annotation says it should have the type: + _BadType_ + +**TYPE MISMATCH** +This expression is used in an unexpected way: +**underscore_error_type.md:11:7:11:16:** +```roc +bar = [1, 2, 3] +``` + ^^^^^^^^^ + +It has the type: + _List(Num(_size))_ + +But the type annotation says it should have the type: + _BadList_ + +**TYPE MISMATCH** +This expression is used in an unexpected way: +**underscore_error_type.md:16:7:16:32:** +```roc +baz = { field: "hi", other: 5 } +``` + ^^^^^^^^^^^^^^^^^^^^^^^^^ + +It has the type: + _{ field: Str, other: Num(_size) }_ + +But the type annotation says it should have the type: + _BadRecord_ + +**TYPE MISMATCH** +This expression is used in an unexpected way: +**underscore_error_type.md:21:7:21:12:** +```roc +qux = |x| x +``` + ^^^^^ + +It has the type: + _a -> a_ + +But the type annotation says it should have the type: + _BadFunction_ + +**TYPE MISMATCH** +This expression is used in an unexpected way: +**underscore_error_type.md:26:8:26:21:** +```roc +quux = ("hello", 42) +``` + ^^^^^^^^^^^^^ + +It has the type: + _(Str, Num(_size))_ + +But the type annotation says it should have the type: + _BadTuple_ + # TOKENS ~~~zig KwModule(1:1-1:7),OpenSquare(1:8-1:9),CloseSquare(1:9-1:10), @@ -236,20 +317,20 @@ quux = ("hello", 42) (can-ir (d-let (p-assign @6.1-6.4 (ident "foo")) - (e-int @6.7-6.9 (value "42")) + (e-num @6.7-6.9 (value "42")) (annotation @6.1-6.4 (declared-type - (ty @5.7-5.14 (name "BadType"))))) + (ty-lookup @5.7-5.14 (name "BadType") (local))))) (d-let (p-assign @11.1-11.4 (ident "bar")) (e-list @11.7-11.16 (elems - (e-int @11.8-11.9 (value "1")) - (e-int @11.11-11.12 (value "2")) - (e-int @11.14-11.15 (value "3")))) + (e-num @11.8-11.9 (value "1")) + (e-num @11.11-11.12 (value "2")) + (e-num @11.14-11.15 (value "3")))) (annotation @11.1-11.4 (declared-type - (ty @10.7-10.14 (name "BadList"))))) + (ty-lookup @10.7-10.14 (name "BadList") (local))))) (d-let (p-assign @16.1-16.4 (ident "baz")) (e-record @16.7-16.32 @@ -258,10 +339,10 @@ quux = ("hello", 42) (e-string @16.16-16.20 (e-literal @16.17-16.19 (string "hi")))) (field (name "other") - (e-int @16.29-16.30 (value "5"))))) + (e-num @16.29-16.30 (value "5"))))) (annotation @16.1-16.4 (declared-type - (ty @15.7-15.16 (name "BadRecord"))))) + (ty-lookup @15.7-15.16 (name "BadRecord") (local))))) (d-let (p-assign @21.1-21.4 (ident "qux")) (e-lambda @21.7-21.12 @@ -271,23 +352,36 @@ quux = ("hello", 42) (p-assign @21.8-21.9 (ident "x")))) (annotation @21.1-21.4 (declared-type - (ty @20.7-20.18 (name "BadFunction"))))) + (ty-lookup @20.7-20.18 (name "BadFunction") (local))))) (d-let (p-assign @26.1-26.5 (ident "quux")) (e-tuple @26.8-26.21 (elems (e-string @26.9-26.16 (e-literal @26.10-26.15 (string "hello"))) - (e-int @26.18-26.20 (value "42")))) + (e-num @26.18-26.20 (value "42")))) (annotation @26.1-26.5 (declared-type - (ty @25.8-25.16 (name "BadTuple"))))) + (ty-lookup @25.8-25.16 (name "BadTuple") (local))))) + (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-nominal-decl @3.1-3.13 (ty-header @3.1-3.8 (name "BadType")) (ty-underscore @1.1-1.1)) (s-nominal-decl @8.1-8.19 (ty-header @8.1-8.8 (name "BadList")) - (ty-apply @8.12-8.19 (symbol "List") + (ty-apply @8.12-8.19 (name "List") (builtin) (ty-underscore @8.17-8.17))) (s-nominal-decl @13.1-13.38 (ty-header @13.1-13.10 (name "BadRecord")) @@ -295,7 +389,7 @@ quux = ("hello", 42) (field (field "field") (ty-underscore @1.1-1.1)) (field (field "other") - (ty @13.33-13.36 (name "U32"))))) + (ty-lookup @13.33-13.36 (name "U32") (builtin))))) (s-nominal-decl @18.1-18.22 (ty-header @18.1-18.12 (name "BadFunction")) (ty-fn @18.16-18.22 (effectful false) @@ -305,7 +399,7 @@ quux = ("hello", 42) (ty-header @23.1-23.9 (name "BadTuple")) (ty-tuple @23.13-23.21 (ty-underscore @23.14-23.14) - (ty @23.17-23.20 (name "U32"))))) + (ty-lookup @23.17-23.20 (name "U32") (builtin))))) ~~~ # TYPES ~~~clojure @@ -317,15 +411,22 @@ quux = ("hello", 42) (patt @21.1-21.4 (type "Error")) (patt @26.1-26.5 (type "Error"))) (type_decls - (nominal @3.1-3.13 (type "Error") + (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"))))) + (nominal @3.1-3.13 (type "BadType") (ty-header @3.1-3.8 (name "BadType"))) - (nominal @8.1-8.19 (type "Error") + (nominal @8.1-8.19 (type "BadList") (ty-header @8.1-8.8 (name "BadList"))) - (nominal @13.1-13.38 (type "Error") + (nominal @13.1-13.38 (type "BadRecord") (ty-header @13.1-13.10 (name "BadRecord"))) - (nominal @18.1-18.22 (type "Error") + (nominal @18.1-18.22 (type "BadFunction") (ty-header @18.1-18.12 (name "BadFunction"))) - (nominal @23.1-23.21 (type "Error") + (nominal @23.1-23.21 (type "BadTuple") (ty-header @23.1-23.9 (name "BadTuple")))) (expressions (expr @6.7-6.9 (type "Error")) diff --git a/test/snapshots/issue/usage_test.md b/test/snapshots/issue/usage_test.md index ca23cee248..1b8b7bba0d 100644 --- a/test/snapshots/issue/usage_test.md +++ b/test/snapshots/issue/usage_test.md @@ -40,6 +40,20 @@ module [] Underscores in type annotations mean "I don't care about this type", which doesn't make sense when declaring a type. If you need a placeholder type variable, use a named type variable like `a` instead. +**TYPE MISMATCH** +This expression is used in an unexpected way: +**usage_test.md:8:9:8:11:** +```roc +value = 42 +``` + ^^ + +It has the type: + _Num(_size)_ + +But the type annotation says it should have the type: + _UsedType_ + # TOKENS ~~~zig KwModule(1:1-1:7),OpenSquare(1:8-1:9),CloseSquare(1:9-1:10), @@ -78,10 +92,23 @@ NO CHANGE (can-ir (d-let (p-assign @8.1-8.6 (ident "value")) - (e-int @8.9-8.11 (value "42")) + (e-num @8.9-8.11 (value "42")) (annotation @8.1-8.6 (declared-type - (ty @7.9-7.17 (name "UsedType"))))) + (ty-lookup @7.9-7.17 (name "UsedType") (local))))) + (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-nominal-decl @3.1-3.16 (ty-header @3.1-3.11 (name "UnusedType")) (ty-underscore @1.1-1.1)) @@ -95,9 +122,16 @@ NO CHANGE (defs (patt @8.1-8.6 (type "Error"))) (type_decls - (nominal @3.1-3.16 (type "Error") + (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"))))) + (nominal @3.1-3.16 (type "UnusedType") (ty-header @3.1-3.11 (name "UnusedType"))) - (nominal @5.1-5.14 (type "Error") + (nominal @5.1-5.14 (type "UsedType") (ty-header @5.1-5.9 (name "UsedType")))) (expressions (expr @8.9-8.11 (type "Error")))) diff --git a/test/snapshots/lambda_currying_constraint.md b/test/snapshots/lambda_currying_constraint.md index 5147b3f193..872cbad5d7 100644 --- a/test/snapshots/lambda_currying_constraint.md +++ b/test/snapshots/lambda_currying_constraint.md @@ -141,22 +141,20 @@ NO CHANGE (annotation @5.1-5.10 (declared-type (ty-fn @4.13-4.26 (effectful false) - (ty-var @4.13-4.14 (name "a")) + (ty-rigid-var @4.13-4.14 (name "a")) (ty-parens @4.18-4.26 (ty-fn @4.19-4.25 (effectful false) - (ty-var @4.19-4.20 (name "a")) - (ty-var @4.24-4.25 (name "a")))))))) + (ty-rigid-var @4.13-4.14 (name "a")) + (ty-rigid-var @4.13-4.14 (name "a")))))))) (d-let (p-assign @9.1-9.11 (ident "curriedAdd")) (e-call @9.14-9.26 - (e-lookup-local @9.14-9.23 - (p-assign @5.1-5.10 (ident "makeAdder"))) - (e-int @9.24-9.25 (value "5"))) + (e-num @9.24-9.25 (value "5"))) (annotation @9.1-9.11 (declared-type (ty-fn @8.14-8.24 (effectful false) - (ty @8.14-8.17 (name "I64")) - (ty @8.21-8.24 (name "I64")))))) + (ty-lookup @8.14-8.17 (name "I64") (builtin)) + (ty-lookup @8.21-8.24 (name "I64") (builtin)))))) (d-let (p-assign @13.1-13.11 (ident "applyTwice")) (e-lambda @13.14-13.28 @@ -164,11 +162,7 @@ NO CHANGE (p-assign @13.15-13.16 (ident "f")) (p-assign @13.18-13.19 (ident "x"))) (e-call @13.21-13.28 - (e-lookup-local @13.21-13.22 - (p-assign @13.15-13.16 (ident "f"))) (e-call @13.23-13.27 - (e-lookup-local @13.23-13.24 - (p-assign @13.15-13.16 (ident "f"))) (e-lookup-local @13.25-13.26 (p-assign @13.18-13.19 (ident "x")))))) (annotation @13.1-13.11 @@ -176,10 +170,10 @@ NO CHANGE (ty-fn @12.14-12.30 (effectful false) (ty-parens @12.14-12.22 (ty-fn @12.15-12.21 (effectful false) - (ty-var @12.15-12.16 (name "a")) - (ty-var @12.20-12.21 (name "a")))) - (ty-var @12.24-12.25 (name "a")) - (ty-var @12.29-12.30 (name "a")))))) + (ty-rigid-var @12.15-12.16 (name "a")) + (ty-rigid-var @12.15-12.16 (name "a")))) + (ty-rigid-var @12.15-12.16 (name "a")) + (ty-rigid-var @12.15-12.16 (name "a")))))) (d-let (p-assign @17.1-17.14 (ident "addThreeTwice")) (e-closure @17.17-17.45 @@ -189,34 +183,53 @@ NO CHANGE (args (p-assign @17.18-17.19 (ident "n"))) (e-call @17.21-17.45 - (e-lookup-local @17.21-17.31 - (p-assign @13.1-13.11 (ident "applyTwice"))) (e-lambda @17.32-17.41 (args (p-assign @17.33-17.34 (ident "x"))) (e-binop @17.36-17.41 (op "add") (e-lookup-local @17.36-17.37 (p-assign @17.33-17.34 (ident "x"))) - (e-int @17.40-17.41 (value "3")))) + (e-num @17.40-17.41 (value "3")))) (e-lookup-local @17.43-17.44 (p-assign @17.18-17.19 (ident "n")))))) (annotation @17.1-17.14 (declared-type (ty-fn @16.17-16.27 (effectful false) - (ty @16.17-16.20 (name "I64")) - (ty @16.24-16.27 (name "I64"))))))) + (ty-lookup @16.17-16.20 (name "I64") (builtin)) + (ty-lookup @16.24-16.27 (name "I64") (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 @5.1-5.10 (type "a -> a -> a")) - (patt @9.1-9.11 (type "I64 -> I64")) + (patt @9.1-9.11 (type "Num(Int(Signed64)) -> Num(Int(Signed64))")) (patt @13.1-13.11 (type "a -> a, a -> a")) - (patt @17.1-17.14 (type "I64 -> I64"))) + (patt @17.1-17.14 (type "Num(Int(Signed64)) -> Num(Int(Signed64))"))) + (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.13-5.26 (type "a -> a -> a")) - (expr @9.14-9.26 (type "I64 -> I64")) + (expr @9.14-9.26 (type "Num(Int(Signed64)) -> Num(Int(Signed64))")) (expr @13.14-13.28 (type "a -> a, a -> a")) - (expr @17.17-17.45 (type "I64 -> I64")))) + (expr @17.17-17.45 (type "Num(Int(Signed64)) -> Num(Int(Signed64))")))) ~~~ diff --git a/test/snapshots/lambda_ret_constraint_bug.md b/test/snapshots/lambda_ret_constraint_bug.md index 5b86cac7d9..a762ed48df 100644 --- a/test/snapshots/lambda_ret_constraint_bug.md +++ b/test/snapshots/lambda_ret_constraint_bug.md @@ -83,12 +83,12 @@ NO CHANGE (e-binop @4.14-4.19 (op "mul") (e-lookup-local @4.14-4.15 (p-assign @4.11-4.12 (ident "n"))) - (e-int @4.18-4.19 (value "2")))) + (e-num @4.18-4.19 (value "2")))) (annotation @4.1-4.7 (declared-type (ty-fn @3.10-3.20 (effectful false) - (ty @3.10-3.13 (name "I64")) - (ty @3.17-3.20 (name "I64")))))) + (ty-lookup @3.10-3.13 (name "I64") (builtin)) + (ty-lookup @3.17-3.20 (name "I64") (builtin)))))) (d-let (p-assign @7.1-7.5 (ident "main")) (e-closure @7.8-7.24 @@ -99,23 +99,42 @@ NO CHANGE (p-underscore @7.9-7.10) (p-underscore @7.12-7.13)) (e-call @7.15-7.24 - (e-lookup-local @7.15-7.21 - (p-assign @4.1-4.7 (ident "helper"))) - (e-int @7.22-7.23 (value "5"))))) + (e-num @7.22-7.23 (value "5"))))) (annotation @7.1-7.5 (declared-type (ty-fn @6.8-6.23 (effectful false) - (ty @6.8-6.11 (name "I64")) - (ty @6.13-6.16 (name "I64")) - (ty @6.20-6.23 (name "I64"))))))) + (ty-lookup @6.8-6.11 (name "I64") (builtin)) + (ty-lookup @6.13-6.16 (name "I64") (builtin)) + (ty-lookup @6.20-6.23 (name "I64") (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.7 (type "I64 -> I64")) - (patt @7.1-7.5 (type "I64, I64 -> I64"))) + (patt @4.1-4.7 (type "Num(Int(Signed64)) -> Num(Int(Signed64))")) + (patt @7.1-7.5 (type "Num(Int(Signed64)), Num(Int(Signed64)) -> Num(Int(Signed64))"))) + (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.10-4.19 (type "I64 -> I64")) - (expr @7.8-7.24 (type "I64, I64 -> I64")))) + (expr @4.10-4.19 (type "Num(Int(Signed64)) -> Num(Int(Signed64))")) + (expr @7.8-7.24 (type "Num(Int(Signed64)), Num(Int(Signed64)) -> Num(Int(Signed64))")))) ~~~ diff --git a/test/snapshots/let_polymorphism_numbers.md b/test/snapshots/let_polymorphism_numbers.md index 8aa37c91ba..6ed4689b15 100644 --- a/test/snapshots/let_polymorphism_numbers.md +++ b/test/snapshots/let_polymorphism_numbers.md @@ -38,7 +38,34 @@ main = |_| { # EXPECTED NIL # PROBLEMS -NIL +**TYPE MISMATCH** +This expression is used in an unexpected way: +**let_polymorphism_numbers.md:16:19:16:23:** +```roc +float_add = num + 3.14 +``` + ^^^^ + +It has the type: + _Frac(_size)_ + +But I expected it to be: + _Num(_size)_ + +**TYPE MISMATCH** +This expression is used in an unexpected way: +**let_polymorphism_numbers.md:17:24:17:27:** +```roc +float_multiply = num * 2.5 +``` + ^^^ + +It has the type: + _Frac(_size)_ + +But I expected it to be: + _Num(_size)_ + # TOKENS ~~~zig KwApp(1:1-1:4),OpenSquare(1:5-1:6),LowerIdent(1:6-1:10),CloseSquare(1:10-1:11),OpenCurly(1:12-1:13),LowerIdent(1:14-1:16),OpColon(1:16-1:17),KwPlatform(1:18-1:26),StringStart(1:27-1:28),StringPart(1:28-1:53),StringEnd(1:53-1:54),CloseCurly(1:55-1:56), @@ -171,7 +198,7 @@ main = |_| { (can-ir (d-let (p-assign @4.1-4.4 (ident "num")) - (e-int @4.7-4.9 (value "42"))) + (e-num @4.7-4.9 (value "42"))) (d-let (p-assign @5.1-5.5 (ident "frac")) (e-dec-small @5.8-5.11 (numerator "42") (denominator-power-of-ten "1") (value "4.2"))) @@ -188,13 +215,13 @@ main = |_| { (e-binop @12.11-12.19 (op "add") (e-lookup-local @12.11-12.14 (p-assign @4.1-4.4 (ident "num"))) - (e-int @12.17-12.19 (value "10")))) + (e-num @12.17-12.19 (value "10")))) (d-let (p-assign @13.1-13.13 (ident "int_multiply")) (e-binop @13.16-13.23 (op "mul") (e-lookup-local @13.16-13.19 (p-assign @4.1-4.4 (ident "num"))) - (e-int @13.22-13.23 (value "2")))) + (e-num @13.22-13.23 (value "2")))) (d-let (p-assign @16.1-16.10 (ident "float_add")) (e-binop @16.13-16.23 (op "add") @@ -215,18 +242,14 @@ main = |_| { (e-binop @20.14-20.19 (op "mul") (e-lookup-local @20.14-20.15 (p-assign @20.11-20.12 (ident "x"))) - (e-int @20.18-20.19 (value "2"))))) + (e-num @20.18-20.19 (value "2"))))) (d-let (p-assign @23.1-23.12 (ident "int_doubled")) (e-call @23.15-23.24 - (e-lookup-local @23.15-23.21 - (p-assign @20.1-20.7 (ident "double"))) - (e-int @23.22-23.23 (value "5")))) + (e-num @23.22-23.23 (value "5")))) (d-let (p-assign @24.1-24.14 (ident "float_doubled")) (e-call @24.17-24.28 - (e-lookup-local @24.17-24.23 - (p-assign @20.1-20.7 (ident "double"))) (e-dec-small @24.24-24.27 (numerator "25") (denominator-power-of-ten "1") (value "2.5")))) (d-let (p-assign @26.1-26.5 (ident "main")) @@ -242,35 +265,56 @@ main = |_| { (e-lookup-local @28.5-28.12 (p-assign @12.1-12.8 (ident "int_add"))) (e-lookup-local @28.15-28.27 - (p-assign @13.1-13.13 (ident "int_multiply"))))))))) + (p-assign @13.1-13.13 (ident "int_multiply")))))))) + (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 "Num(_size)")) - (patt @5.1-5.5 (type "Frac(_size)")) + (patt @5.1-5.5 (type "Num(Frac(_size))")) (patt @8.1-8.8 (type "Num(_size)")) - (patt @9.1-9.10 (type "Frac(_size)")) + (patt @9.1-9.10 (type "Num(Frac(_size))")) (patt @12.1-12.8 (type "Num(_size)")) (patt @13.1-13.13 (type "Num(_size)")) - (patt @16.1-16.10 (type "Num(_size)")) - (patt @17.1-17.15 (type "Num(_size)")) + (patt @16.1-16.10 (type "Error")) + (patt @17.1-17.15 (type "Error")) (patt @20.1-20.7 (type "Num(_size) -> Num(_size2)")) (patt @23.1-23.12 (type "Num(_size)")) - (patt @24.1-24.14 (type "Num(_size)")) + (patt @24.1-24.14 (type "Frac(_size)")) (patt @26.1-26.5 (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.7-4.9 (type "Num(_size)")) - (expr @5.8-5.11 (type "Frac(_size)")) + (expr @5.8-5.11 (type "Num(Frac(_size))")) (expr @8.11-8.14 (type "Num(_size)")) - (expr @9.13-9.17 (type "Frac(_size)")) + (expr @9.13-9.17 (type "Num(Frac(_size))")) (expr @12.11-12.19 (type "Num(_size)")) (expr @13.16-13.23 (type "Num(_size)")) - (expr @16.13-16.23 (type "Num(_size)")) - (expr @17.18-17.27 (type "Num(_size)")) + (expr @16.13-16.23 (type "Error")) + (expr @17.18-17.27 (type "Error")) (expr @20.10-20.19 (type "Num(_size) -> Num(_size2)")) (expr @23.15-23.24 (type "Num(_size)")) - (expr @24.17-24.28 (type "Num(_size)")) + (expr @24.17-24.28 (type "Frac(_size)")) (expr @26.8-29.2 (type "_arg -> Num(_size)")))) ~~~ diff --git a/test/snapshots/let_polymorphism_records.md b/test/snapshots/let_polymorphism_records.md index 3aa9c4f5ab..cb89858e47 100644 --- a/test/snapshots/let_polymorphism_records.md +++ b/test/snapshots/let_polymorphism_records.md @@ -277,7 +277,7 @@ main = |_| { (can-ir (d-let (p-assign @4.1-4.4 (ident "num")) - (e-int @4.7-4.9 (value "42"))) + (e-num @4.7-4.9 (value "42"))) (d-let (p-assign @5.1-5.5 (ident "frac")) (e-dec-small @5.8-5.11 (numerator "42") (denominator-power-of-ten "1") (value "4.2"))) @@ -307,26 +307,20 @@ main = |_| { (e-lookup-local @11.34-11.39 (p-assign @11.19-11.24 (ident "value")))) (field (name "count") - (e-int @11.48-11.49 (value "1"))))))) + (e-num @11.48-11.49 (value "1"))))))) (d-let (p-assign @14.1-14.14 (ident "int_container")) (e-call @14.17-14.36 - (e-lookup-local @14.17-14.31 - (p-assign @11.1-11.15 (ident "make_container"))) (e-lookup-local @14.32-14.35 (p-assign @4.1-4.4 (ident "num"))))) (d-let (p-assign @15.1-15.14 (ident "str_container")) (e-call @15.17-15.36 - (e-lookup-local @15.17-15.31 - (p-assign @11.1-11.15 (ident "make_container"))) (e-lookup-local @15.32-15.35 (p-assign @6.1-6.4 (ident "str"))))) (d-let (p-assign @16.1-16.15 (ident "list_container")) (e-call @16.18-16.47 - (e-lookup-local @16.18-16.32 - (p-assign @11.1-11.15 (ident "make_container"))) (e-lookup-local @16.33-16.46 (p-assign @7.1-7.14 (ident "my_empty_list"))))) (d-let @@ -345,16 +339,12 @@ main = |_| { (d-let (p-assign @22.1-22.12 (ident "updated_int")) (e-call @22.15-22.46 - (e-lookup-local @22.15-22.26 - (p-assign @19.1-19.12 (ident "update_data"))) (e-lookup-local @22.27-22.40 (p-assign @14.1-14.14 (ident "int_container"))) - (e-int @22.42-22.45 (value "100")))) + (e-num @22.42-22.45 (value "100")))) (d-let (p-assign @23.1-23.12 (ident "updated_str")) (e-call @23.15-23.50 - (e-lookup-local @23.15-23.26 - (p-assign @19.1-19.12 (ident "update_data"))) (e-lookup-local @23.27-23.40 (p-assign @15.1-15.14 (ident "str_container"))) (e-string @23.42-23.49 @@ -372,32 +362,26 @@ main = |_| { (d-let (p-assign @29.1-29.11 (ident "int_record")) (e-call @29.14-29.33 - (e-lookup-local @29.14-29.29 - (p-assign @26.1-26.16 (ident "identity_record"))) - (e-int @29.30-29.32 (value "42")))) + (e-num @29.30-29.32 (value "42")))) (d-let (p-assign @30.1-30.11 (ident "str_record")) (e-call @30.14-30.37 - (e-lookup-local @30.14-30.29 - (p-assign @26.1-26.16 (ident "identity_record"))) (e-string @30.30-30.36 (e-literal @30.31-30.35 (string "test"))))) (d-let (p-assign @31.1-31.12 (ident "list_record")) (e-call @31.15-31.41 - (e-lookup-local @31.15-31.30 - (p-assign @26.1-26.16 (ident "identity_record"))) (e-list @31.31-31.40 (elems - (e-int @31.32-31.33 (value "1")) - (e-int @31.35-31.36 (value "2")) - (e-int @31.38-31.39 (value "3")))))) + (e-num @31.32-31.33 (value "1")) + (e-num @31.35-31.36 (value "2")) + (e-num @31.38-31.39 (value "3")))))) (d-let (p-assign @33.1-33.5 (ident "main")) (e-closure @33.8-36.2 (captures - (capture @14.1-14.14 (ident "int_container")) - (capture @15.1-15.14 (ident "str_container"))) + (capture @15.1-15.14 (ident "str_container")) + (capture @14.1-14.14 (ident "int_container"))) (e-lambda @33.8-36.2 (args (p-underscore @33.9-33.10)) @@ -410,7 +394,20 @@ main = |_| { (e-dot-access @35.27-35.46 (field "count") (receiver (e-lookup-local @35.27-35.40 - (p-assign @15.1-15.14 (ident "str_container"))))))))))) + (p-assign @15.1-15.14 (ident "str_container")))))))))) + (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 @@ -421,32 +418,40 @@ main = |_| { (patt @6.1-6.4 (type "Str")) (patt @7.1-7.14 (type "List(_elem)")) (patt @8.1-8.17 (type "List(Frac(_size))")) - (patt @11.1-11.15 (type "_arg -> { data: _field, count: Num(_size) }")) + (patt @11.1-11.15 (type "a -> { data: a, count: Num(_size) }")) (patt @14.1-14.14 (type "{ data: Frac(_size), count: Num(_size2) }")) (patt @15.1-15.14 (type "{ data: Str, count: Num(_size) }")) (patt @16.1-16.15 (type "{ data: List(_elem), count: Num(_size) }")) (patt @19.1-19.12 (type "_arg, _arg2 -> {}")) (patt @22.1-22.12 (type "{}")) (patt @23.1-23.12 (type "{}")) - (patt @26.1-26.16 (type "_arg -> { value: _field }")) + (patt @26.1-26.16 (type "a -> { value: a }")) (patt @29.1-29.11 (type "{ value: Num(_size) }")) (patt @30.1-30.11 (type "{ value: Str }")) (patt @31.1-31.12 (type "{ value: List(Num(_size)) }")) (patt @33.1-33.5 (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.7-4.9 (type "Frac(_size)")) (expr @5.8-5.11 (type "Frac(_size)")) (expr @6.7-6.14 (type "Str")) (expr @7.17-7.19 (type "List(_elem)")) (expr @8.20-8.31 (type "List(Frac(_size))")) - (expr @11.18-11.51 (type "_arg -> { data: _field, count: Num(_size) }")) + (expr @11.18-11.51 (type "a -> { data: a, count: Num(_size) }")) (expr @14.17-14.36 (type "{ data: Frac(_size), count: Num(_size2) }")) (expr @15.17-15.36 (type "{ data: Str, count: Num(_size) }")) (expr @16.18-16.47 (type "{ data: List(_elem), count: Num(_size) }")) (expr @19.15-19.69 (type "_arg, _arg2 -> {}")) (expr @22.15-22.46 (type "{}")) (expr @23.15-23.50 (type "{}")) - (expr @26.19-26.35 (type "_arg -> { value: _field }")) + (expr @26.19-26.35 (type "a -> { value: a }")) (expr @29.14-29.33 (type "{ value: Num(_size) }")) (expr @30.14-30.37 (type "{ value: Str }")) (expr @31.15-31.41 (type "{ value: List(Num(_size)) }")) diff --git a/test/snapshots/match_expr/basic_tag_union.md b/test/snapshots/match_expr/basic_tag_union.md index d70a2b5a9d..59b2539ac1 100644 --- a/test/snapshots/match_expr/basic_tag_union.md +++ b/test/snapshots/match_expr/basic_tag_union.md @@ -89,13 +89,13 @@ NO CHANGE (pattern (degenerate false) (p-applied-tag @2.2-2.5))) (value - (e-int @2.9-2.10 (value "1")))) + (e-num @2.9-2.10 (value "1")))) (branch (patterns (pattern (degenerate false) (p-applied-tag @3.2-3.6))) (value - (e-int @3.10-3.11 (value "2")))) + (e-num @3.10-3.11 (value "2")))) (branch (patterns (pattern (degenerate false) diff --git a/test/snapshots/match_expr/branch_scoping.md b/test/snapshots/match_expr/branch_scoping.md index f6af3a9c69..176778b467 100644 --- a/test/snapshots/match_expr/branch_scoping.md +++ b/test/snapshots/match_expr/branch_scoping.md @@ -91,7 +91,7 @@ match result { (e-binop @2.18-2.27 (op "add") (e-lookup-local @2.18-2.23 (p-assign @2.8-2.13 (ident "value"))) - (e-int @2.26-2.27 (value "1"))))) + (e-num @2.26-2.27 (value "1"))))) (branch (patterns (pattern (degenerate false) @@ -101,7 +101,7 @@ match result { (e-binop @3.19-3.28 (op "sub") (e-lookup-local @3.19-3.24 (p-assign @3.9-3.14 (ident "value"))) - (e-int @3.27-3.28 (value "1"))))) + (e-num @3.27-3.28 (value "1"))))) (branch (patterns (pattern (degenerate false) @@ -111,7 +111,7 @@ match result { (e-binop @4.22-4.35 (op "mul") (e-lookup-local @4.22-4.31 (p-assign @4.8-4.17 (ident "different"))) - (e-int @4.34-4.35 (value "2"))))) + (e-num @4.34-4.35 (value "2"))))) (branch (patterns (pattern (degenerate false) @@ -121,9 +121,9 @@ match result { (e-binop @5.23-5.36 (op "div") (e-lookup-local @5.23-5.32 (p-assign @5.9-5.18 (ident "different"))) - (e-int @5.35-5.36 (value "2")))))))) + (e-num @5.35-5.36 (value "2")))))))) ~~~ # TYPES ~~~clojure -(expr @1.1-6.2 (type "Num(_size)")) +(expr @1.1-6.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/complex_list_tags.md b/test/snapshots/match_expr/complex_list_tags.md index e2ada60e0b..70b8b7f6e0 100644 --- a/test/snapshots/match_expr/complex_list_tags.md +++ b/test/snapshots/match_expr/complex_list_tags.md @@ -327,12 +327,10 @@ match events { (e-string @3.22-3.74 (e-literal @3.23-3.40 (string "single click at (")) (e-call @3.42-3.54 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @3.52-3.53 (p-assign @3.12-3.13 (ident "x")))) (e-literal @3.55-3.57 (string ", ")) (e-call @3.59-3.71 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @3.69-3.70 (p-assign @3.15-3.16 (ident "y")))) (e-literal @3.72-3.73 (string ")"))))) @@ -351,9 +349,7 @@ match events { (p-assign @4.15-4.18 (ident "key"))) (e-literal @4.47-4.57 (string " pressed, ")) (e-call @4.59-4.84 - (e-runtime-error (tag "ident_not_in_scope")) (e-call @4.69-4.83 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @4.78-4.82 (p-assign @1.1-1.1 (ident "rest"))))) (e-literal @4.85-4.97 (string " more events"))))) @@ -370,22 +366,18 @@ match events { (e-string @5.53-5.135 (e-literal @5.54-5.60 (string "moved ")) (e-call @5.62-5.75 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @5.72-5.74 (p-assign @5.11-5.13 (ident "dx")))) (e-literal @5.76-5.77 (string ",")) (e-call @5.79-5.92 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @5.89-5.91 (p-assign @5.15-5.17 (ident "dy")))) (e-literal @5.93-5.99 (string " then ")) (e-call @5.101-5.115 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @5.111-5.114 (p-assign @5.25-5.28 (ident "dx2")))) (e-literal @5.116-5.117 (string ",")) (e-call @5.119-5.133 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @5.129-5.132 (p-assign @5.30-5.33 (ident "dy2")))) (e-literal @5.134-5.134 (string ""))))) @@ -402,17 +394,14 @@ match events { (e-string @6.55-6.130 (e-literal @6.56-6.63 (string "scroll ")) (e-call @6.65-6.82 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @6.75-6.81 (p-assign @6.13-6.19 (ident "amount")))) (e-literal @6.83-6.98 (string " then click at ")) (e-call @6.100-6.112 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @6.110-6.111 (p-assign @6.28-6.29 (ident "x")))) (e-literal @6.113-6.114 (string ",")) (e-call @6.116-6.128 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @6.126-6.127 (p-assign @6.31-6.32 (ident "y")))) (e-literal @6.129-6.129 (string ""))))) @@ -426,5 +415,5 @@ match events { ~~~ # TYPES ~~~clojure -(expr @1.1-8.2 (type "Str")) +(expr @1.1-8.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/empty_list_before_rest_pattern.md b/test/snapshots/match_expr/empty_list_before_rest_pattern.md index a0327b5de3..3c41b200c4 100644 --- a/test/snapshots/match_expr/empty_list_before_rest_pattern.md +++ b/test/snapshots/match_expr/empty_list_before_rest_pattern.md @@ -90,5 +90,5 @@ match l { ~~~ # TYPES ~~~clojure -(expr @1.1-4.2 (type "Result(ok, [EmptyList]_others)")) +(expr @1.1-4.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/list_destructure_scoping.md b/test/snapshots/match_expr/list_destructure_scoping.md index 91eea71756..d043cdf8fb 100644 --- a/test/snapshots/match_expr/list_destructure_scoping.md +++ b/test/snapshots/match_expr/list_destructure_scoping.md @@ -88,5 +88,5 @@ match list { ~~~ # TYPES ~~~clojure -(expr @1.1-4.2 (type "Num(_size)")) +(expr @1.1-4.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/list_destructure_variations.md b/test/snapshots/match_expr/list_destructure_variations.md index 0b7a52a897..b08be99f59 100644 --- a/test/snapshots/match_expr/list_destructure_variations.md +++ b/test/snapshots/match_expr/list_destructure_variations.md @@ -145,7 +145,7 @@ match list { (p-list @2.5-2.7 (patterns)))) (value - (e-int @2.11-2.12 (value "0")))) + (e-num @2.11-2.12 (value "0")))) (branch (patterns (pattern (degenerate false) @@ -189,7 +189,7 @@ match list { (rest-at (index 2) (p-assign @1.1-1.1 (ident "rest")))))) (value - (e-int @6.31-6.32 (value "3")))) + (e-num @6.31-6.32 (value "3")))) (branch (patterns (pattern (degenerate false) @@ -212,5 +212,5 @@ match list { ~~~ # TYPES ~~~clojure -(expr @1.1-8.2 (type "Num(_size)")) +(expr @1.1-8.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/list_mixed_literals.md b/test/snapshots/match_expr/list_mixed_literals.md index fcf05c9223..fe153d7f73 100644 --- a/test/snapshots/match_expr/list_mixed_literals.md +++ b/test/snapshots/match_expr/list_mixed_literals.md @@ -132,9 +132,9 @@ match sequence { (p-list @6.5-6.7 (patterns)))) (value - (e-int @6.11-6.12 (value "0"))))))) + (e-num @6.11-6.12 (value "0"))))))) ~~~ # TYPES ~~~clojure -(expr @1.1-7.2 (type "Num(_size)")) +(expr @1.1-7.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/list_patterns.md b/test/snapshots/match_expr/list_patterns.md index 74e7f3e38e..450c7fa1fb 100644 --- a/test/snapshots/match_expr/list_patterns.md +++ b/test/snapshots/match_expr/list_patterns.md @@ -126,7 +126,7 @@ match numbers { (rest-at (index 1) (p-assign @3.15-3.15 (ident "rest")))))) (value - (e-int @3.24-3.25 (value "0"))))))) + (e-num @3.24-3.25 (value "0"))))))) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/match_expr/list_rest_invalid.md b/test/snapshots/match_expr/list_rest_invalid.md index 2563906dc4..3ea9d9f7d6 100644 --- a/test/snapshots/match_expr/list_rest_invalid.md +++ b/test/snapshots/match_expr/list_rest_invalid.md @@ -207,7 +207,7 @@ match items { (rest-at (index 1) (p-assign @2.15-2.15 (ident "rest")))))) (value - (e-int @2.24-2.25 (value "0")))) + (e-num @2.24-2.25 (value "0")))) (branch (patterns (pattern (degenerate false) @@ -217,7 +217,7 @@ match items { (rest-at (index 0) (p-assign @3.8-3.8 (ident "rest")))))) (value - (e-int @3.23-3.24 (value "1")))) + (e-num @3.23-3.24 (value "1")))) (branch (patterns (pattern (degenerate false) @@ -228,7 +228,7 @@ match items { (rest-at (index 1) (p-assign @4.11-4.11 (ident "rest")))))) (value - (e-int @4.23-4.24 (value "2"))))))) + (e-num @4.23-4.24 (value "2"))))))) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/match_expr/list_rest_scoping.md b/test/snapshots/match_expr/list_rest_scoping.md index b4ceaa2310..f8a9061f4c 100644 --- a/test/snapshots/match_expr/list_rest_scoping.md +++ b/test/snapshots/match_expr/list_rest_scoping.md @@ -164,7 +164,7 @@ match items { (e-binop @2.24-2.33 (op "add") (e-lookup-local @2.24-2.29 (p-assign @2.6-2.11 (ident "first"))) - (e-int @2.32-2.33 (value "1"))))) + (e-num @2.32-2.33 (value "1"))))) (branch (patterns (pattern (degenerate false) @@ -177,7 +177,7 @@ match items { (e-binop @3.23-3.31 (op "add") (e-lookup-local @3.23-3.27 (p-assign @3.14-3.18 (ident "last"))) - (e-int @3.30-3.31 (value "2"))))) + (e-num @3.30-3.31 (value "2"))))) (branch (patterns (pattern (degenerate false) @@ -196,5 +196,5 @@ match items { ~~~ # TYPES ~~~clojure -(expr @1.1-5.2 (type "Num(_size)")) +(expr @1.1-5.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/list_rest_scoping_variables.md b/test/snapshots/match_expr/list_rest_scoping_variables.md index 154f28a583..8dc0df172d 100644 --- a/test/snapshots/match_expr/list_rest_scoping_variables.md +++ b/test/snapshots/match_expr/list_rest_scoping_variables.md @@ -188,7 +188,7 @@ match data { (rest-at (index 0) (p-assign @2.8-2.8 (ident "items")))))) (value - (e-int @2.18-2.19 (value "1")))) + (e-num @2.18-2.19 (value "1")))) (branch (patterns (pattern (degenerate false) @@ -229,5 +229,5 @@ match data { ~~~ # TYPES ~~~clojure -(expr @1.1-6.2 (type "Num(_size)")) +(expr @1.1-6.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/list_underscore_patterns.md b/test/snapshots/match_expr/list_underscore_patterns.md index 5723d31627..652ecbbe1b 100644 --- a/test/snapshots/match_expr/list_underscore_patterns.md +++ b/test/snapshots/match_expr/list_underscore_patterns.md @@ -103,7 +103,7 @@ match items { (patterns (p-underscore @2.6-2.7))))) (value - (e-int @2.12-2.13 (value "1")))) + (e-num @2.12-2.13 (value "1")))) (branch (patterns (pattern (degenerate false) @@ -156,9 +156,9 @@ match items { (p-list @7.5-7.7 (patterns)))) (value - (e-int @7.11-7.12 (value "0"))))))) + (e-num @7.11-7.12 (value "0"))))))) ~~~ # TYPES ~~~clojure -(expr @1.1-8.2 (type "Num(_size)")) +(expr @1.1-8.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/literal_patterns.md b/test/snapshots/match_expr/literal_patterns.md index 44d2e0d414..8fede36aa7 100644 --- a/test/snapshots/match_expr/literal_patterns.md +++ b/test/snapshots/match_expr/literal_patterns.md @@ -37,29 +37,6 @@ All branches in an `match` must have compatible types. Note: You can wrap branches values in a tag to make them compatible. To learn about tags, see -**INCOMPATIBLE MATCH PATTERNS** -The pattern in the fourth branch of this `match` differs from previous ones: -**literal_patterns.md:1:1:** -```roc -match Answer { - Answer => 1 - Zero => "hello" - Greeting => 3 - 10 => 4 -} -``` - ^^ - -The fourth pattern has this type: - _Num(_size)_ - -But all the previous patterns have this type: - _[Answer, Zero, Greeting]_others_ - -All patterns in an `match` must have compatible types. - - - # TOKENS ~~~zig KwMatch(1:1-1:6),UpperIdent(1:7-1:13),OpenCurly(1:14-1:15), @@ -110,7 +87,7 @@ match Answer { (pattern (degenerate false) (p-applied-tag @2.5-2.11))) (value - (e-int @2.15-2.16 (value "1")))) + (e-num @2.15-2.16 (value "1")))) (branch (patterns (pattern (degenerate false) @@ -123,13 +100,13 @@ match Answer { (pattern (degenerate false) (p-applied-tag @4.5-4.13))) (value - (e-int @4.17-4.18 (value "3")))) + (e-num @4.17-4.18 (value "3")))) (branch (patterns (pattern (degenerate false) (p-int @5.5-5.7 (value "10")))) (value - (e-int @5.11-5.12 (value "4"))))))) + (e-num @5.11-5.12 (value "4"))))))) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/match_expr/middle_rest.md b/test/snapshots/match_expr/middle_rest.md index 5afc154da1..e65dabec17 100644 --- a/test/snapshots/match_expr/middle_rest.md +++ b/test/snapshots/match_expr/middle_rest.md @@ -152,9 +152,9 @@ match items { (p-list @5.5-5.7 (patterns)))) (value - (e-int @5.11-5.12 (value "0"))))))) + (e-num @5.11-5.12 (value "0"))))))) ~~~ # TYPES ~~~clojure -(expr @1.1-6.2 (type "Num(_size)")) +(expr @1.1-6.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/mixed_pattern_scoping.md b/test/snapshots/match_expr/mixed_pattern_scoping.md index 14854bd337..30fa01cffd 100644 --- a/test/snapshots/match_expr/mixed_pattern_scoping.md +++ b/test/snapshots/match_expr/mixed_pattern_scoping.md @@ -105,7 +105,7 @@ match data { (e-binop @3.15-3.20 (op "sub") (e-lookup-local @3.15-3.16 (p-assign @3.9-3.10 (ident "x"))) - (e-int @3.19-3.20 (value "1"))))) + (e-num @3.19-3.20 (value "1"))))) (branch (patterns (pattern (degenerate false) @@ -115,7 +115,7 @@ match data { (e-binop @4.16-4.21 (op "mul") (e-lookup-local @4.16-4.17 (p-assign @4.9-4.10 (ident "x"))) - (e-int @4.20-4.21 (value "2"))))) + (e-num @4.20-4.21 (value "2"))))) (branch (patterns (pattern (degenerate false) @@ -125,9 +125,9 @@ match data { (e-binop @5.15-5.20 (op "div") (e-lookup-local @5.15-5.16 (p-assign @5.9-5.10 (ident "y"))) - (e-int @5.19-5.20 (value "2")))))))) + (e-num @5.19-5.20 (value "2")))))))) ~~~ # TYPES ~~~clojure -(expr @1.1-6.2 (type "Num(_size)")) +(expr @1.1-6.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/multi_pattern_branch.md b/test/snapshots/match_expr/multi_pattern_branch.md index ff104f7143..156ba63796 100644 --- a/test/snapshots/match_expr/multi_pattern_branch.md +++ b/test/snapshots/match_expr/multi_pattern_branch.md @@ -76,19 +76,19 @@ match color { (pattern (degenerate false) (p-applied-tag @2.20-2.23))) (value - (e-int @2.27-2.28 (value "1")))) + (e-num @2.27-2.28 (value "1")))) (branch (patterns (pattern (degenerate false) (p-applied-tag @3.5-3.10))) (value - (e-int @3.14-3.15 (value "2")))) + (e-num @3.14-3.15 (value "2")))) (branch (patterns (pattern (degenerate false) (p-applied-tag @4.5-4.10))) (value - (e-int @4.14-4.15 (value "3"))))))) + (e-num @4.14-4.15 (value "3"))))))) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/match_expr/nested_list_scoping.md b/test/snapshots/match_expr/nested_list_scoping.md index bba741e459..822c0d07a5 100644 --- a/test/snapshots/match_expr/nested_list_scoping.md +++ b/test/snapshots/match_expr/nested_list_scoping.md @@ -130,5 +130,5 @@ match nestedList { ~~~ # TYPES ~~~clojure -(expr @1.1-5.2 (type "Num(_size)")) +(expr @1.1-5.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/nested_patterns.md b/test/snapshots/match_expr/nested_patterns.md index 4cda0f3422..d0abd0ed0a 100644 --- a/test/snapshots/match_expr/nested_patterns.md +++ b/test/snapshots/match_expr/nested_patterns.md @@ -112,7 +112,6 @@ match data { (e-lookup-local @2.53-2.54 (p-assign @2.31-2.32 (ident "x"))) (e-call @2.57-2.71 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @2.66-2.70 (p-assign @1.1-1.1 (ident "rest"))))))) (branch @@ -120,7 +119,7 @@ match data { (pattern (degenerate false) (p-applied-tag @3.5-3.29))) (value - (e-int @3.33-3.34 (value "0")))) + (e-num @3.33-3.34 (value "0")))) (branch (patterns (pattern (degenerate false) @@ -141,5 +140,5 @@ match data { ~~~ # TYPES ~~~clojure -(expr @1.1-6.2 (type "Num(_size)")) +(expr @1.1-6.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/pattern_alternatives_basic.md b/test/snapshots/match_expr/pattern_alternatives_basic.md index ca4a6c36dc..9c2703de31 100644 --- a/test/snapshots/match_expr/pattern_alternatives_basic.md +++ b/test/snapshots/match_expr/pattern_alternatives_basic.md @@ -127,17 +127,30 @@ kind = |color| match color { (annotation @6.1-6.5 (declared-type (ty-fn @5.8-5.20 (effectful false) - (ty @5.8-5.13 (name "Color")) - (ty @5.17-5.20 (name "Str")))))) + (ty-lookup @5.8-5.13 (name "Color") (local)) + (ty-lookup @5.17-5.20 (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")))) (s-alias-decl @3.1-3.51 (ty-header @3.1-3.6 (name "Color")) (ty-tag-union @3.9-3.51 - (ty @3.10-3.13 (name "Red")) - (ty @3.15-3.20 (name "Green")) - (ty @3.22-3.26 (name "Blue")) - (ty @3.28-3.34 (name "Yellow")) - (ty @3.36-3.42 (name "Orange")) - (ty @3.44-3.50 (name "Purple"))))) + (tag_name @3.10-3.13 (name "Red")) + (tag_name @3.15-3.20 (name "Green")) + (tag_name @3.22-3.26 (name "Blue")) + (tag_name @3.28-3.34 (name "Yellow")) + (tag_name @3.36-3.42 (name "Orange")) + (tag_name @3.44-3.50 (name "Purple"))))) ~~~ # TYPES ~~~clojure @@ -145,6 +158,13 @@ kind = |color| match color { (defs (patt @6.1-6.5 (type "Color -> 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"))))) (alias @3.1-3.51 (type "Color") (ty-header @3.1-3.6 (name "Color")))) (expressions diff --git a/test/snapshots/match_expr/pattern_alternatives_mixed.md b/test/snapshots/match_expr/pattern_alternatives_mixed.md index 2349b1e1c5..f6d2a7010b 100644 --- a/test/snapshots/match_expr/pattern_alternatives_mixed.md +++ b/test/snapshots/match_expr/pattern_alternatives_mixed.md @@ -17,31 +17,7 @@ match ... { # EXPECTED INCOMPATIBLE MATCH PATTERNS - pattern_alternatives_mixed.md:1:1:1:1 # PROBLEMS -**INCOMPATIBLE MATCH PATTERNS** -The pattern first pattern in this second`match` differs from previous ones: -**pattern_alternatives_mixed.md:1:1:** -```roc -match ... { - 1 | 2 | 3 => "small numbers" - "hello" | "world" => "greetings" - Ok(_) | Some(_) => "success value" - [] | [_] => "short list" - (0, _) | (_, 0) => "has zero" - _ => "other" -} -``` - ^^^^^^^ - -The second pattern has this type: - _Str_ - -But all the previous patterns have this type: - _Num(_size)_ - -All patterns in an `match` must have compatible types. - - - +NIL # TOKENS ~~~zig KwMatch(1:1-1:6),TripleDot(1:7-1:10),OpenCurly(1:11-1:12), diff --git a/test/snapshots/match_expr/pattern_as_basic.md b/test/snapshots/match_expr/pattern_as_basic.md index 9ddf2878d7..9989048f06 100644 --- a/test/snapshots/match_expr/pattern_as_basic.md +++ b/test/snapshots/match_expr/pattern_as_basic.md @@ -71,8 +71,8 @@ match (1, 2) { (cond (e-tuple @1.7-1.13 (elems - (e-int @1.8-1.9 (value "1")) - (e-int @1.11-1.12 (value "2"))))) + (e-num @1.8-1.9 (value "1")) + (e-num @1.11-1.12 (value "2"))))) (branches (branch (patterns diff --git a/test/snapshots/match_expr/record_pattern_edge_cases.md b/test/snapshots/match_expr/record_pattern_edge_cases.md index e6ea90c8f5..9550a900f4 100644 --- a/test/snapshots/match_expr/record_pattern_edge_cases.md +++ b/test/snapshots/match_expr/record_pattern_edge_cases.md @@ -276,5 +276,5 @@ match ... { ~~~ # TYPES ~~~clojure -(expr @1.1-9.2 (type "Str")) +(expr @1.1-9.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/single_branch.md b/test/snapshots/match_expr/single_branch.md index 953ad603b1..ea8a235eb0 100644 --- a/test/snapshots/match_expr/single_branch.md +++ b/test/snapshots/match_expr/single_branch.md @@ -62,9 +62,9 @@ match value { (e-binop @2.10-2.15 (op "add") (e-lookup-local @2.10-2.11 (p-assign @2.5-2.6 (ident "x"))) - (e-int @2.14-2.15 (value "1")))))))) + (e-num @2.14-2.15 (value "1")))))))) ~~~ # TYPES ~~~clojure -(expr @1.1-3.2 (type "Num(_size)")) +(expr @1.1-3.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/tag_with_payload.md b/test/snapshots/match_expr/tag_with_payload.md index d53f8c53ff..daafe6c1f3 100644 --- a/test/snapshots/match_expr/tag_with_payload.md +++ b/test/snapshots/match_expr/tag_with_payload.md @@ -116,5 +116,5 @@ match shape { ~~~ # TYPES ~~~clojure -(expr @1.1-5.2 (type "Num(_size)")) +(expr @1.1-5.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/variable_shadowing.md b/test/snapshots/match_expr/variable_shadowing.md index ac0f8ca03f..b43f4166d5 100644 --- a/test/snapshots/match_expr/variable_shadowing.md +++ b/test/snapshots/match_expr/variable_shadowing.md @@ -108,9 +108,9 @@ match (value, other) { (e-binop @3.18-3.23 (op "mul") (e-lookup-local @3.18-3.19 (p-assign @3.12-3.13 (ident "x"))) - (e-int @3.22-3.23 (value "2")))))))) + (e-num @3.22-3.23 (value "2")))))))) ~~~ # TYPES ~~~clojure -(expr @1.1-4.2 (type "Num(_size)")) +(expr @1.1-4.2 (type "Error")) ~~~ diff --git a/test/snapshots/match_expr/wrong_arrow.md b/test/snapshots/match_expr/wrong_arrow.md index 79ccf9fd07..6ef97fd878 100644 --- a/test/snapshots/match_expr/wrong_arrow.md +++ b/test/snapshots/match_expr/wrong_arrow.md @@ -112,5 +112,5 @@ match l { ~~~ # TYPES ~~~clojure -(expr @1.1-4.2 (type "Result(ok, [EmptyList]_others)")) +(expr @1.1-4.2 (type "Error")) ~~~ diff --git a/test/snapshots/module_empty.md b/test/snapshots/module_empty.md index 4ba631ead2..a213281dd2 100644 --- a/test/snapshots/module_empty.md +++ b/test/snapshots/module_empty.md @@ -29,11 +29,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)) ~~~ diff --git a/test/snapshots/module_multiline_with_comments.md b/test/snapshots/module_multiline_with_comments.md index 847d10d4ea..2a369c7b98 100644 --- a/test/snapshots/module_multiline_with_comments.md +++ b/test/snapshots/module_multiline_with_comments.md @@ -60,11 +60,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)) ~~~ diff --git a/test/snapshots/multi_qualified_import.md b/test/snapshots/multi_qualified_import.md index 9ba6b25001..8f800ecab3 100644 --- a/test/snapshots/multi_qualified_import.md +++ b/test/snapshots/multi_qualified_import.md @@ -364,7 +364,7 @@ data = json (e-runtime-error (tag "ident_not_in_scope")) (annotation @6.1-6.13 (declared-type - (ty @5.16-5.23 (name "Encoder"))))) + (ty-malformed @5.16-5.23)))) (d-let (p-assign @10.1-10.8 (ident "process")) (e-lambda @10.11-10.33 @@ -376,13 +376,26 @@ data = json (declared-type (ty-fn @9.11-9.40 (effectful false) (ty-malformed @9.11-9.33) - (ty @9.37-9.40 (name "Str")))))) + (ty-lookup @9.37-9.40 (name "Str") (builtin)))))) (d-let (p-assign @14.1-14.5 (ident "data")) (e-runtime-error (tag "ident_not_in_scope")) (annotation @14.1-14.5 (declared-type (ty-malformed @13.8-13.34)))) + (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.Core") (qualifier "json") (exposes))) ~~~ @@ -393,6 +406,14 @@ data = json (patt @6.1-6.13 (type "Error")) (patt @10.1-10.8 (type "Error -> Str")) (patt @14.1-14.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 @6.16-6.45 (type "Error")) (expr @10.11-10.33 (type "Error -> Str")) diff --git a/test/snapshots/multiline_binop_1.md b/test/snapshots/multiline_binop_1.md index 3dd1913b04..38bbbf1684 100644 --- a/test/snapshots/multiline_binop_1.md +++ b/test/snapshots/multiline_binop_1.md @@ -42,10 +42,10 @@ NO CHANGE # CANONICALIZE ~~~clojure (e-binop @1.1-8.4 (op "add") - (e-int @1.1-1.2 (value "1")) + (e-num @1.1-1.2 (value "1")) (e-binop @6.2-8.4 (op "mul") - (e-int @6.2-6.3 (value "2")) - (e-int @8.3-8.4 (value "3")))) + (e-num @6.2-6.3 (value "2")) + (e-num @8.3-8.4 (value "3")))) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/multiline_list_formatting_14.md b/test/snapshots/multiline_list_formatting_14.md index 65cf7f4790..db163e3083 100644 --- a/test/snapshots/multiline_list_formatting_14.md +++ b/test/snapshots/multiline_list_formatting_14.md @@ -43,9 +43,9 @@ NO CHANGE ~~~clojure (e-list @1.1-9.2 (elems - (e-int @2.2-2.3 (value "1")) - (e-int @6.2-6.3 (value "2")) - (e-int @8.2-8.3 (value "3")))) + (e-num @2.2-2.3 (value "1")) + (e-num @6.2-6.3 (value "2")) + (e-num @8.2-8.3 (value "3")))) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/multiline_list_formatting_5.md b/test/snapshots/multiline_list_formatting_5.md index 8c8fad0610..76131c6544 100644 --- a/test/snapshots/multiline_list_formatting_5.md +++ b/test/snapshots/multiline_list_formatting_5.md @@ -37,9 +37,9 @@ EndOfFile(3:1-3:1), ~~~clojure (e-list @1.1-2.5 (elems - (e-int @1.2-1.3 (value "1")) - (e-int @1.5-1.6 (value "2")) - (e-int @2.3-2.4 (value "3")))) + (e-num @1.2-1.3 (value "1")) + (e-num @1.5-1.6 (value "2")) + (e-num @2.3-2.4 (value "3")))) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/multiline_string_complex.md b/test/snapshots/multiline_string_complex.md index 829f86c33f..3df0eccd5e 100644 --- a/test/snapshots/multiline_string_complex.md +++ b/test/snapshots/multiline_string_complex.md @@ -68,23 +68,23 @@ This expression is used in an unexpected way: It has the type: _Str_ -But here it's being used as: +But I expected it to be: _Num(_size)_ **TYPE MISMATCH** This expression is used in an unexpected way: -**multiline_string_complex.md:40:5:40:9:** +**multiline_string_complex.md:40:6:40:9:** ```roc e: !""" ``` - ^^^^ + ^^^ It has the type: - _Bool_ - -But here it's being used as: _Str_ +But I expected it to be: + _Bool_ + # TOKENS ~~~zig KwPackage(1:1-1:8), @@ -251,7 +251,7 @@ NO CHANGE (e-literal @33.6-33.15 (string "multiline")))))) (field (name "d") (e-binop @37.3-37.10 (op "sub") - (e-int @37.3-37.4 (value "0")) + (e-num @37.3-37.4 (value "0")) (e-string @37.7-37.10))) (field (name "e") (e-unary-not @40.5-40.9 @@ -260,7 +260,20 @@ NO CHANGE (p-assign @44.1-44.2 (ident "x")) (e-block @44.5-47.2 (e-string @45.2-46.5 - (e-literal @46.2-46.5 (string "\n")))))) + (e-literal @46.2-46.5 (string "\n"))))) + (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 @@ -270,13 +283,21 @@ NO CHANGE (patt @10.1-10.7 (type "Str")) (patt @13.1-13.7 (type "Str")) (patt @17.1-17.7 (type "Str")) - (patt @23.1-23.7 (type "{ a: Str, b: (Str, Str), c: List(Str), d: Num(_size), e: Error }")) + (patt @23.1-23.7 (type "{ a: Str, b: (Str, Str), c: List(Str), d: Error, e: Error }")) (patt @44.1-44.2 (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 @8.10-8.50 (type "Str")) (expr @11.2-11.42 (type "Str")) (expr @13.10-15.14 (type "Str")) (expr @18.2-21.14 (type "Str")) - (expr @23.10-42.2 (type "{ a: Str, b: (Str, Str), c: List(Str), d: Num(_size), e: Error }")) + (expr @23.10-42.2 (type "{ a: Str, b: (Str, Str), c: List(Str), d: Error, e: Error }")) (expr @44.5-47.2 (type "Str")))) ~~~ diff --git a/test/snapshots/nominal/nominal_mixed_scope.md b/test/snapshots/nominal/nominal_mixed_scope.md index 7211ee9108..6bd3315404 100644 --- a/test/snapshots/nominal/nominal_mixed_scope.md +++ b/test/snapshots/nominal/nominal_mixed_scope.md @@ -209,21 +209,41 @@ processColor = |color| { (declared-type (ty-fn @5.16-5.32 (effectful false) (ty-underscore @1.1-1.1) - (ty @5.21-5.32 (name "LocalStatus")))))) + (ty-lookup @5.21-5.32 (name "LocalStatus") (local)))))) + (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-nominal-decl @3.1-3.35 (ty-header @3.1-3.12 (name "LocalStatus")) (ty-tag-union @3.16-3.35 - (ty @3.17-3.24 (name "Pending")) - (ty @3.26-3.34 (name "Complete"))))) + (tag_name @3.17-3.24 (name "Pending")) + (tag_name @3.26-3.34 (name "Complete"))))) ~~~ # TYPES ~~~clojure (inferred-types (defs - (patt @6.1-6.13 (type "Error -> LocalStatus"))) + (patt @6.1-6.13 (type "_arg -> LocalStatus"))) (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"))))) (nominal @3.1-3.35 (type "LocalStatus") (ty-header @3.1-3.12 (name "LocalStatus")))) (expressions - (expr @6.16-16.2 (type "Error -> LocalStatus")))) + (expr @6.16-16.2 (type "_arg -> LocalStatus")))) ~~~ diff --git a/test/snapshots/nominal/nominal_tag_payload.md b/test/snapshots/nominal/nominal_tag_payload.md index 13c230cf72..ac4e25cacc 100644 --- a/test/snapshots/nominal/nominal_tag_payload.md +++ b/test/snapshots/nominal/nominal_tag_payload.md @@ -22,16 +22,7 @@ none2 = Maybe.None # EXPECTED NIL # PROBLEMS -**EXPOSED BUT NOT DEFINED** -The module header says that `Maybe` is exposed, but it is not defined anywhere in this module. - -**nominal_tag_payload.md:1:9:1:14:** -```roc -module [Maybe, some1, none1, some2, none2] -``` - ^^^^^ -You can fix this by either defining `Maybe` in this module, or by removing it from the list of exposed values. - +NIL # TOKENS ~~~zig KwModule(1:1-1:7),OpenSquare(1:8-1:9),UpperIdent(1:9-1:14),Comma(1:14-1:15),LowerIdent(1:16-1:21),Comma(1:21-1:22),LowerIdent(1:23-1:28),Comma(1:28-1:29),LowerIdent(1:30-1:35),Comma(1:35-1:36),LowerIdent(1:37-1:42),CloseSquare(1:42-1:43), diff --git a/test/snapshots/nominal/nominal_tag_payload_two.md b/test/snapshots/nominal/nominal_tag_payload_two.md index d7e2526069..904d4df1ca 100644 --- a/test/snapshots/nominal/nominal_tag_payload_two.md +++ b/test/snapshots/nominal/nominal_tag_payload_two.md @@ -21,16 +21,7 @@ is_ok = |result| match result { # EXPECTED NIL # PROBLEMS -**EXPOSED BUT NOT DEFINED** -The module header says that `MyResult` is exposed, but it is not defined anywhere in this module. - -**nominal_tag_payload_two.md:1:9:1:17:** -```roc -module [MyResult, ok, is_ok] -``` - ^^^^^^^^ -You can fix this by either defining `MyResult` in this module, or by removing it from the list of exposed values. - +NIL # TOKENS ~~~zig KwModule(1:1-1:7),OpenSquare(1:8-1:9),UpperIdent(1:9-1:17),Comma(1:17-1:18),LowerIdent(1:19-1:21),Comma(1:21-1:22),LowerIdent(1:23-1:28),CloseSquare(1:28-1:29), diff --git a/test/snapshots/nominal/nominal_tag_recursive_payload.md b/test/snapshots/nominal/nominal_tag_recursive_payload.md index e2dd122bf2..b6c66ec3cc 100644 --- a/test/snapshots/nominal/nominal_tag_recursive_payload.md +++ b/test/snapshots/nominal/nominal_tag_recursive_payload.md @@ -15,16 +15,7 @@ empty = ConsList.Nil # EXPECTED NIL # PROBLEMS -**EXPOSED BUT NOT DEFINED** -The module header says that `ConsList` is exposed, but it is not defined anywhere in this module. - -**nominal_tag_recursive_payload.md:1:9:1:17:** -```roc -module [ConsList, empty] -``` - ^^^^^^^^ -You can fix this by either defining `ConsList` in this module, or by removing it from the list of exposed values. - +NIL # TOKENS ~~~zig KwModule(1:1-1:7),OpenSquare(1:8-1:9),UpperIdent(1:9-1:17),Comma(1:17-1:18),LowerIdent(1:19-1:24),CloseSquare(1:24-1:25), diff --git a/test/snapshots/nominal/nominal_tag_simple.md b/test/snapshots/nominal/nominal_tag_simple.md index b89fb1c031..da593605bb 100644 --- a/test/snapshots/nominal/nominal_tag_simple.md +++ b/test/snapshots/nominal/nominal_tag_simple.md @@ -18,16 +18,6 @@ yellow = Color.Yellow # EXPECTED INVALID NOMINAL TAG - nominal_tag_simple.md:9:10:9:22 # PROBLEMS -**EXPOSED BUT NOT DEFINED** -The module header says that `Color` is exposed, but it is not defined anywhere in this module. - -**nominal_tag_simple.md:1:9:1:14:** -```roc -module [Color, blue] -``` - ^^^^^ -You can fix this by either defining `Color` in this module, or by removing it from the list of exposed values. - **INVALID NOMINAL TAG** I'm having trouble with this nominal tag: **nominal_tag_simple.md:9:10:9:22:** diff --git a/test/snapshots/nominal_type_origin_mismatch.md b/test/snapshots/nominal_type_origin_mismatch.md index 906002f6a4..9fe0e9d010 100644 --- a/test/snapshots/nominal_type_origin_mismatch.md +++ b/test/snapshots/nominal_type_origin_mismatch.md @@ -118,15 +118,26 @@ main = (annotation @6.1-6.14 (declared-type (ty-fn @5.17-5.30 (effectful false) - (ty @5.17-5.23 (name "Person")) - (ty @5.27-5.30 (name "Str")))))) + (ty-malformed @5.17-5.23) + (ty-lookup @5.27-5.30 (name "Str") (builtin)))))) (d-let (p-assign @8.1-8.5 (ident "main")) (e-call @10.5-10.34 - (e-lookup-local @10.5-10.18 - (p-assign @6.1-6.14 (ident "expectsPerson"))) (e-string @10.19-10.33 (e-literal @10.20-10.32 (string "not a person"))))) + (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.30 (module "Data") (exposes (exposed (name "Person") (wildcard false))))) @@ -137,6 +148,14 @@ main = (defs (patt @6.1-6.14 (type "Error -> Str")) (patt @8.1-8.5 (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 @6.17-6.35 (type "Error -> Str")) (expr @10.5-10.34 (type "Str")))) diff --git a/test/snapshots/numbers.md b/test/snapshots/numbers.md index 1a8332da99..379e4ff3d5 100644 --- a/test/snapshots/numbers.md +++ b/test/snapshots/numbers.md @@ -91,19 +91,19 @@ EndOfFile(14:1-14:1), ~~~clojure (e-tuple @1.1-13.2 (elems - (e-int @2.5-2.9 (value "66")) - (e-int @3.5-3.9 (value "66")) - (e-int @4.5-4.9 (value "1")) - (e-int @5.5-5.9 (value "1")) - (e-int @6.5-6.9 (value "34")) - (e-int @7.5-7.9 (value "34")) + (e-int @2.5-2.9 (value "66") (suffix "none")) + (e-int @3.5-3.9 (value "66") (suffix "none")) + (e-int @4.5-4.9 (value "1") (suffix "none")) + (e-int @5.5-5.9 (value "1") (suffix "none")) + (e-int @6.5-6.9 (value "34") (suffix "none")) + (e-int @7.5-7.9 (value "34") (suffix "none")) (e-frac-f64 @8.5-8.11 (value "1e41")) (e-frac-f64 @9.5-9.11 (value "1e41")) - (e-int @10.5-10.15 (value "3735928559")) - (e-int @11.5-11.15 (value "3735928559")) - (e-int @12.5-12.15 (value "3735928559")))) + (e-int @10.5-10.15 (value "3735928559") (suffix "none")) + (e-int @11.5-11.15 (value "3735928559") (suffix "none")) + (e-int @12.5-12.15 (value "3735928559") (suffix "none")))) ~~~ # TYPES ~~~clojure -(expr @1.1-13.2 (type "(Int(_size), Int(_size2), Int(_size3), Int(_size4), Int(_size5), Int(_size6), Frac(_size7), Frac(_size8), Int(_size9), Int(_size10), Int(_size11))")) +(expr @1.1-13.2 (type "(Num(Int(_size)), Num(Int(_size2)), Num(Int(_size3)), Num(Int(_size4)), Num(Int(_size5)), Num(Int(_size6)), Num(Frac(_size7)), Num(Frac(_size8)), Num(Int(_size9)), Num(Int(_size10)), Num(Int(_size11)))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_above_small_limit.md b/test/snapshots/numeric_edge_cases/dec_above_small_limit.md index 2936a6ce41..02e181a36b 100644 --- a/test/snapshots/numeric_edge_cases/dec_above_small_limit.md +++ b/test/snapshots/numeric_edge_cases/dec_above_small_limit.md @@ -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))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_eight_decimals.md b/test/snapshots/numeric_edge_cases/dec_eight_decimals.md index 31b4393453..1875ceed14 100644 --- a/test/snapshots/numeric_edge_cases/dec_eight_decimals.md +++ b/test/snapshots/numeric_edge_cases/dec_eight_decimals.md @@ -30,5 +30,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.11 (type "Frac(_size)")) +(expr @1.1-1.11 (type "Num(Frac(_size))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_exact_power_of_ten.md b/test/snapshots/numeric_edge_cases/dec_exact_power_of_ten.md index 3d83f48068..a9a555fd42 100644 --- a/test/snapshots/numeric_edge_cases/dec_exact_power_of_ten.md +++ b/test/snapshots/numeric_edge_cases/dec_exact_power_of_ten.md @@ -30,5 +30,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.6 (type "Frac(_size)")) +(expr @1.1-1.6 (type "Num(Frac(_size))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_negative_zero.md b/test/snapshots/numeric_edge_cases/dec_negative_zero.md index fde782d3d4..9861304ee0 100644 --- a/test/snapshots/numeric_edge_cases/dec_negative_zero.md +++ b/test/snapshots/numeric_edge_cases/dec_negative_zero.md @@ -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))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_scientific_large.md b/test/snapshots/numeric_edge_cases/dec_scientific_large.md index 4901e9c4c4..c4f9bf3694 100644 --- a/test/snapshots/numeric_edge_cases/dec_scientific_large.md +++ b/test/snapshots/numeric_edge_cases/dec_scientific_large.md @@ -30,5 +30,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.7 (type "Frac(_size)")) +(expr @1.1-1.7 (type "Num(Frac(_size))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_scientific_negative_exp.md b/test/snapshots/numeric_edge_cases/dec_scientific_negative_exp.md index b0f08dce6a..925e34d09b 100644 --- a/test/snapshots/numeric_edge_cases/dec_scientific_negative_exp.md +++ b/test/snapshots/numeric_edge_cases/dec_scientific_negative_exp.md @@ -30,5 +30,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.24 (type "Frac(_size)")) +(expr @1.1-1.24 (type "Num(Frac(_size))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_scientific_notation.md b/test/snapshots/numeric_edge_cases/dec_scientific_notation.md index f7984b9976..737fad7166 100644 --- a/test/snapshots/numeric_edge_cases/dec_scientific_notation.md +++ b/test/snapshots/numeric_edge_cases/dec_scientific_notation.md @@ -30,5 +30,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.23 (type "Frac(_size)")) +(expr @1.1-1.23 (type "Num(Frac(_size))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_small_max_value.md b/test/snapshots/numeric_edge_cases/dec_small_max_value.md index 22ba4cd4f0..7250859648 100644 --- a/test/snapshots/numeric_edge_cases/dec_small_max_value.md +++ b/test/snapshots/numeric_edge_cases/dec_small_max_value.md @@ -30,5 +30,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.7 (type "Frac(_size)")) +(expr @1.1-1.7 (type "Num(Frac(_size))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_small_min_value.md b/test/snapshots/numeric_edge_cases/dec_small_min_value.md index a645a27608..b401056082 100644 --- a/test/snapshots/numeric_edge_cases/dec_small_min_value.md +++ b/test/snapshots/numeric_edge_cases/dec_small_min_value.md @@ -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))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_small_negative.md b/test/snapshots/numeric_edge_cases/dec_small_negative.md index af5a9bf56c..a8bc29f3c0 100644 --- a/test/snapshots/numeric_edge_cases/dec_small_negative.md +++ b/test/snapshots/numeric_edge_cases/dec_small_negative.md @@ -30,5 +30,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.9 (type "Frac(_size)")) +(expr @1.1-1.9 (type "Num(Frac(_size))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_small_positive_tiny.md b/test/snapshots/numeric_edge_cases/dec_small_positive_tiny.md index 7aaa26b5bc..259f8514f2 100644 --- a/test/snapshots/numeric_edge_cases/dec_small_positive_tiny.md +++ b/test/snapshots/numeric_edge_cases/dec_small_positive_tiny.md @@ -30,5 +30,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.7 (type "Frac(_size)")) +(expr @1.1-1.7 (type "Num(Frac(_size))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_trailing_zeros.md b/test/snapshots/numeric_edge_cases/dec_trailing_zeros.md index 7392700fa2..88f4c83431 100644 --- a/test/snapshots/numeric_edge_cases/dec_trailing_zeros.md +++ b/test/snapshots/numeric_edge_cases/dec_trailing_zeros.md @@ -30,5 +30,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.7 (type "Frac(_size)")) +(expr @1.1-1.7 (type "Num(Frac(_size))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_vs_f64_decimal.md b/test/snapshots/numeric_edge_cases/dec_vs_f64_decimal.md index 49cee776e3..dcbd711eda 100644 --- a/test/snapshots/numeric_edge_cases/dec_vs_f64_decimal.md +++ b/test/snapshots/numeric_edge_cases/dec_vs_f64_decimal.md @@ -30,5 +30,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.6 (type "Frac(_size)")) +(expr @1.1-1.6 (type "Num(Frac(_size))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_vs_f64_scientific.md b/test/snapshots/numeric_edge_cases/dec_vs_f64_scientific.md index c0eba244fe..c727287643 100644 --- a/test/snapshots/numeric_edge_cases/dec_vs_f64_scientific.md +++ b/test/snapshots/numeric_edge_cases/dec_vs_f64_scientific.md @@ -30,5 +30,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.6 (type "Frac(_size)")) +(expr @1.1-1.6 (type "Num(Frac(_size))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/dec_zero.md b/test/snapshots/numeric_edge_cases/dec_zero.md index 13aa999b20..e47a8b13c7 100644 --- a/test/snapshots/numeric_edge_cases/dec_zero.md +++ b/test/snapshots/numeric_edge_cases/dec_zero.md @@ -30,5 +30,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.4 (type "Frac(_size)")) +(expr @1.1-1.4 (type "Num(Frac(_size))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/frac_huge_scientific.md b/test/snapshots/numeric_edge_cases/frac_huge_scientific.md index 3cdaa932bb..03a7a4fcd5 100644 --- a/test/snapshots/numeric_edge_cases/frac_huge_scientific.md +++ b/test/snapshots/numeric_edge_cases/frac_huge_scientific.md @@ -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))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/frac_tiny_scientific.md b/test/snapshots/numeric_edge_cases/frac_tiny_scientific.md index 64ed883cf4..2d4cddc9af 100644 --- a/test/snapshots/numeric_edge_cases/frac_tiny_scientific.md +++ b/test/snapshots/numeric_edge_cases/frac_tiny_scientific.md @@ -30,5 +30,5 @@ NO CHANGE ~~~ # TYPES ~~~clojure -(expr @1.1-1.9 (type "Frac(_size)")) +(expr @1.1-1.9 (type "Num(Frac(_size))")) ~~~ diff --git a/test/snapshots/numeric_edge_cases/int_i128_max.md b/test/snapshots/numeric_edge_cases/int_i128_max.md index eecf57fc2a..35f5dde054 100644 --- a/test/snapshots/numeric_edge_cases/int_i128_max.md +++ b/test/snapshots/numeric_edge_cases/int_i128_max.md @@ -26,7 +26,7 @@ NO CHANGE ~~~ # CANONICALIZE ~~~clojure -(e-int @1.1-1.40 (value "170141183460469231731687303715884105727")) +(e-num @1.1-1.40 (value "170141183460469231731687303715884105727")) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/numeric_edge_cases/int_i16_max.md b/test/snapshots/numeric_edge_cases/int_i16_max.md index c75199bbb3..d589020c64 100644 --- a/test/snapshots/numeric_edge_cases/int_i16_max.md +++ b/test/snapshots/numeric_edge_cases/int_i16_max.md @@ -26,7 +26,7 @@ NO CHANGE ~~~ # CANONICALIZE ~~~clojure -(e-int @1.1-1.6 (value "32767")) +(e-num @1.1-1.6 (value "32767")) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/numeric_edge_cases/int_i32_max.md b/test/snapshots/numeric_edge_cases/int_i32_max.md index d882e90a57..d417b8b914 100644 --- a/test/snapshots/numeric_edge_cases/int_i32_max.md +++ b/test/snapshots/numeric_edge_cases/int_i32_max.md @@ -26,7 +26,7 @@ NO CHANGE ~~~ # CANONICALIZE ~~~clojure -(e-int @1.1-1.11 (value "2147483647")) +(e-num @1.1-1.11 (value "2147483647")) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/numeric_edge_cases/int_i32_min.md b/test/snapshots/numeric_edge_cases/int_i32_min.md index 81e0f14e27..1b1ea9e6fa 100644 --- a/test/snapshots/numeric_edge_cases/int_i32_min.md +++ b/test/snapshots/numeric_edge_cases/int_i32_min.md @@ -26,7 +26,7 @@ NO CHANGE ~~~ # CANONICALIZE ~~~clojure -(e-int @1.1-1.12 (value "-2147483648")) +(e-num @1.1-1.12 (value "-2147483648")) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/numeric_edge_cases/int_i64_max.md b/test/snapshots/numeric_edge_cases/int_i64_max.md index 19b2b0f8f5..ceffae1bca 100644 --- a/test/snapshots/numeric_edge_cases/int_i64_max.md +++ b/test/snapshots/numeric_edge_cases/int_i64_max.md @@ -26,7 +26,7 @@ NO CHANGE ~~~ # CANONICALIZE ~~~clojure -(e-int @1.1-1.20 (value "9223372036854775807")) +(e-num @1.1-1.20 (value "9223372036854775807")) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/numeric_edge_cases/int_i8_max.md b/test/snapshots/numeric_edge_cases/int_i8_max.md index feb69d0e8e..11fa05cb7d 100644 --- a/test/snapshots/numeric_edge_cases/int_i8_max.md +++ b/test/snapshots/numeric_edge_cases/int_i8_max.md @@ -26,7 +26,7 @@ NO CHANGE ~~~ # CANONICALIZE ~~~clojure -(e-int @1.1-1.4 (value "127")) +(e-num @1.1-1.4 (value "127")) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/numeric_edge_cases/int_i8_min.md b/test/snapshots/numeric_edge_cases/int_i8_min.md index bf850f17be..80a94dd7bf 100644 --- a/test/snapshots/numeric_edge_cases/int_i8_min.md +++ b/test/snapshots/numeric_edge_cases/int_i8_min.md @@ -26,7 +26,7 @@ NO CHANGE ~~~ # CANONICALIZE ~~~clojure -(e-int @1.1-1.5 (value "-128")) +(e-num @1.1-1.5 (value "-128")) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/numeric_edge_cases/int_negative_zero.md b/test/snapshots/numeric_edge_cases/int_negative_zero.md index d6ba30a38c..829f44cacb 100644 --- a/test/snapshots/numeric_edge_cases/int_negative_zero.md +++ b/test/snapshots/numeric_edge_cases/int_negative_zero.md @@ -26,7 +26,7 @@ NO CHANGE ~~~ # CANONICALIZE ~~~clojure -(e-int @1.1-1.3 (value "0")) +(e-num @1.1-1.3 (value "0")) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/numeric_edge_cases/int_u8_max.md b/test/snapshots/numeric_edge_cases/int_u8_max.md index de914fc2b1..656f4191c6 100644 --- a/test/snapshots/numeric_edge_cases/int_u8_max.md +++ b/test/snapshots/numeric_edge_cases/int_u8_max.md @@ -26,7 +26,7 @@ NO CHANGE ~~~ # CANONICALIZE ~~~clojure -(e-int @1.1-1.4 (value "255")) +(e-num @1.1-1.4 (value "255")) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/numeric_edge_cases/int_zero.md b/test/snapshots/numeric_edge_cases/int_zero.md index ac665f2279..c8a40a3f90 100644 --- a/test/snapshots/numeric_edge_cases/int_zero.md +++ b/test/snapshots/numeric_edge_cases/int_zero.md @@ -26,7 +26,7 @@ NO CHANGE ~~~ # CANONICALIZE ~~~clojure -(e-int @1.1-1.2 (value "0")) +(e-num @1.1-1.2 (value "0")) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/package_header_nonempty_multiline_1.md b/test/snapshots/package_header_nonempty_multiline_1.md index a4168a2841..3abb264909 100644 --- a/test/snapshots/package_header_nonempty_multiline_1.md +++ b/test/snapshots/package_header_nonempty_multiline_1.md @@ -60,11 +60,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)) ~~~ diff --git a/test/snapshots/package_header_nonempty_multiline_4.md b/test/snapshots/package_header_nonempty_multiline_4.md index d6cec9b1bf..5f42d9756c 100644 --- a/test/snapshots/package_header_nonempty_multiline_4.md +++ b/test/snapshots/package_header_nonempty_multiline_4.md @@ -70,11 +70,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)) ~~~ diff --git a/test/snapshots/package_header_nonempty_singleline_1.md b/test/snapshots/package_header_nonempty_singleline_1.md index 1b216f1ed4..eb6c114688 100644 --- a/test/snapshots/package_header_nonempty_singleline_1.md +++ b/test/snapshots/package_header_nonempty_singleline_1.md @@ -59,11 +59,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)) ~~~ diff --git a/test/snapshots/pass/exposed_not_impl.md b/test/snapshots/pass/exposed_not_impl.md index 12be6f6d6e..c671e5e415 100644 --- a/test/snapshots/pass/exposed_not_impl.md +++ b/test/snapshots/pass/exposed_not_impl.md @@ -52,16 +52,6 @@ module [foo, bar, MyType, OtherType, foo, MyType] ^^^ You can fix this by either defining `bar` in this module, or by removing it from the list of exposed values. -**EXPOSED BUT NOT DEFINED** -The module header says that `MyType` is exposed, but it is not defined anywhere in this module. - -**exposed_not_impl.md:1:19:1:25:** -```roc -module [foo, bar, MyType, OtherType, foo, MyType] -``` - ^^^^^^ -You can fix this by either defining `MyType` in this module, or by removing it from the list of exposed values. - **EXPOSED BUT NOT DEFINED** The module header says that `OtherType` is exposed, but it is not defined anywhere in this module. diff --git a/test/snapshots/pass/underscore_in_regular_annotations.md b/test/snapshots/pass/underscore_in_regular_annotations.md index d04c9b2123..b11354bdda 100644 --- a/test/snapshots/pass/underscore_in_regular_annotations.md +++ b/test/snapshots/pass/underscore_in_regular_annotations.md @@ -79,6 +79,27 @@ process = |list| "processed" ^^^^ +**INCOMPATIBLE MATCH PATTERNS** +The first pattern in this `match` is incompatible: +**underscore_in_regular_annotations.md:20:5:** +```roc + match result { + Ok(_) => "success", + Err(msg) => msg, + } +``` + ^^^^^ + +The first pattern has the type: + _Result(ok, err)_ + +But the expression right after `match` has the type: + _Result(ok, Str)_ + +These two types can't never match! + + + # TOKENS ~~~zig KwModule(1:1-1:7),OpenSquare(1:8-1:9),CloseSquare(1:9-1:10), @@ -273,8 +294,8 @@ transform = |_, b| b (annotation @7.1-7.9 (declared-type (ty-fn @6.12-6.18 (effectful false) - (ty-var @6.12-6.13 (name "a")) - (ty-var @6.17-6.18 (name "a")))))) + (ty-rigid-var @6.12-6.13 (name "a")) + (ty-rigid-var @6.12-6.13 (name "a")))))) (d-let (p-assign @11.1-11.8 (ident "process")) (e-lambda @11.11-11.29 @@ -285,9 +306,9 @@ transform = |_, b| b (annotation @11.1-11.8 (declared-type (ty-fn @10.11-10.25 (effectful false) - (ty-apply @10.11-10.18 (symbol "List") + (ty-apply @10.11-10.18 (name "List") (builtin) (ty-underscore @10.16-10.16)) - (ty @10.22-10.25 (name "Str")))))) + (ty-lookup @10.22-10.25 (name "Str") (builtin)))))) (d-let (p-assign @15.1-15.9 (ident "get_data")) (e-lambda @15.12-15.33 @@ -304,8 +325,8 @@ transform = |_, b| b (field (field "field") (ty-underscore @1.1-1.1)) (field (field "other") - (ty @14.31-14.34 (name "U32")))) - (ty @14.40-14.43 (name "U32")))))) + (ty-lookup @14.31-14.34 (name "U32") (builtin)))) + (ty-lookup @14.40-14.43 (name "U32") (builtin)))))) (d-let (p-assign @19.1-19.14 (ident "handle_result")) (e-closure @19.17-23.6 @@ -339,10 +360,10 @@ transform = |_, b| b (annotation @19.1-19.14 (declared-type (ty-fn @18.17-18.38 (effectful false) - (ty-apply @18.17-18.31 (symbol "Result") - (ty-underscore @18.24-18.24) - (ty @18.27-18.30 (name "Str"))) - (ty @18.35-18.38 (name "Str")))))) + (ty-apply @18.17-18.31 (name "Result") (local) + (ty-underscore @18.17-18.31) + (ty-lookup @18.17-18.31 (name "Str") (builtin))) + (ty-lookup @18.35-18.38 (name "Str") (builtin)))))) (d-let (p-assign @27.1-27.4 (ident "map")) (e-lambda @27.7-27.16 @@ -355,12 +376,12 @@ transform = |_, b| b (ty-fn @26.7-26.35 (effectful false) (ty-parens @26.7-26.15 (ty-fn @26.8-26.14 (effectful false) - (ty-var @26.8-26.9 (name "a")) - (ty-var @26.13-26.14 (name "b")))) - (ty-apply @26.17-26.24 (symbol "List") - (ty-var @26.22-26.23 (name "a"))) - (ty-apply @26.28-26.35 (symbol "List") - (ty-var @26.33-26.34 (name "b"))))))) + (ty-rigid-var @26.8-26.9 (name "a")) + (ty-rigid-var @26.13-26.14 (name "b")))) + (ty-apply @26.17-26.24 (name "List") (builtin) + (ty-rigid-var @26.8-26.9 (name "a"))) + (ty-apply @26.28-26.35 (name "List") (builtin) + (ty-rigid-var @26.13-26.14 (name "b"))))))) (d-let (p-assign @31.1-31.10 (ident "transform")) (e-lambda @31.13-31.21 @@ -368,7 +389,20 @@ transform = |_, b| b (p-underscore @31.14-31.15) (p-assign @31.17-31.18 (ident "b"))) (e-lookup-local @31.20-31.21 - (p-assign @31.17-31.18 (ident "b")))))) + (p-assign @31.17-31.18 (ident "b"))))) + (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 @@ -376,17 +410,25 @@ transform = |_, b| b (defs (patt @4.1-4.5 (type "_arg -> _ret")) (patt @7.1-7.9 (type "a -> a")) - (patt @11.1-11.8 (type "List(_c) -> Str")) - (patt @15.1-15.9 (type "{ field: _field2, other: U32 } -> U32")) - (patt @19.1-19.14 (type "Result(ok, Str) -> Str")) + (patt @11.1-11.8 (type "List(_elem) -> Str")) + (patt @15.1-15.9 (type "{ field: _field2, other: Num(Int(Unsigned32)) } -> Num(Int(Unsigned32))")) + (patt @19.1-19.14 (type "Result(_c, Str) -> Error")) (patt @27.1-27.4 (type "a -> b, List(a) -> List(b)")) - (patt @31.1-31.10 (type "_arg, _arg2 -> _ret"))) + (patt @31.1-31.10 (type "_arg, c -> c"))) + (type_decls + (nominal @1.1-1.1 (type "Bool") + (ty-header @1.1-1.1 (name "Bool"))) + (nominal @1.1-1.1 (type "Error") + (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.8-4.13 (type "_arg -> _ret")) (expr @7.12-7.17 (type "a -> a")) - (expr @11.11-11.29 (type "List(_c) -> Str")) - (expr @15.12-15.33 (type "{ field: _field2, other: U32 } -> U32")) - (expr @19.17-23.6 (type "Result(ok, Str) -> Str")) + (expr @11.11-11.29 (type "List(_elem) -> Str")) + (expr @15.12-15.33 (type "{ field: _field2, other: Num(Int(Unsigned32)) } -> Num(Int(Unsigned32))")) + (expr @19.17-23.6 (type "Result(_c, Str) -> Error")) (expr @27.7-27.16 (type "a -> b, List(a) -> List(b)")) - (expr @31.13-31.21 (type "_arg, _arg2 -> _ret")))) + (expr @31.13-31.21 (type "_arg, c -> c")))) ~~~ diff --git a/test/snapshots/plume_package/Color.md b/test/snapshots/plume_package/Color.md index c983cce9f2..a48a7b5800 100644 --- a/test/snapshots/plume_package/Color.md +++ b/test/snapshots/plume_package/Color.md @@ -78,9 +78,7 @@ is_named_color = |str|{ } ~~~ # EXPECTED -UNUSED VARIABLE - Color.md:30:5:30:25 -UNDEFINED VARIABLE - Color.md:68:14:68:27 -INVALID NOMINAL TAG - Color.md:23:5:23:33 +NIL # PROBLEMS **UNUSED VARIABLE** Variable `is_char_in_hex_range` is not used anywhere in your code. @@ -105,23 +103,32 @@ Is there an `import` or `exposing` missing up-top? ^^^^^^^^^^^^^ -**INVALID NOMINAL TAG** -I'm having trouble with this nominal tag: -**Color.md:23:5:23:33:** +**TYPE MISMATCH** +This expression is used in an unexpected way: +**Color.md:22:29:22:34:** ```roc - Color.RGBA(r, g, b, rounded) + rounded = a.to_frac() / 255.0 ``` - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ^^^^^ -The tag is: - _RGBA(U8, U8, U8, Num(_size))_ +It has the type: + _Frac(_size)_ -But it should be one of: - _[Hex(Str), Named(Str), RGB(U8, U8, U8), RGBA(U8, U8, U8, Dec)]_ +But I expected it to be: + _Num(_size)_ -**Hint:** The nominal type has a tag with the same name, but different args: +**INVALID BOOL OPERATION** +I'm having trouble with this bool operation: +**Color.md:30:33:** +```roc + is_char_in_hex_range = |b| (b >= '0' and b <= '9') or (b >= 'a' and b <= 'f') or (b >= 'A' and b <= 'F') +``` + ^^^^^^^^ - _RGBA(U8, U8, U8, Dec)_ +Both sides of `and` must be _Bool_ values, but the left side is: + _Num(_size)_ + +Note: Roc does not have "truthiness" where other values like strings, numbers or lists are automatically converted to bools. You must do that conversion yourself! # TOKENS ~~~zig @@ -655,10 +662,10 @@ is_named_color = |str| { (annotation @18.1-18.4 (declared-type (ty-fn @17.7-17.26 (effectful false) - (ty @17.7-17.9 (name "U8")) - (ty @17.11-17.13 (name "U8")) - (ty @17.15-17.17 (name "U8")) - (ty @17.21-17.26 (name "Color")))))) + (ty-lookup @17.7-17.9 (name "U8") (builtin)) + (ty-lookup @17.11-17.13 (name "U8") (builtin)) + (ty-lookup @17.15-17.17 (name "U8") (builtin)) + (ty-lookup @17.21-17.26 (name "Color") (local)))))) (d-let (p-assign @21.1-21.5 (ident "rgba")) (e-lambda @21.8-24.2 @@ -691,20 +698,20 @@ is_named_color = |str| { (annotation @21.1-21.5 (declared-type (ty-fn @20.8-20.31 (effectful false) - (ty @20.8-20.10 (name "U8")) - (ty @20.12-20.14 (name "U8")) - (ty @20.16-20.18 (name "U8")) - (ty @20.20-20.22 (name "U8")) - (ty @20.26-20.31 (name "Color")))))) + (ty-lookup @20.8-20.10 (name "U8") (builtin)) + (ty-lookup @20.12-20.14 (name "U8") (builtin)) + (ty-lookup @20.16-20.18 (name "U8") (builtin)) + (ty-lookup @20.20-20.22 (name "U8") (builtin)) + (ty-lookup @20.26-20.31 (name "Color") (local)))))) (d-let (p-assign @27.1-27.4 (ident "hex")) (e-closure @27.7-46.2 (captures - (capture @33.21-33.22 (ident "c")) (capture @33.30-33.31 (ident "f")) + (capture @33.27-33.28 (ident "e")) (capture @33.15-33.16 (ident "a")) (capture @33.18-33.19 (ident "b")) - (capture @33.27-33.28 (ident "e")) + (capture @33.21-33.22 (ident "c")) (capture @33.24-33.25 (ident "d")) (capture @34.13-34.21 (ident "is_valid"))) (e-lambda @27.7-46.2 @@ -728,30 +735,30 @@ is_named_color = |str| { (e-binop @30.33-30.41 (op "ge") (e-lookup-local @30.33-30.34 (p-assign @30.29-30.30 (ident "b"))) - (e-int @30.38-30.41 (value "48"))) + (e-num @30.38-30.41 (value "48"))) (e-binop @30.46-30.54 (op "le") (e-lookup-local @30.46-30.47 (p-assign @30.29-30.30 (ident "b"))) - (e-int @30.51-30.54 (value "57")))) + (e-num @30.51-30.54 (value "57")))) (e-binop @30.59-30.109 (op "or") (e-binop @30.60-30.81 (op "and") (e-binop @30.60-30.68 (op "ge") (e-lookup-local @30.60-30.61 (p-assign @30.29-30.30 (ident "b"))) - (e-int @30.65-30.68 (value "97"))) + (e-num @30.65-30.68 (value "97"))) (e-binop @30.73-30.81 (op "le") (e-lookup-local @30.73-30.74 (p-assign @30.29-30.30 (ident "b"))) - (e-int @30.78-30.81 (value "102")))) + (e-num @30.78-30.81 (value "102")))) (e-binop @30.87-30.108 (op "and") (e-binop @30.87-30.95 (op "ge") (e-lookup-local @30.87-30.88 (p-assign @30.29-30.30 (ident "b"))) - (e-int @30.92-30.95 (value "65"))) + (e-num @30.92-30.95 (value "65"))) (e-binop @30.100-30.108 (op "le") (e-lookup-local @30.100-30.101 (p-assign @30.29-30.30 (ident "b"))) - (e-int @30.105-30.108 (value "70")))))))) + (e-num @30.105-30.108 (value "70")))))))) (e-match @32.5-45.6 (match @32.5-45.6 (cond @@ -851,26 +858,25 @@ is_named_color = |str| { (annotation @27.1-27.4 (declared-type (ty-fn @26.7-26.46 (effectful false) - (ty @26.7-26.10 (name "Str")) - (ty-apply @26.14-26.46 (symbol "Result") - (ty @26.21-26.26 (name "Color")) - (ty-tag-union @26.28-26.45 - (ty-apply @26.29-26.44 (symbol "InvalidHex") - (ty @26.40-26.43 (name "Str"))))))))) + (ty-lookup @26.7-26.10 (name "Str") (builtin)) + (ty-apply @26.14-26.46 (name "Result") (local) + (ty-lookup @26.14-26.46 (name "Color") (local)) + (ty-tag-union @26.14-26.46 + (tag_name @26.29-26.44 (name "InvalidHex")))))))) (d-let (p-assign @49.1-49.7 (ident "to_str")) (e-closure @49.10-54.2 (captures (capture @51.22-51.23 (ident "b")) (capture @51.25-51.26 (ident "a")) - (capture @49.1-49.7 (ident "to_str")) (capture @52.17-52.22 (ident "inner")) - (capture @50.15-50.16 (ident "r")) - (capture @50.18-50.19 (ident "g")) + (capture @50.21-50.22 (ident "b")) (capture @53.15-53.20 (ident "inner")) - (capture @51.19-51.20 (ident "g")) + (capture @49.1-49.7 (ident "to_str")) + (capture @50.18-50.19 (ident "g")) (capture @51.16-51.17 (ident "r")) - (capture @50.21-50.22 (ident "b"))) + (capture @50.15-50.16 (ident "r")) + (capture @51.19-51.20 (ident "g"))) (e-lambda @49.10-54.2 (args (p-assign @49.11-49.16 (ident "color"))) @@ -889,20 +895,14 @@ is_named_color = |str| { (e-string @50.27-50.86 (e-literal @50.28-50.32 (string "rgb(")) (e-call @50.34-50.47 - (e-lookup-local @50.34-50.44 - (p-assign @49.1-49.7 (ident "to_str"))) (e-lookup-local @50.45-50.46 (p-assign @50.15-50.16 (ident "r")))) (e-literal @50.48-50.50 (string ", ")) (e-call @50.52-50.65 - (e-lookup-local @50.52-50.62 - (p-assign @49.1-49.7 (ident "to_str"))) (e-lookup-local @50.63-50.64 (p-assign @50.18-50.19 (ident "g")))) (e-literal @50.66-50.68 (string ", ")) (e-call @50.70-50.83 - (e-lookup-local @50.70-50.80 - (p-assign @49.1-49.7 (ident "to_str"))) (e-lookup-local @50.81-50.82 (p-assign @50.21-50.22 (ident "b")))) (e-literal @50.84-50.85 (string ")"))))) @@ -915,26 +915,18 @@ is_named_color = |str| { (e-string @51.31-51.109 (e-literal @51.32-51.37 (string "rgba(")) (e-call @51.39-51.52 - (e-lookup-local @51.39-51.49 - (p-assign @49.1-49.7 (ident "to_str"))) (e-lookup-local @51.50-51.51 (p-assign @51.16-51.17 (ident "r")))) (e-literal @51.53-51.55 (string ", ")) (e-call @51.57-51.70 - (e-lookup-local @51.57-51.67 - (p-assign @49.1-49.7 (ident "to_str"))) (e-lookup-local @51.68-51.69 (p-assign @51.19-51.20 (ident "g")))) (e-literal @51.71-51.73 (string ", ")) (e-call @51.75-51.88 - (e-lookup-local @51.75-51.85 - (p-assign @49.1-49.7 (ident "to_str"))) (e-lookup-local @51.86-51.87 (p-assign @51.22-51.23 (ident "b")))) (e-literal @51.89-51.91 (string ", ")) (e-call @51.93-51.106 - (e-lookup-local @51.93-51.103 - (p-assign @49.1-49.7 (ident "to_str"))) (e-lookup-local @51.104-51.105 (p-assign @51.25-51.26 (ident "a")))) (e-literal @51.107-51.108 (string ")"))))) @@ -957,8 +949,8 @@ is_named_color = |str| { (annotation @49.1-49.7 (declared-type (ty-fn @48.10-48.22 (effectful false) - (ty @48.10-48.15 (name "Color")) - (ty @48.19-48.22 (name "Str")))))) + (ty-lookup @48.10-48.15 (name "Color") (local)) + (ty-lookup @48.19-48.22 (name "Str") (builtin)))))) (d-let (p-assign @61.1-61.6 (ident "named")) (e-lambda @61.9-65.50 @@ -994,12 +986,11 @@ is_named_color = |str| { (annotation @61.1-61.6 (declared-type (ty-fn @60.9-60.50 (effectful false) - (ty @60.9-60.12 (name "Str")) - (ty-apply @60.16-60.50 (symbol "Result") - (ty @60.23-60.28 (name "Color")) - (ty-tag-union @60.30-60.49 - (ty-apply @60.31-60.48 (symbol "UnknownColor") - (ty @60.44-60.47 (name "Str"))))))))) + (ty-lookup @60.9-60.12 (name "Str") (builtin)) + (ty-apply @60.16-60.50 (name "Result") (local) + (ty-lookup @60.16-60.50 (name "Color") (local)) + (ty-tag-union @60.16-60.50 + (tag_name @60.31-60.48 (name "UnknownColor")))))))) (d-let (p-assign @67.1-67.15 (ident "is_named_color")) (e-lambda @67.18-71.2 @@ -1009,7 +1000,6 @@ is_named_color = |str| { (s-let @68.5-68.66 (p-assign @68.5-68.11 (ident "colors")) (e-call @68.14-68.66 - (e-runtime-error (tag "ident_not_in_scope")) (e-list @68.28-68.65 (elems (e-string @68.29-68.40 @@ -1025,32 +1015,34 @@ is_named_color = |str| { (args (e-lookup-local @70.21-70.24 (p-assign @67.19-67.22 (ident "str")))))))) + (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-nominal-decl @10.1-15.2 (ty-header @10.1-10.6 (name "Color")) (ty-tag-union @10.10-15.2 - (ty-apply @11.5-11.20 (symbol "RGB") - (ty @11.9-11.11 (name "U8")) - (ty @11.13-11.15 (name "U8")) - (ty @11.17-11.19 (name "U8"))) - (ty-apply @12.5-12.26 (symbol "RGBA") - (ty @12.10-12.12 (name "U8")) - (ty @12.14-12.16 (name "U8")) - (ty @12.18-12.20 (name "U8")) - (ty @12.22-12.25 (name "Dec"))) - (ty-apply @13.5-13.15 (symbol "Named") - (ty @13.11-13.14 (name "Str"))) - (ty-apply @14.5-14.13 (symbol "Hex") - (ty @14.9-14.12 (name "Str"))))) + (tag_name @11.5-11.20 (name "RGB")) + (tag_name @12.5-12.26 (name "RGBA")) + (tag_name @13.5-13.15 (name "Named")) + (tag_name @14.5-14.13 (name "Hex")))) (s-expect @56.1-56.57 (e-binop @56.8-56.57 (op "eq") (e-dot-access @56.8-56.34 (field "to_str") (receiver (e-call @56.8-56.25 - (e-lookup-local @56.8-56.11 - (p-assign @18.1-18.4 (ident "rgb"))) - (e-int @56.12-56.15 (value "124")) - (e-int @56.17-56.19 (value "56")) - (e-int @56.21-56.24 (value "245")))) + (e-num @56.12-56.15 (value "124")) + (e-num @56.17-56.19 (value "56")) + (e-num @56.21-56.24 (value "245")))) (args)) (e-string @56.38-56.57 (e-literal @56.39-56.56 (string "rgb(124, 56, 245)"))))) @@ -1059,12 +1051,10 @@ is_named_color = |str| { (e-dot-access @57.8-57.40 (field "to_str") (receiver (e-call @57.8-57.31 - (e-lookup-local @57.8-57.12 - (p-assign @21.1-21.5 (ident "rgba"))) - (e-int @57.13-57.16 (value "124")) - (e-int @57.18-57.20 (value "56")) - (e-int @57.22-57.25 (value "245")) - (e-int @57.27-57.30 (value "255")))) + (e-num @57.13-57.16 (value "124")) + (e-num @57.18-57.20 (value "56")) + (e-num @57.22-57.25 (value "245")) + (e-num @57.27-57.30 (value "255")))) (args)) (e-string @57.44-57.69 (e-literal @57.45-57.68 (string "rgba(124, 56, 245, 1.0)"))))) @@ -1073,8 +1063,6 @@ is_named_color = |str| { (e-dot-access @58.8-58.37 (field "map_ok") (receiver (e-call @58.8-58.22 - (e-lookup-local @58.8-58.11 - (p-assign @27.1-27.4 (ident "hex"))) (e-string @58.12-58.21 (e-literal @58.13-58.20 (string "#ff00ff"))))) (args @@ -1090,20 +1078,27 @@ is_named_color = |str| { ~~~clojure (inferred-types (defs - (patt @18.1-18.4 (type "U8, U8, U8 -> Error")) - (patt @21.1-21.5 (type "U8, U8, U8, U8 -> Error")) - (patt @27.1-27.4 (type "Str -> Result(Error, [InvalidHex(Str)])")) - (patt @49.1-49.7 (type "Error -> Str")) - (patt @61.1-61.6 (type "Str -> Result(Error, [UnknownColor(Str)])")) + (patt @18.1-18.4 (type "Num(Int(Unsigned8)), Num(Int(Unsigned8)), Num(Int(Unsigned8)) -> Color")) + (patt @21.1-21.5 (type "Num(Int(Unsigned8)), Num(Int(Unsigned8)), Num(Int(Unsigned8)), Num(Int(Unsigned8)) -> Color")) + (patt @27.1-27.4 (type "Str -> Result(Color, [InvalidHex(Str)])")) + (patt @49.1-49.7 (type "Error -> Error")) + (patt @61.1-61.6 (type "Str -> Result(Color, [UnknownColor(Str)])")) (patt @67.1-67.15 (type "_arg -> _ret"))) (type_decls - (nominal @10.1-15.2 (type "Error") + (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"))))) + (nominal @10.1-15.2 (type "Color") (ty-header @10.1-10.6 (name "Color")))) (expressions - (expr @18.7-18.35 (type "U8, U8, U8 -> Error")) - (expr @21.8-24.2 (type "U8, U8, U8, U8 -> Error")) - (expr @27.7-46.2 (type "Str -> Result(Error, [InvalidHex(Str)])")) - (expr @49.10-54.2 (type "Error -> Str")) - (expr @61.9-65.50 (type "Str -> Result(Error, [UnknownColor(Str)])")) + (expr @18.7-18.35 (type "Num(Int(Unsigned8)), Num(Int(Unsigned8)), Num(Int(Unsigned8)) -> Color")) + (expr @21.8-24.2 (type "Num(Int(Unsigned8)), Num(Int(Unsigned8)), Num(Int(Unsigned8)), Num(Int(Unsigned8)) -> Color")) + (expr @27.7-46.2 (type "Str -> Result(Color, [InvalidHex(Str)])")) + (expr @49.10-54.2 (type "Error -> Error")) + (expr @61.9-65.50 (type "Str -> Result(Color, [UnknownColor(Str)])")) (expr @67.18-71.2 (type "_arg -> _ret")))) ~~~ diff --git a/test/snapshots/plume_package/main.md b/test/snapshots/plume_package/main.md index e4b561f713..c15ce1ede3 100644 --- a/test/snapshots/plume_package/main.md +++ b/test/snapshots/plume_package/main.md @@ -10,7 +10,7 @@ package [ ] {} ~~~ # EXPECTED -EXPOSED BUT NOT DEFINED - main.md:2:5:2:10 +NIL # PROBLEMS **EXPOSED BUT NOT DEFINED** The module header says that `Color` is exposed, but it is not defined anywhere in this module. @@ -48,11 +48,32 @@ package ~~~ # 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)) ~~~ diff --git a/test/snapshots/primitive/stmt_type_decl.md b/test/snapshots/primitive/stmt_type_decl.md index 2f4513e8bb..06ee043930 100644 --- a/test/snapshots/primitive/stmt_type_decl.md +++ b/test/snapshots/primitive/stmt_type_decl.md @@ -46,26 +46,46 @@ Foo(a, b) : (a, b, Str, U64) # 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.25 (ty-header @3.1-3.9 (name "Foo") (ty-args - (ty-var @3.5-3.6 (name "a")) - (ty-var @3.7-3.8 (name "b")))) + (ty-rigid-var @3.5-3.6 (name "a")) + (ty-rigid-var @3.7-3.8 (name "b")))) (ty-tuple @3.12-3.25 - (ty-var @3.13-3.14 (name "a")) - (ty-var @3.15-3.16 (name "b")) - (ty @3.17-3.20 (name "Str")) - (ty @3.21-3.24 (name "U64"))))) + (ty-rigid-var @3.5-3.6 (name "a")) + (ty-rigid-var @3.7-3.8 (name "b")) + (ty-lookup @3.17-3.20 (name "Str") (builtin)) + (ty-lookup @3.21-3.24 (name "U64") (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.25 (type "Foo(a, b)") (ty-header @3.1-3.9 (name "Foo") (ty-args - (ty-var @3.5-3.6 (name "a")) - (ty-var @3.7-3.8 (name "b")))))) + (ty-rigid-var @3.5-3.6 (name "a")) + (ty-rigid-var @3.7-3.8 (name "b")))))) (expressions)) ~~~ diff --git a/test/snapshots/pure_annotation_effectful_body_error.md b/test/snapshots/pure_annotation_effectful_body_error.md index 84653b1b84..fbac568692 100644 --- a/test/snapshots/pure_annotation_effectful_body_error.md +++ b/test/snapshots/pure_annotation_effectful_body_error.md @@ -86,23 +86,31 @@ NO CHANGE (args (p-assign @7.17-7.20 (ident "msg"))) (e-call @7.22-7.39 - (e-lookup-external @7.22-7.34 - (module-idx "0") - (target-node-idx "0")) (e-lookup-local @7.35-7.38 (p-assign @7.17-7.20 (ident "msg"))))) (annotation @7.1-7.13 (declared-type (ty-fn @6.16-6.25 (effectful false) - (ty @6.16-6.19 (name "Str")) + (ty-lookup @6.16-6.19 (name "Str") (builtin)) (ty-record @6.23-6.25))))) (d-let (p-assign @9.1-9.6 (ident "main!")) (e-call @9.9-9.41 - (e-lookup-local @9.9-9.21 - (p-assign @7.1-7.13 (ident "bad_function"))) (e-string @9.22-9.40 (e-literal @9.23-9.39 (string "This should fail"))))) + (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))) ~~~ @@ -112,6 +120,14 @@ NO CHANGE (defs (patt @7.1-7.13 (type "Str -> { }")) (patt @9.1-9.6 (type "{ }"))) + (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.16-7.39 (type "Str -> { }")) (expr @9.9-9.41 (type "{ }")))) diff --git a/test/snapshots/pure_with_pure_annotation.md b/test/snapshots/pure_with_pure_annotation.md index 13d1163419..af03219559 100644 --- a/test/snapshots/pure_with_pure_annotation.md +++ b/test/snapshots/pure_with_pure_annotation.md @@ -110,9 +110,9 @@ NO CHANGE (annotation @5.1-5.4 (declared-type (ty-fn @4.7-4.22 (effectful false) - (ty @4.7-4.10 (name "I32")) - (ty @4.12-4.15 (name "I32")) - (ty @4.19-4.22 (name "I32")))))) + (ty-lookup @4.7-4.10 (name "I32") (builtin)) + (ty-lookup @4.12-4.15 (name "I32") (builtin)) + (ty-lookup @4.19-4.22 (name "I32") (builtin)))))) (d-let (p-assign @9.1-9.7 (ident "double")) (e-closure @9.10-9.23 @@ -122,8 +122,6 @@ NO CHANGE (args (p-assign @9.11-9.12 (ident "x"))) (e-call @9.14-9.23 - (e-lookup-local @9.14-9.17 - (p-assign @5.1-5.4 (ident "add"))) (e-lookup-local @9.18-9.19 (p-assign @9.11-9.12 (ident "x"))) (e-lookup-local @9.21-9.22 @@ -131,25 +129,44 @@ NO CHANGE (annotation @9.1-9.7 (declared-type (ty-fn @8.10-8.20 (effectful false) - (ty @8.10-8.13 (name "I32")) - (ty @8.17-8.20 (name "I32")))))) + (ty-lookup @8.10-8.13 (name "I32") (builtin)) + (ty-lookup @8.17-8.20 (name "I32") (builtin)))))) (d-let (p-assign @11.1-11.6 (ident "main!")) (e-call @11.9-11.18 - (e-lookup-local @11.9-11.12 - (p-assign @5.1-5.4 (ident "add"))) - (e-int @11.13-11.14 (value "1")) - (e-int @11.16-11.17 (value "2"))))) + (e-num @11.13-11.14 (value "1")) + (e-num @11.16-11.17 (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 @5.1-5.4 (type "I32, I32 -> I32")) - (patt @9.1-9.7 (type "I32 -> I32")) - (patt @11.1-11.6 (type "I32"))) + (patt @5.1-5.4 (type "Num(Int(Signed32)), Num(Int(Signed32)) -> Num(Int(Signed32))")) + (patt @9.1-9.7 (type "Num(Int(Signed32)) -> Num(Int(Signed32))")) + (patt @11.1-11.6 (type "Num(Int(Signed32))"))) + (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.7-5.30 (type "I32, I32 -> I32")) - (expr @9.10-9.23 (type "I32 -> I32")) - (expr @11.9-11.18 (type "I32")))) + (expr @5.7-5.30 (type "Num(Int(Signed32)), Num(Int(Signed32)) -> Num(Int(Signed32))")) + (expr @9.10-9.23 (type "Num(Int(Signed32)) -> Num(Int(Signed32))")) + (expr @11.9-11.18 (type "Num(Int(Signed32))")))) ~~~ diff --git a/test/snapshots/qualified_tag.md b/test/snapshots/qualified_tag.md index 73f92fa23f..52effc7ac5 100644 --- a/test/snapshots/qualified_tag.md +++ b/test/snapshots/qualified_tag.md @@ -14,16 +14,7 @@ test = Color.Red # EXPECTED NIL # PROBLEMS -**EXPOSED BUT NOT DEFINED** -The module header says that `Color` is exposed, but it is not defined anywhere in this module. - -**qualified_tag.md:1:9:1:14:** -```roc -module [Color] -``` - ^^^^^ -You can fix this by either defining `Color` in this module, or by removing it from the list of exposed values. - +NIL # TOKENS ~~~zig KwModule(1:1-1:7),OpenSquare(1:8-1:9),UpperIdent(1:9-1:14),CloseSquare(1:14-1:15), diff --git a/test/snapshots/rigid_var_no_instantiation_error.md b/test/snapshots/rigid_var_no_instantiation_error.md index b494204950..5b2e1465bd 100644 --- a/test/snapshots/rigid_var_no_instantiation_error.md +++ b/test/snapshots/rigid_var_no_instantiation_error.md @@ -226,11 +226,11 @@ main! = |_| { (declared-type (ty-fn @4.8-4.24 (effectful false) (ty-tuple @4.8-4.14 - (ty-var @4.9-4.10 (name "a")) - (ty-var @4.12-4.13 (name "b"))) + (ty-rigid-var @4.9-4.10 (name "a")) + (ty-rigid-var @4.12-4.13 (name "b"))) (ty-tuple @4.18-4.24 - (ty-var @4.19-4.20 (name "b")) - (ty-var @4.22-4.23 (name "a"))))))) + (ty-rigid-var @4.12-4.13 (name "b")) + (ty-rigid-var @4.9-4.10 (name "a"))))))) (d-let (p-assign @11.1-11.6 (ident "main!")) (e-closure @11.9-24.2 @@ -243,38 +243,45 @@ main! = |_| { (s-let @13.5-13.34 (p-assign @13.5-13.12 (ident "result1")) (e-call @13.15-13.34 - (e-lookup-local @13.15-13.19 - (p-assign @5.1-5.5 (ident "swap"))) (e-tuple @13.20-13.33 (elems - (e-int @13.21-13.23 (value "42")) + (e-num @13.21-13.23 (value "42")) (e-string @13.25-13.32 (e-literal @13.26-13.31 (string "hello"))))))) (s-let @17.5-17.43 (p-assign @17.5-17.12 (ident "result2")) (e-call @17.15-17.43 - (e-lookup-local @17.15-17.19 - (p-assign @5.1-5.5 (ident "swap"))) (e-tuple @17.20-17.42 (elems (e-runtime-error (tag "ident_not_in_scope")) (e-list @17.32-17.41 (elems - (e-int @17.33-17.34 (value "1")) - (e-int @17.36-17.37 (value "2")) - (e-int @17.39-17.40 (value "3")))))))) + (e-num @17.33-17.34 (value "1")) + (e-num @17.36-17.37 (value "2")) + (e-num @17.39-17.40 (value "3")))))))) (s-let @21.5-21.35 (p-assign @21.5-21.12 (ident "result3")) (e-call @21.15-21.35 - (e-lookup-local @21.15-21.19 - (p-assign @5.1-5.5 (ident "swap"))) (e-tuple @21.20-21.34 (elems (e-string @21.21-21.26 (e-literal @21.22-21.25 (string "foo"))) (e-string @21.28-21.33 (e-literal @21.29-21.32 (string "bar"))))))) - (e-empty_record @23.5-23.7)))))) + (e-empty_record @23.5-23.7))))) + (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 @@ -282,6 +289,14 @@ main! = |_| { (defs (patt @5.1-5.5 (type "(a, b) -> (b, a)")) (patt @11.1-11.6 (type "_arg -> {}"))) + (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-8.2 (type "(a, b) -> (b, a)")) (expr @11.9-24.2 (type "_arg -> {}")))) diff --git a/test/snapshots/simple_module_no_blanks.md b/test/snapshots/simple_module_no_blanks.md index 164204d210..9387977e68 100644 --- a/test/snapshots/simple_module_no_blanks.md +++ b/test/snapshots/simple_module_no_blanks.md @@ -64,15 +64,25 @@ NO CHANGE (d-let (p-assign @3.1-3.7 (ident "hello!")) (e-call @3.10-3.31 - (e-lookup-external @3.10-3.22 - (module-idx "0") - (target-node-idx "0")) (e-string @3.23-3.30 (e-literal @3.24-3.29 (string "Hello"))))) (d-let (p-assign @4.1-4.6 (ident "world")) (e-string @4.9-4.16 (e-literal @4.10-4.15 (string "World")))) + (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 @2.1-2.17 (module "pf.Stdout") (qualifier "pf") (exposes))) ~~~ @@ -82,6 +92,14 @@ NO CHANGE (defs (patt @3.1-3.7 (type "_a")) (patt @4.1-4.6 (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 @3.10-3.31 (type "_a")) (expr @4.9-4.16 (type "Str")))) diff --git a/test/snapshots/some_folder/002.md b/test/snapshots/some_folder/002.md index 7948ffb167..1e69a36cce 100644 --- a/test/snapshots/some_folder/002.md +++ b/test/snapshots/some_folder/002.md @@ -55,7 +55,20 @@ NO CHANGE (d-let (p-assign @5.1-5.4 (ident "bar")) (e-string @5.7-5.12 - (e-literal @5.8-5.11 (string "two"))))) + (e-literal @5.8-5.11 (string "two")))) + (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 @@ -63,6 +76,14 @@ NO CHANGE (defs (patt @3.1-3.4 (type "Str")) (patt @5.1-5.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 @3.7-3.12 (type "Str")) (expr @5.7-5.12 (type "Str")))) diff --git a/test/snapshots/statement/dbg_simple_test.md b/test/snapshots/statement/dbg_simple_test.md index a8140bd684..a963b33e62 100644 --- a/test/snapshots/statement/dbg_simple_test.md +++ b/test/snapshots/statement/dbg_simple_test.md @@ -61,16 +61,37 @@ test = { (e-block @3.8-6.2 (s-let @4.5-4.11 (p-assign @4.5-4.6 (ident "x")) - (e-int @4.9-4.11 (value "42"))) + (e-num @4.9-4.11 (value "42"))) (e-dbg @5.5-5.11 (e-lookup-local @5.9-5.10 - (p-assign @4.5-4.6 (ident "x"))))))) + (p-assign @4.5-4.6 (ident "x")))))) + (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.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 @3.8-6.2 (type "Num(_size)")))) ~~~ diff --git a/test/snapshots/statement/dbg_stmt_block_example.md b/test/snapshots/statement/dbg_stmt_block_example.md index 2a935e9e54..42c37a9709 100644 --- a/test/snapshots/statement/dbg_stmt_block_example.md +++ b/test/snapshots/statement/dbg_stmt_block_example.md @@ -81,13 +81,34 @@ foo = |num| { (args))) (e-dbg @8.5-8.13 (e-lookup-local @8.9-8.12 - (p-assign @3.8-3.11 (ident "num")))))))) + (p-assign @3.8-3.11 (ident "num"))))))) + (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 "_arg -> _ret"))) + (patt @3.1-3.4 (type "a -> a"))) + (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-9.2 (type "_arg -> _ret")))) + (expr @3.7-9.2 (type "a -> a")))) ~~~ diff --git a/test/snapshots/statement/dbg_stmt_in_body.md b/test/snapshots/statement/dbg_stmt_in_body.md index 54b195faea..421dfe0685 100644 --- a/test/snapshots/statement/dbg_stmt_in_body.md +++ b/test/snapshots/statement/dbg_stmt_in_body.md @@ -66,20 +66,41 @@ main = { (e-block @3.8-7.2 (s-let @4.5-4.11 (p-assign @4.5-4.6 (ident "x")) - (e-int @4.9-4.11 (value "42"))) + (e-num @4.9-4.11 (value "42"))) (s-dbg @5.5-5.10 (e-lookup-local @5.9-5.10 (p-assign @4.5-4.6 (ident "x")))) (e-binop @6.5-6.10 (op "add") (e-lookup-local @6.5-6.6 (p-assign @4.5-4.6 (ident "x"))) - (e-int @6.9-6.10 (value "1")))))) + (e-num @6.9-6.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 (inferred-types (defs (patt @3.1-3.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 @3.8-7.2 (type "Num(_size)")))) ~~~ diff --git a/test/snapshots/statement/dbg_stmt_not_permitted_top_level.md b/test/snapshots/statement/dbg_stmt_not_permitted_top_level.md index 55675cb365..33f3bc025d 100644 --- a/test/snapshots/statement/dbg_stmt_not_permitted_top_level.md +++ b/test/snapshots/statement/dbg_stmt_not_permitted_top_level.md @@ -57,13 +57,34 @@ NO CHANGE (can-ir (d-let (p-assign @6.1-6.4 (ident "foo")) - (e-not-implemented @1.1-1.1))) + (e-not-implemented @1.1-1.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 (inferred-types (defs (patt @6.1-6.4 (type "_a"))) + (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 @1.1-1.1 (type "_a")))) ~~~ diff --git a/test/snapshots/statement/expect_stmt_block_assertion.md b/test/snapshots/statement/expect_stmt_block_assertion.md index 7e868334fc..078e5b60a6 100644 --- a/test/snapshots/statement/expect_stmt_block_assertion.md +++ b/test/snapshots/statement/expect_stmt_block_assertion.md @@ -82,14 +82,35 @@ foo = |a| { (annotation @4.1-4.4 (declared-type (ty-fn @3.7-3.19 (effectful false) - (ty @3.7-3.11 (name "Bool")) - (ty @3.15-3.19 (name "Bool"))))))) + (ty-lookup @3.7-3.11 (name "Bool") (local)) + (ty-lookup @3.15-3.19 (name "Bool") (local)))))) + (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 "Bool -> Bool"))) + (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-7.2 (type "Bool -> Bool")))) ~~~ diff --git a/test/snapshots/statement/expect_stmt_top_level.md b/test/snapshots/statement/expect_stmt_top_level.md index b4f6701d2f..155f92fd56 100644 --- a/test/snapshots/statement/expect_stmt_top_level.md +++ b/test/snapshots/statement/expect_stmt_top_level.md @@ -49,6 +49,19 @@ NO CHANGE (p-assign @3.1-3.4 (ident "foo")) (e-nominal @3.7-3.16 (nominal "Bool") (e-tag @3.7-3.16 (name "True")))) + (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 @5.1-5.25 (e-binop @5.8-5.25 (op "ne") (e-lookup-local @5.8-5.11 @@ -61,6 +74,14 @@ NO CHANGE (inferred-types (defs (patt @3.1-3.4 (type "Bool"))) + (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.16 (type "Bool")))) ~~~ diff --git a/test/snapshots/statement/return_stmt_block_example.md b/test/snapshots/statement/return_stmt_block_example.md index 2b188d1f96..0377aa6040 100644 --- a/test/snapshots/statement/return_stmt_block_example.md +++ b/test/snapshots/statement/return_stmt_block_example.md @@ -20,6 +20,19 @@ foo = |num| { # EXPECTED INCOMPATIBLE IF BRANCHES - return_stmt_block_example.md:5:11:5:11 # PROBLEMS +**INVALID IF CONDITION** +This `if` condition needs to be a _Bool_: +**return_stmt_block_example.md:5:15:** +```roc + str = if (num > 10) { +``` + ^^^^^^^^ + +Right now, it has the type: + _Num(Int(Unsigned64))_ + +Every `if` condition must evaluate to a _Bool_–either `True` or `False`. + **INCOMPATIBLE IF BRANCHES** This `if` has an `else` branch with a different type from it's `then` branch: **return_stmt_block_example.md:5:11:** @@ -36,7 +49,7 @@ The `else` branch has the type: _Str_ But the `then` branch has the type: - _Result(ok, [TooBig]_others)_ + _Result(_a, _b)_ All branches in an `if` must have compatible types. @@ -133,7 +146,7 @@ foo = |num| { (e-binop @5.15-5.23 (op "gt") (e-lookup-local @5.15-5.18 (p-assign @4.8-4.11 (ident "num"))) - (e-int @5.21-5.23 (value "10"))) + (e-num @5.21-5.23 (value "10"))) (e-block @5.25-7.6 (e-nominal @6.16-6.27 (nominal "Result") (e-tag @6.16-6.27 (name "Err") @@ -151,17 +164,38 @@ foo = |num| { (annotation @4.1-4.4 (declared-type (ty-fn @3.7-3.35 (effectful false) - (ty @3.7-3.10 (name "U64")) - (ty-apply @3.14-3.35 (symbol "Result") - (ty @3.21-3.24 (name "Str")) - (ty-tag-union @3.26-3.34 - (ty @3.27-3.33 (name "TooBig"))))))))) + (ty-lookup @3.7-3.10 (name "U64") (builtin)) + (ty-apply @3.14-3.35 (name "Result") (local) + (ty-lookup @3.14-3.35 (name "Str") (builtin)) + (ty-tag-union @3.14-3.35 + (tag_name @3.27-3.33 (name "TooBig")))))))) + (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 "U64 -> Result(Error, [TooBig])"))) + (patt @4.1-4.4 (type "Num(Int(Unsigned64)) -> Result(Str, [TooBig])"))) + (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-11.2 (type "U64 -> Result(Error, [TooBig])")))) + (expr @4.7-11.2 (type "Num(Int(Unsigned64)) -> Result(Str, [TooBig])")))) ~~~ diff --git a/test/snapshots/statement_annotations.md b/test/snapshots/statement_annotations.md index 8f0b911924..7e3e3695ab 100644 --- a/test/snapshots/statement_annotations.md +++ b/test/snapshots/statement_annotations.md @@ -103,21 +103,40 @@ NO CHANGE (e-lookup-local @10.3-10.4 (p-assign @8.3-8.4 (ident "d")))))) (e-call @13.2-13.6 - (e-lookup-local @13.2-13.3 - (p-assign @6.2-6.3 (ident "b"))) (e-lookup-local @13.4-13.5 (p-assign @4.26-4.27 (ident "a")))))) (annotation @4.1-4.22 (declared-type (ty-fn @3.25-3.35 (effectful false) - (ty-var @3.25-3.28 (name "val")) - (ty-var @3.32-3.35 (name "val"))))))) + (ty-rigid-var @3.25-3.28 (name "val")) + (ty-rigid-var @3.25-3.28 (name "val")))))) + (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.22 (type "val -> val"))) + (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.25-14.2 (type "val -> val")))) ~~~ diff --git a/test/snapshots/string.md b/test/snapshots/string.md index 1ce05c1168..7428364c42 100644 --- a/test/snapshots/string.md +++ b/test/snapshots/string.md @@ -203,13 +203,34 @@ x = ( (e-string @9.2-9.8) (e-string @10.2-10.9) (e-string @11.2-11.13 - (e-literal @11.3-11.12 (string "\u(1F680)"))))))) + (e-literal @11.3-11.12 (string "\u(1F680)")))))) + (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 "(Str, Str, Str, Str, Str, Str, Str, 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.5-12.2 (type "(Str, Str, Str, Str, Str, Str, Str, Str)")))) ~~~ diff --git a/test/snapshots/string_multiline_formatting_(due_to_templating_not_multiline_string_literal)_3.md b/test/snapshots/string_multiline_formatting_(due_to_templating_not_multiline_string_literal)_3.md index dad6f18e1a..50306bb892 100644 --- a/test/snapshots/string_multiline_formatting_(due_to_templating_not_multiline_string_literal)_3.md +++ b/test/snapshots/string_multiline_formatting_(due_to_templating_not_multiline_string_literal)_3.md @@ -79,7 +79,6 @@ NO CHANGE (e-string @1.1-6.43 (e-literal @1.2-1.24 (string "This is a string with ")) (e-call @2.2-5.3 - (e-runtime-error (tag "ident_not_in_scope")) (e-runtime-error (tag "ident_not_in_scope")) (e-runtime-error (tag "ident_not_in_scope"))) (e-literal @6.2-6.42 (string " lines of text due to the template parts"))) diff --git a/test/snapshots/string_unicode_emoji.md b/test/snapshots/string_unicode_emoji.md index fdb979c327..ae9efdc956 100644 --- a/test/snapshots/string_unicode_emoji.md +++ b/test/snapshots/string_unicode_emoji.md @@ -57,7 +57,20 @@ NO CHANGE (d-let (p-assign @7.1-7.6 (ident "greet")) (e-string @7.9-7.85 - (e-literal @7.10-7.84 (string "Welcome! café résumé naïve 你好 こんにちは α β γ ∑ ∫ ∞"))))) + (e-literal @7.10-7.84 (string "Welcome! café résumé naïve 你好 こんにちは α β γ ∑ ∫ ∞")))) + (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 @@ -65,6 +78,14 @@ NO CHANGE (defs (patt @4.1-4.8 (type "Str")) (patt @7.1-7.6 (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.11-4.56 (type "Str")) (expr @7.9-7.85 (type "Str")))) diff --git a/test/snapshots/syntax_grab_bag.md b/test/snapshots/syntax_grab_bag.md index c3064c5c29..07ddb2ac4d 100644 --- a/test/snapshots/syntax_grab_bag.md +++ b/test/snapshots/syntax_grab_bag.md @@ -812,7 +812,7 @@ This `if` condition needs to be a _Bool_: ^^^ Right now, it has the type: - _U64_ + _Num(Int(Unsigned64))_ Every `if` condition must evaluate to a _Bool_–either `True` or `False`. @@ -890,17 +890,70 @@ All patterns in an `match` must have compatible types. **TYPE MISMATCH** This expression is used in an unexpected way: -**syntax_grab_bag.md:155:2:155:12:** +**syntax_grab_bag.md:155:2:157:3:** ```roc match_time( + ..., # Single args with comment + ) ``` - ^^^^^^^^^^ It has the type: + __arg -> _ret_ + +But I expected it to be: _[Red][Blue, Green]_others, _arg -> Error_ -But here it's being used as: - __arg2 -> _ret_ +**INVALID BOOL OPERATION** +I'm having trouble with this bool operation: +**syntax_grab_bag.md:188:44:** +```roc + bin_op_result = Err(foo) ?? 12 > 5 * 5 or 13 + 2 < 5 and 10 - 1 >= 16 or 12 <= 3 / 5 +``` + ^^^^^^^^^^ + +Both sides of `and` must be _Bool_ values, but the left side is: + _Num(_size)_ + +Note: Roc does not have "truthiness" where other values like strings, numbers or lists are automatically converted to bools. You must do that conversion yourself! + +**INVALID BOOL OPERATION** +I'm having trouble with this bool operation: +**syntax_grab_bag.md:188:44:** +```roc + bin_op_result = Err(foo) ?? 12 > 5 * 5 or 13 + 2 < 5 and 10 - 1 >= 16 or 12 <= 3 / 5 +``` + ^^^^^^^^^^^^ + +Both sides of `and` must be _Bool_ values, but the right side is: + _Num(_size)_ + +Note: Roc does not have "truthiness" where other values like strings, numbers or lists are automatically converted to bools. You must do that conversion yourself! + +**INVALID BOOL OPERATION** +I'm having trouble with this bool operation: +**syntax_grab_bag.md:188:44:** +```roc + bin_op_result = Err(foo) ?? 12 > 5 * 5 or 13 + 2 < 5 and 10 - 1 >= 16 or 12 <= 3 / 5 +``` + ^^^^^^^^^^^ + +Both sides of `and` must be _Bool_ values, but the right side is: + _Num(_size)_ + +Note: Roc does not have "truthiness" where other values like strings, numbers or lists are automatically converted to bools. You must do that conversion yourself! + +**INVALID BOOL OPERATION** +I'm having trouble with this bool operation: +**syntax_grab_bag.md:188:18:** +```roc + bin_op_result = Err(foo) ?? 12 > 5 * 5 or 13 + 2 < 5 and 10 - 1 >= 16 or 12 <= 3 / 5 +``` + ^^^^^^^^^^^^^^^^^^^^^^ + +Both sides of `and` must be _Bool_ values, but the left side is: + _Num(_size)_ + +Note: Roc does not have "truthiness" where other values like strings, numbers or lists are automatically converted to bools. You must do that conversion yourself! # TOKENS ~~~zig @@ -1845,9 +1898,9 @@ expect { (if-branch (e-lookup-local @65.28-65.31 (p-assign @65.20-65.23 (ident "num"))) - (e-int @65.32-65.33 (value "2")))) + (e-num @65.32-65.33 (value "2")))) (if-else - (e-int @65.39-65.40 (value "5")))))) + (e-num @65.39-65.40 (value "5")))))) (d-let (p-assign @68.1-68.8 (ident "add_one")) (e-lambda @68.11-78.2 @@ -1856,7 +1909,7 @@ expect { (e-block @68.17-78.2 (s-let @69.2-69.11 (p-assign @69.2-69.7 (ident "other")) - (e-int @69.10-69.11 (value "1"))) + (e-num @69.10-69.11 (value "1"))) (e-if @70.2-77.3 (if-branches (if-branch @@ -1864,26 +1917,25 @@ expect { (p-assign @68.12-68.15 (ident "num"))) (e-block @70.9-74.3 (s-dbg @71.3-72.15 - (e-call @72.4-72.15 - (e-runtime-error (tag "ident_not_in_scope")))) - (e-int @73.3-73.4 (value "0"))))) + (e-call @72.4-72.15)) + (e-num @73.3-73.4 (value "0"))))) (if-else (e-block @74.9-77.3 (s-dbg @75.3-75.10 - (e-int @75.7-75.10 (value "123"))) + (e-num @75.7-75.10 (value "123"))) (e-lookup-local @76.3-76.8 (p-assign @69.2-69.7 (ident "other")))))))) (annotation @68.1-68.8 (declared-type (ty-fn @67.11-67.21 (effectful false) - (ty @67.11-67.14 (name "U64")) - (ty @67.18-67.21 (name "U64")))))) + (ty-lookup @67.11-67.14 (name "U64") (builtin)) + (ty-lookup @67.18-67.21 (name "U64") (builtin)))))) (d-let (p-assign @80.1-80.11 (ident "match_time")) (e-closure @80.14-138.3 (captures - (capture @86.4-86.5 (ident "x")) (capture @94.5-94.6 (ident "x")) + (capture @86.4-86.5 (ident "x")) (capture @136.11-136.15 (ident "dude"))) (e-lambda @80.14-138.3 (args @@ -1907,7 +1959,7 @@ expect { (e-block @85.25-88.4 (s-let @86.4-86.10 (p-assign @86.4-86.5 (ident "x")) - (e-int @86.8-86.10 (value "12"))) + (e-num @86.8-86.10 (value "12"))) (e-lookup-local @87.4-87.5 (p-assign @86.4-86.5 (ident "x")))))) (branch @@ -1922,7 +1974,7 @@ expect { (e-block @93.7-96.5 (s-let @94.5-94.11 (p-assign @94.5-94.6 (ident "x")) - (e-int @94.9-94.11 (value "12"))) + (e-num @94.9-94.11 (value "12"))) (e-lookup-local @95.5-95.6 (p-assign @94.5-94.6 (ident "x")))))) (branch @@ -1930,13 +1982,13 @@ expect { (pattern (degenerate false) (p-assign @97.3-97.8 (ident "lower")))) (value - (e-int @98.7-98.8 (value "1")))) + (e-num @98.7-98.8 (value "1")))) (branch (patterns (pattern (degenerate false) (p-str @99.3-99.8 (text """)))) (value - (e-int @100.4-100.7 (value "100")))) + (e-num @100.4-100.7 (value "100")))) (branch (patterns (pattern (degenerate false) @@ -1944,7 +1996,7 @@ expect { (pattern (degenerate false) (p-str @101.11-101.16 (text """)))) (value - (e-int @101.20-101.23 (value "200")))) + (e-num @101.20-101.23 (value "200")))) (branch (patterns (pattern (degenerate false) @@ -1956,7 +2008,7 @@ expect { (rest-at (index 3) (p-assign @1.1-1.1 (ident "rest")))))) (value - (e-int @104.5-104.8 (value "123")))) + (e-num @104.5-104.8 (value "123")))) (branch (patterns (pattern (degenerate false) @@ -1968,7 +2020,7 @@ expect { (rest-at (index 3) (p-assign @1.1-1.1 (ident "rest")))))) (value - (e-int @108.32-108.35 (value "123")))) + (e-num @108.32-108.35 (value "123")))) (branch (patterns (pattern (degenerate false) @@ -1980,13 +2032,13 @@ expect { (rest-at (index 3) (p-assign @1.1-1.1 (ident "rest")))))) (value - (e-int @116.8-116.11 (value "123")))) + (e-num @116.8-116.11 (value "123")))) (branch (patterns (pattern (degenerate false) (p-small-dec @117.3-117.7))) (value - (e-int @117.11-117.14 (value "314")))) + (e-num @117.11-117.14 (value "314")))) (branch (patterns (pattern (degenerate false) @@ -1994,7 +2046,7 @@ expect { (pattern (degenerate false) (p-small-dec @118.10-118.14))) (value - (e-int @118.18-118.21 (value "314")))) + (e-num @118.18-118.21 (value "314")))) (branch (patterns (pattern (degenerate false) @@ -2004,7 +2056,7 @@ expect { (p-int @119.7-119.8 (value "2")) (p-int @119.10-119.11 (value "3")))))) (value - (e-int @119.16-119.19 (value "123")))) + (e-num @119.16-119.19 (value "123")))) (branch (patterns (pattern (degenerate false) @@ -2014,7 +2066,7 @@ expect { (p-runtime-error @1.1-1.1 (tag "not_implemented")) (p-int @120.14-120.15 (value "3")))))) (value - (e-int @120.20-120.23 (value "123")))) + (e-num @120.20-120.23 (value "123")))) (branch (patterns (pattern (degenerate false) @@ -2046,7 +2098,7 @@ expect { (required (p-assign @127.4-128.9 (ident "rest")))))))) (value - (e-int @129.8-129.10 (value "12")))) + (e-num @129.8-129.10 (value "12")))) (branch (patterns (pattern (degenerate false) @@ -2059,7 +2111,7 @@ expect { (sub-pattern (p-runtime-error @1.1-1.1 (tag "not_implemented")))))))) (value - (e-int @130.29-130.31 (value "12")))) + (e-num @130.29-130.31 (value "12")))) (branch (patterns (pattern (degenerate false) @@ -2072,14 +2124,14 @@ expect { (sub-pattern (p-runtime-error @1.1-1.1 (tag "not_implemented")))))))) (value - (e-int @134.8-134.10 (value "12")))) + (e-num @134.8-134.10 (value "12")))) (branch (patterns (pattern (degenerate false) (p-nominal @135.3-135.10 (p-applied-tag @135.3-135.10)))) (value - (e-int @135.14-135.17 (value "123")))) + (e-num @135.14-135.17 (value "123")))) (branch (patterns (pattern (degenerate false) @@ -2093,13 +2145,13 @@ expect { (pattern (degenerate false) (p-applied-tag @137.3-137.34))) (value - (e-int @137.38-137.42 (value "1000")))))))))) + (e-num @137.38-137.42 (value "1000")))))))))) (d-let (p-assign @144.1-144.6 (ident "main!")) (e-closure @144.9-196.2 (captures - (capture @68.1-68.8 (ident "add_one")) - (capture @80.1-80.11 (ident "match_time"))) + (capture @80.1-80.11 (ident "match_time")) + (capture @68.1-68.8 (ident "add_one"))) (e-lambda @144.9-196.2 (args (p-underscore @144.10-144.11)) @@ -2110,11 +2162,11 @@ expect { (e-literal @145.11-145.16 (string "World")))) (s-var @146.2-146.18 (p-assign @146.2-146.18 (ident "number")) - (e-int @146.15-146.18 (value "123"))) + (e-num @146.15-146.18 (value "123"))) (s-expect @147.2-147.18 (e-binop @147.9-147.18 (op "eq") (e-runtime-error (tag "ident_not_in_scope")) - (e-int @147.17-147.18 (value "1")))) + (e-num @147.17-147.18 (value "1")))) (s-let @148.2-148.12 (p-assign @148.2-148.5 (ident "tag")) (e-tag @148.8-148.12 (name "Blue"))) @@ -2125,14 +2177,11 @@ expect { (e-not-implemented @1.1-1.1)) (s-expr @155.2-157.3 (e-call @155.2-157.3 - (e-lookup-local @155.2-155.12 - (p-assign @80.1-80.11 (ident "match_time"))) (e-not-implemented @1.1-1.1))) (s-expr @158.2-161.3 (e-call @158.2-161.3 - (e-runtime-error (tag "ident_not_in_scope")) (e-dbg @159.3-160.6 - (e-int @160.4-160.6 (value "42"))))) + (e-num @160.4-160.6 (value "42"))))) (s-crash @162.2-163.17 (msg "Unreachable!")) (s-let @164.2-164.31 (p-assign @164.2-164.18 (ident "tag_with_payload")) @@ -2153,20 +2202,18 @@ expect { (e-list @166.9-173.3 (elems (e-call @167.3-170.4 - (e-lookup-local @167.3-167.10 - (p-assign @68.1-68.8 (ident "add_one"))) (e-dbg @168.4-169.11 (e-lookup-local @169.5-169.11 (p-assign @146.2-146.18 (ident "number"))))) - (e-int @171.3-171.6 (value "456")) - (e-int @172.3-172.6 (value "789"))))) + (e-num @171.3-171.6 (value "456")) + (e-num @172.3-172.6 (value "789"))))) (s-runtime-error (tag "not_implemented")) (s-let @178.2-178.71 (p-assign @178.2-178.8 (ident "record")) (e-record @178.11-178.71 (fields (field (name "foo") - (e-int @178.18-178.21 (value "123"))) + (e-num @178.18-178.21 (value "123"))) (field (name "bar") (e-string @178.28-178.35 (e-literal @178.29-178.34 (string "Hello")))) @@ -2185,7 +2232,7 @@ expect { (p-assign @179.2-179.7 (ident "tuple")) (e-tuple @179.10-179.68 (elems - (e-int @179.11-179.14 (value "123")) + (e-num @179.11-179.14 (value "123")) (e-string @179.16-179.23 (e-literal @179.17-179.22 (string "World"))) (e-lookup-local @179.25-179.28 @@ -2202,14 +2249,14 @@ expect { (p-assign @179.2-179.7 (ident "tuple"))))) (e-list @179.58-179.67 (elems - (e-int @179.59-179.60 (value "1")) - (e-int @179.62-179.63 (value "2")) - (e-int @179.65-179.66 (value "3"))))))) + (e-num @179.59-179.60 (value "1")) + (e-num @179.62-179.63 (value "2")) + (e-num @179.65-179.66 (value "3"))))))) (s-let @180.2-187.3 (p-assign @180.2-180.17 (ident "multiline_tuple")) (e-tuple @180.20-187.3 (elems - (e-int @181.3-181.6 (value "123")) + (e-num @181.3-181.6 (value "123")) (e-string @182.3-182.10 (e-literal @182.4-182.9 (string "World"))) (e-runtime-error (tag "ident_not_in_scope")) @@ -2225,9 +2272,9 @@ expect { (p-assign @179.2-179.7 (ident "tuple"))))) (e-list @186.3-186.12 (elems - (e-int @186.4-186.5 (value "1")) - (e-int @186.7-186.8 (value "2")) - (e-int @186.10-186.11 (value "3"))))))) + (e-num @186.4-186.5 (value "1")) + (e-num @186.7-186.8 (value "2")) + (e-num @186.10-186.11 (value "3"))))))) (s-let @188.2-188.86 (p-assign @188.2-188.15 (ident "bin_op_result")) (e-binop @188.18-188.86 (op "or") @@ -2237,27 +2284,27 @@ expect { (e-tag @188.18-188.26 (name "Err") (args (e-runtime-error (tag "ident_not_in_scope"))))) - (e-int @188.30-188.32 (value "12"))) + (e-num @188.30-188.32 (value "12"))) (e-binop @188.35-188.40 (op "mul") - (e-int @188.35-188.36 (value "5")) - (e-int @188.39-188.40 (value "5")))) + (e-num @188.35-188.36 (value "5")) + (e-num @188.39-188.40 (value "5")))) (e-binop @188.44-188.86 (op "or") (e-binop @188.44-188.71 (op "and") (e-binop @188.44-188.54 (op "lt") (e-binop @188.44-188.50 (op "add") - (e-int @188.44-188.46 (value "13")) - (e-int @188.49-188.50 (value "2"))) - (e-int @188.53-188.54 (value "5"))) + (e-num @188.44-188.46 (value "13")) + (e-num @188.49-188.50 (value "2"))) + (e-num @188.53-188.54 (value "5"))) (e-binop @188.59-188.71 (op "ge") (e-binop @188.59-188.65 (op "sub") - (e-int @188.59-188.61 (value "10")) - (e-int @188.64-188.65 (value "1"))) - (e-int @188.69-188.71 (value "16")))) + (e-num @188.59-188.61 (value "10")) + (e-num @188.64-188.65 (value "1"))) + (e-num @188.69-188.71 (value "16")))) (e-binop @188.75-188.86 (op "le") - (e-int @188.75-188.77 (value "12")) + (e-num @188.75-188.77 (value "12")) (e-binop @188.81-188.86 (op "div") - (e-int @188.81-188.82 (value "3")) - (e-int @188.85-188.86 (value "5"))))))) + (e-num @188.81-188.82 (value "3")) + (e-num @188.85-188.86 (value "5"))))))) (s-let @189.2-189.111 (p-assign @189.2-189.23 (ident "static_dispatch_style")) (e-dot-access @189.26-189.111 (field "unknown") @@ -2270,22 +2317,18 @@ expect { (s-expr @190.2-190.29 (e-runtime-error (tag "not_implemented"))) (e-call @191.2-195.3 - (e-lookup-external @191.2-191.14 - (module-idx "0") - (target-node-idx "0")) (e-string @192.3-194.18 (e-literal @192.4-192.14 (string "How about ")) (e-call @193.4-193.21 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @193.14-193.20 (p-assign @146.2-146.18 (ident "number")))) (e-literal @194.4-194.17 (string " as a string?"))))))) (annotation @144.1-144.6 (declared-type (ty-fn @143.9-143.38 (effectful false) - (ty-apply @143.9-143.21 (symbol "List") - (ty @143.14-143.20 (name "String"))) - (ty-apply @143.25-143.38 (symbol "Result") + (ty-apply @143.9-143.21 (name "List") (builtin) + (ty-malformed @143.14-143.20)) + (ty-apply @143.25-143.38 (name "Result") (local) (ty-record @143.32-143.34) (ty-underscore @1.1-1.1)))))) (d-let @@ -2294,100 +2337,108 @@ expect { (annotation @199.1-199.6 (declared-type (ty-record @198.9-198.11)))) + (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 @22.1-22.41 (ty-header @22.1-22.10 (name "Map") (ty-args - (ty-var @22.5-22.6 (name "a")) - (ty-var @22.8-22.9 (name "b")))) + (ty-rigid-var @22.5-22.6 (name "a")) + (ty-rigid-var @22.8-22.9 (name "b")))) (ty-fn @22.13-22.41 (effectful false) - (ty-apply @22.13-22.20 (symbol "List") - (ty-var @22.18-22.19 (name "a"))) + (ty-apply @22.13-22.20 (name "List") (builtin) + (ty-rigid-var @22.5-22.6 (name "a"))) (ty-parens @22.22-22.30 (ty-fn @22.23-22.29 (effectful false) - (ty-var @22.23-22.24 (name "a")) - (ty-var @22.28-22.29 (name "b")))) - (ty-apply @22.34-22.41 (symbol "List") - (ty-var @22.39-22.40 (name "b"))))) + (ty-rigid-var @22.5-22.6 (name "a")) + (ty-rigid-var @22.8-22.9 (name "b")))) + (ty-apply @22.34-22.41 (name "List") (builtin) + (ty-rigid-var @22.8-22.9 (name "b"))))) (s-alias-decl @23.1-34.5 (ty-header @23.1-26.2 (name "MapML") (ty-args - (ty-var @24.2-24.3 (name "a")) - (ty-var @25.2-25.3 (name "b")))) + (ty-rigid-var @24.2-24.3 (name "a")) + (ty-rigid-var @25.2-25.3 (name "b")))) (ty-fn @28.3-34.5 (effectful false) - (ty-apply @28.3-30.4 (symbol "List") - (ty-var @29.4-29.5 (name "a"))) + (ty-apply @28.3-30.4 (name "List") (builtin) + (ty-rigid-var @24.2-24.3 (name "a"))) (ty-parens @31.3-31.11 (ty-fn @31.4-31.10 (effectful false) - (ty-var @31.4-31.5 (name "a")) - (ty-var @31.9-31.10 (name "b")))) - (ty-apply @32.4-34.5 (symbol "List") - (ty-var @33.5-33.6 (name "b"))))) + (ty-rigid-var @24.2-24.3 (name "a")) + (ty-rigid-var @25.2-25.3 (name "b")))) + (ty-apply @32.4-34.5 (name "List") (builtin) + (ty-rigid-var @25.2-25.3 (name "b"))))) (s-alias-decl @36.1-36.17 (ty-header @36.1-36.4 (name "Foo")) (ty-tuple @36.7-36.17 - (ty @36.8-36.11 (name "Bar")) - (ty @36.13-36.16 (name "Baz")))) + (ty-malformed @36.8-36.11) + (ty-malformed @36.13-36.16))) (s-alias-decl @38.1-41.2 (ty-header @38.1-38.13 (name "FooMultiline")) (ty-tuple @38.16-41.2 - (ty @39.2-39.5 (name "Bar")) - (ty @40.2-40.5 (name "Baz")))) + (ty-malformed @39.2-39.5) + (ty-malformed @40.2-40.5))) (s-alias-decl @43.1-43.43 (ty-header @43.1-43.8 (name "Some") (ty-args - (ty-var @43.6-43.7 (name "a")))) + (ty-rigid-var @43.6-43.7 (name "a")))) (ty-record @43.11-43.43 (field (field "foo") - (ty-apply @43.19-43.24 (symbol "Ok") - (ty-var @43.22-43.23 (name "a")))) + (ty-malformed @43.19-43.21)) (field (field "bar") - (ty @43.32-43.41 (name "Something"))))) + (ty-malformed @43.32-43.41)))) (s-alias-decl @44.1-47.2 (ty-header @44.1-44.10 (name "SomeMl") (ty-args - (ty-var @44.8-44.9 (name "a")))) + (ty-rigid-var @44.8-44.9 (name "a")))) (ty-record @44.13-47.2 (field (field "foo") - (ty-apply @45.8-45.13 (symbol "Ok") - (ty-var @45.11-45.12 (name "a")))) + (ty-malformed @45.8-45.10)) (field (field "bar") - (ty @46.8-46.17 (name "Something"))))) + (ty-malformed @46.8-46.17)))) (s-alias-decl @49.1-54.2 (ty-header @49.1-49.17 (name "SomeMultiline") (ty-args - (ty-var @49.15-49.16 (name "a")))) + (ty-rigid-var @49.15-49.16 (name "a")))) (ty-record @49.20-54.2 (field (field "foo") - (ty-apply @52.4-52.9 (symbol "Ok") - (ty-var @52.7-52.8 (name "a")))) + (ty-malformed @52.4-52.6)) (field (field "bar") - (ty @53.8-53.17 (name "Something"))))) + (ty-malformed @53.8-53.17)))) (s-alias-decl @56.1-56.27 (ty-header @56.1-56.9 (name "Maybe") (ty-args - (ty-var @56.7-56.8 (name "a")))) + (ty-rigid-var @56.7-56.8 (name "a")))) (ty-tag-union @56.12-56.27 - (ty-apply @56.13-56.20 (symbol "Some") - (ty-var @56.18-56.19 (name "a"))) - (ty @56.22-56.26 (name "None")))) + (tag_name @56.13-56.20 (name "Some")) + (tag_name @56.22-56.26 (name "None")))) (s-alias-decl @58.1-61.2 (ty-header @58.1-58.18 (name "MaybeMultiline") (ty-args - (ty-var @58.16-58.17 (name "a")))) + (ty-rigid-var @58.16-58.17 (name "a")))) (ty-tag-union @58.21-61.2 - (ty-apply @59.2-59.9 (symbol "Some") - (ty-var @59.7-59.8 (name "a"))) - (ty @60.2-60.6 (name "None")))) + (tag_name @59.2-59.9 (name "Some")) + (tag_name @60.2-60.6 (name "None")))) (s-alias-decl @63.1-63.38 (ty-header @63.1-63.12 (name "SomeFunc") (ty-args - (ty-var @63.10-63.11 (name "a")))) + (ty-rigid-var @63.10-63.11 (name "a")))) (ty-fn @63.15-63.38 (effectful false) - (ty-apply @63.15-63.23 (symbol "Maybe") - (ty-var @63.21-63.22 (name "a"))) - (ty-var @63.25-63.26 (name "a")) - (ty-apply @63.30-63.38 (symbol "Maybe") - (ty-var @63.36-63.37 (name "a"))))) + (ty-apply @63.15-63.23 (name "Maybe") (local) + (ty-rigid-var @63.10-63.11 (name "a"))) + (ty-rigid-var @63.10-63.11 (name "a")) + (ty-apply @63.30-63.38 (name "Maybe") (local) + (ty-rigid-var @63.10-63.11 (name "a"))))) (s-import @4.1-4.42 (module "pf.Stdout") (qualifier "pf") (exposes (exposed (name "line!") (wildcard false)) @@ -2408,15 +2459,15 @@ expect { (s-expect @140.1-141.11 (e-binop @141.2-141.11 (op "eq") (e-runtime-error (tag "ident_not_in_scope")) - (e-int @141.10-141.11 (value "1")))) + (e-num @141.10-141.11 (value "1")))) (s-expect @203.1-207.2 (e-block @203.8-207.2 (s-let @204.2-204.9 (p-assign @204.2-204.5 (ident "foo")) - (e-int @204.8-204.9 (value "1"))) + (e-num @204.8-204.9 (value "1"))) (s-let @205.2-205.10 (p-assign @205.2-205.6 (ident "blah")) - (e-int @205.9-205.10 (value "1"))) + (e-num @205.9-205.10 (value "1"))) (e-binop @206.2-206.13 (op "eq") (e-lookup-local @206.2-206.6 (p-assign @205.2-205.6 (ident "blah"))) @@ -2428,21 +2479,28 @@ expect { (inferred-types (defs (patt @65.1-65.16 (type "Bool -> Num(_size)")) - (patt @68.1-68.8 (type "Error -> Error")) - (patt @80.1-80.11 (type "Error")) - (patt @144.1-144.6 (type "List(Error) -> Result({ }, _d)")) - (patt @199.1-199.6 (type "{}"))) + (patt @68.1-68.8 (type "Num(Int(Unsigned64)) -> Num(Int(Unsigned64))")) + (patt @80.1-80.11 (type "[Red][Blue, Green]_others, _arg -> Error")) + (patt @144.1-144.6 (type "List(Error) -> Error")) + (patt @199.1-199.6 (type "{ }"))) (type_decls + (nominal @1.1-1.1 (type "Bool") + (ty-header @1.1-1.1 (name "Bool"))) + (nominal @1.1-1.1 (type "Error") + (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 @22.1-22.41 (type "Map(a, b)") (ty-header @22.1-22.10 (name "Map") (ty-args - (ty-var @22.5-22.6 (name "a")) - (ty-var @22.8-22.9 (name "b"))))) + (ty-rigid-var @22.5-22.6 (name "a")) + (ty-rigid-var @22.8-22.9 (name "b"))))) (alias @23.1-34.5 (type "MapML(a, b)") (ty-header @23.1-26.2 (name "MapML") (ty-args - (ty-var @24.2-24.3 (name "a")) - (ty-var @25.2-25.3 (name "b"))))) + (ty-rigid-var @24.2-24.3 (name "a")) + (ty-rigid-var @25.2-25.3 (name "b"))))) (alias @36.1-36.17 (type "Foo") (ty-header @36.1-36.4 (name "Foo"))) (alias @38.1-41.2 (type "FooMultiline") @@ -2450,31 +2508,31 @@ expect { (alias @43.1-43.43 (type "Some(a)") (ty-header @43.1-43.8 (name "Some") (ty-args - (ty-var @43.6-43.7 (name "a"))))) + (ty-rigid-var @43.6-43.7 (name "a"))))) (alias @44.1-47.2 (type "SomeMl(a)") (ty-header @44.1-44.10 (name "SomeMl") (ty-args - (ty-var @44.8-44.9 (name "a"))))) + (ty-rigid-var @44.8-44.9 (name "a"))))) (alias @49.1-54.2 (type "SomeMultiline(a)") (ty-header @49.1-49.17 (name "SomeMultiline") (ty-args - (ty-var @49.15-49.16 (name "a"))))) + (ty-rigid-var @49.15-49.16 (name "a"))))) (alias @56.1-56.27 (type "Maybe(a)") (ty-header @56.1-56.9 (name "Maybe") (ty-args - (ty-var @56.7-56.8 (name "a"))))) + (ty-rigid-var @56.7-56.8 (name "a"))))) (alias @58.1-61.2 (type "MaybeMultiline(a)") (ty-header @58.1-58.18 (name "MaybeMultiline") (ty-args - (ty-var @58.16-58.17 (name "a"))))) + (ty-rigid-var @58.16-58.17 (name "a"))))) (alias @63.1-63.38 (type "SomeFunc(a)") (ty-header @63.1-63.12 (name "SomeFunc") (ty-args - (ty-var @63.10-63.11 (name "a")))))) + (ty-rigid-var @63.10-63.11 (name "a")))))) (expressions (expr @65.19-65.40 (type "Bool -> Num(_size)")) - (expr @68.11-78.2 (type "Error -> Error")) - (expr @80.14-138.3 (type "Error")) - (expr @144.9-196.2 (type "List(Error) -> Result({ }, _d)")) - (expr @199.9-199.11 (type "{}")))) + (expr @68.11-78.2 (type "Num(Int(Unsigned64)) -> Num(Int(Unsigned64))")) + (expr @80.14-138.3 (type "[Red][Blue, Green]_others, _arg -> Error")) + (expr @144.9-196.2 (type "List(Error) -> Error")) + (expr @199.9-199.11 (type "{ }")))) ~~~ diff --git a/test/snapshots/test_exact_pattern_crash.md b/test/snapshots/test_exact_pattern_crash.md index e838e8a555..689778682a 100644 --- a/test/snapshots/test_exact_pattern_crash.md +++ b/test/snapshots/test_exact_pattern_crash.md @@ -50,18 +50,18 @@ The unused variable is declared here: **TYPE MISMATCH** This expression is used in an unexpected way: -**test_exact_pattern_crash.md:23:10:23:18:** +**test_exact_pattern_crash.md:23:10:23:50:** ```roc p2 = map_pair(3, 4, (|x| x + 1), (|y| y * 2)) ``` - ^^^^^^^^ + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ It has the type: - _Pair(a, b), a -> c, b -> d -> Pair(c, d)_ - -But here it's being used as: _Num(_size), Num(_size2), Num(_size3) -> Num(_size4), Num(_size5) -> Num(_size6) -> _ret_ +But I expected it to be: + _Pair(e, h), e -> i, h -> j -> Pair(i, j)_ + # TOKENS ~~~zig KwApp(1:1-1:4),OpenSquare(1:5-1:6),LowerIdent(1:6-1:10),CloseSquare(1:10-1:11),OpenCurly(1:12-1:13),LowerIdent(1:14-1:16),OpColon(1:16-1:17),KwPlatform(1:18-1:26),StringStart(1:27-1:28),StringPart(1:28-1:53),StringEnd(1:53-1:54),CloseCurly(1:55-1:56), @@ -234,12 +234,12 @@ main = { (annotation @8.1-8.10 (declared-type (ty-fn @7.13-7.37 (effectful false) - (ty-apply @7.13-7.23 (symbol "Pair") - (ty-var @7.18-7.19 (name "a")) - (ty-var @7.21-7.22 (name "b"))) - (ty-apply @7.27-7.37 (symbol "Pair") - (ty-var @7.32-7.33 (name "b")) - (ty-var @7.35-7.36 (name "a"))))))) + (ty-apply @7.13-7.23 (name "Pair") (local) + (ty-rigid-var @7.13-7.23 (name "a")) + (ty-rigid-var @7.13-7.23 (name "b"))) + (ty-apply @7.27-7.37 (name "Pair") (local) + (ty-rigid-var @7.13-7.23 (name "b")) + (ty-rigid-var @7.13-7.23 (name "a"))))))) (d-let (p-assign @12.1-12.9 (ident "map_pair")) (e-lambda @12.12-12.39 @@ -253,91 +253,103 @@ main = { (e-tuple @12.27-12.39 (elems (e-call @12.28-12.32 - (e-lookup-local @12.28-12.29 - (p-assign @12.21-12.22 (ident "f"))) (e-lookup-local @12.30-12.31 (p-assign @12.14-12.15 (ident "x")))) (e-call @12.34-12.38 - (e-lookup-local @12.34-12.35 - (p-assign @12.24-12.25 (ident "g"))) (e-lookup-local @12.36-12.37 (p-assign @12.17-12.18 (ident "y"))))))) (annotation @12.1-12.9 (declared-type (ty-fn @11.12-11.56 (effectful false) - (ty-apply @11.12-11.22 (symbol "Pair") - (ty-var @11.17-11.18 (name "a")) - (ty-var @11.20-11.21 (name "b"))) + (ty-apply @11.12-11.22 (name "Pair") (local) + (ty-rigid-var @11.12-11.22 (name "a")) + (ty-rigid-var @11.12-11.22 (name "b"))) (ty-parens @11.24-11.32 (ty-fn @11.25-11.31 (effectful false) - (ty-var @11.25-11.26 (name "a")) - (ty-var @11.30-11.31 (name "c")))) + (ty-rigid-var @11.12-11.22 (name "a")) + (ty-rigid-var @11.30-11.31 (name "c")))) (ty-parens @11.34-11.42 (ty-fn @11.35-11.41 (effectful false) - (ty-var @11.35-11.36 (name "b")) - (ty-var @11.40-11.41 (name "d")))) - (ty-apply @11.46-11.56 (symbol "Pair") - (ty-var @11.51-11.52 (name "c")) - (ty-var @11.54-11.55 (name "d"))))))) + (ty-rigid-var @11.12-11.22 (name "b")) + (ty-rigid-var @11.40-11.41 (name "d")))) + (ty-apply @11.46-11.56 (name "Pair") (local) + (ty-rigid-var @11.30-11.31 (name "c")) + (ty-rigid-var @11.40-11.41 (name "d"))))))) (d-let (p-assign @17.1-17.5 (ident "main")) (e-block @17.8-26.2 (s-let @19.5-19.27 (p-assign @19.5-19.7 (ident "p1")) (e-call @19.10-19.27 - (e-lookup-local @19.10-19.19 - (p-assign @8.1-8.10 (ident "swap_pair"))) (e-tuple @19.20-19.26 (elems - (e-int @19.21-19.22 (value "1")) - (e-int @19.24-19.25 (value "2")))))) + (e-num @19.21-19.22 (value "1")) + (e-num @19.24-19.25 (value "2")))))) (s-let @23.5-23.50 (p-assign @23.5-23.7 (ident "p2")) (e-call @23.10-23.50 - (e-lookup-local @23.10-23.18 - (p-assign @12.1-12.9 (ident "map_pair"))) - (e-int @23.19-23.20 (value "3")) - (e-int @23.22-23.23 (value "4")) + (e-num @23.19-23.20 (value "3")) + (e-num @23.22-23.23 (value "4")) (e-lambda @23.26-23.35 (args (p-assign @23.27-23.28 (ident "x"))) (e-binop @23.30-23.35 (op "add") (e-lookup-local @23.30-23.31 (p-assign @23.27-23.28 (ident "x"))) - (e-int @23.34-23.35 (value "1")))) + (e-num @23.34-23.35 (value "1")))) (e-lambda @23.39-23.48 (args (p-assign @23.40-23.41 (ident "y"))) (e-binop @23.43-23.48 (op "mul") (e-lookup-local @23.43-23.44 (p-assign @23.40-23.41 (ident "y"))) - (e-int @23.47-23.48 (value "2")))))) + (e-num @23.47-23.48 (value "2")))))) (e-lookup-local @25.5-25.7 (p-assign @23.5-23.7 (ident "p2"))))) + (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 @4.1-4.20 (ty-header @4.1-4.11 (name "Pair") (ty-args - (ty-var @4.6-4.7 (name "a")) - (ty-var @4.9-4.10 (name "b")))) + (ty-rigid-var @4.6-4.7 (name "a")) + (ty-rigid-var @4.9-4.10 (name "b")))) (ty-tuple @4.14-4.20 - (ty-var @4.15-4.16 (name "a")) - (ty-var @4.18-4.19 (name "b"))))) + (ty-rigid-var @4.6-4.7 (name "a")) + (ty-rigid-var @4.9-4.10 (name "b"))))) ~~~ # TYPES ~~~clojure (inferred-types (defs - (patt @8.1-8.10 (type "Pair(a, a) -> Pair(a, a)")) - (patt @12.1-12.9 (type "Error")) + (patt @8.1-8.10 (type "Pair(a, b) -> Pair(b, a)")) + (patt @12.1-12.9 (type "Pair(a, b), a -> c, b -> d -> Pair(c, d)")) (patt @17.1-17.5 (type "_e"))) (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 @4.1-4.20 (type "Pair(a, b)") (ty-header @4.1-4.11 (name "Pair") (ty-args - (ty-var @4.6-4.7 (name "a")) - (ty-var @4.9-4.10 (name "b")))))) + (ty-rigid-var @4.6-4.7 (name "a")) + (ty-rigid-var @4.9-4.10 (name "b")))))) (expressions - (expr @8.13-8.28 (type "Pair(a, a) -> Pair(a, a)")) - (expr @12.12-12.39 (type "Error")) + (expr @8.13-8.28 (type "Pair(a, b) -> Pair(b, a)")) + (expr @12.12-12.39 (type "Pair(a, b), a -> c, b -> d -> Pair(c, d)")) (expr @17.8-26.2 (type "_e")))) ~~~ diff --git a/test/snapshots/test_instantiated_return_crash.md b/test/snapshots/test_instantiated_return_crash.md index c0d77b8659..475d0b037d 100644 --- a/test/snapshots/test_instantiated_return_crash.md +++ b/test/snapshots/test_instantiated_return_crash.md @@ -105,15 +105,11 @@ EndOfFile(10:1-10:1), (args (p-assign @6.21-6.22 (ident "f"))) (e-call @6.24-6.36 - (e-lookup-local @6.24-6.25 - (p-assign @6.21-6.22 (ident "f"))) (e-list @6.26-6.35 (elems (e-string @6.27-6.34 (e-literal @6.28-6.33 (string "hello")))))))) (e-call @8.5-8.27 - (e-lookup-local @8.5-8.17 - (p-assign @6.5-6.17 (ident "needs_string"))) (e-lookup-local @8.18-8.26 (p-assign @3.5-3.13 (ident "identity"))))) ~~~ diff --git a/test/snapshots/test_instantiation_arity_mismatch.md b/test/snapshots/test_instantiation_arity_mismatch.md index 795af1f070..2769eded12 100644 --- a/test/snapshots/test_instantiation_arity_mismatch.md +++ b/test/snapshots/test_instantiation_arity_mismatch.md @@ -17,18 +17,18 @@ TYPE MISMATCH - test_instantiation_arity_mismatch.md:5:5:5:13 # PROBLEMS **TYPE MISMATCH** This expression is used in an unexpected way: -**test_instantiation_arity_mismatch.md:5:5:5:13:** +**test_instantiation_arity_mismatch.md:5:5:5:19:** ```roc identity(1, 2) ``` - ^^^^^^^^ + ^^^^^^^^^^^^^^ It has the type: - _(a, b) -> (a, b)_ - -But here it's being used as: _Num(_size), Num(_size2) -> _ret_ +But I expected it to be: + _(c, d) -> (c, d)_ + # TOKENS ~~~zig OpenCurly(1:1-1:2), @@ -81,10 +81,8 @@ EndOfFile(7:1-7:1), (e-lookup-local @3.23-3.27 (p-assign @3.17-3.21 (ident "pair"))))) (e-call @5.5-5.19 - (e-lookup-local @5.5-5.13 - (p-assign @3.5-3.13 (ident "identity"))) - (e-int @5.14-5.15 (value "1")) - (e-int @5.17-5.18 (value "2")))) + (e-num @5.14-5.15 (value "1")) + (e-num @5.17-5.18 (value "2")))) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/test_nested_instantiation_crash.md b/test/snapshots/test_nested_instantiation_crash.md index 1e9201a002..fae60124f7 100644 --- a/test/snapshots/test_nested_instantiation_crash.md +++ b/test/snapshots/test_nested_instantiation_crash.md @@ -31,11 +31,11 @@ composed = |n| get_value(make_record(n)) ``` ^^^^^^^^^^^^^^^^^^^^^^^^^ -The type annotation says it should have the type: - _Str_ +It has the type: + _List(_elem)_ -But here it's being used as: - _List(a)_ +But the type annotation says it should have the type: + _Str_ # TOKENS ~~~zig @@ -156,12 +156,12 @@ answer = composed([42]) (annotation @6.1-6.12 (declared-type (ty-fn @5.15-5.42 (effectful false) - (ty-var @5.15-5.16 (name "a")) + (ty-rigid-var @5.15-5.16 (name "a")) (ty-record @5.20-5.42 (field (field "value") - (ty-var @5.29-5.30 (name "a"))) + (ty-rigid-var @5.15-5.16 (name "a"))) (field (field "tag") - (ty @5.37-5.40 (name "Str")))))))) + (ty-lookup @5.37-5.40 (name "Str") (builtin)))))))) (d-let (p-assign @9.1-9.10 (ident "get_value")) (e-lambda @9.13-9.24 @@ -176,53 +176,68 @@ answer = composed([42]) (ty-fn @8.13-8.40 (effectful false) (ty-record @8.13-8.35 (field (field "value") - (ty-var @8.22-8.23 (name "a"))) + (ty-rigid-var @8.22-8.23 (name "a"))) (field (field "tag") - (ty @8.30-8.33 (name "Str")))) - (ty-var @8.39-8.40 (name "a")))))) + (ty-lookup @8.30-8.33 (name "Str") (builtin)))) + (ty-rigid-var @8.22-8.23 (name "a")))))) (d-let (p-assign @12.1-12.9 (ident "composed")) (e-closure @12.12-12.41 (captures - (capture @6.1-6.12 (ident "make_record")) - (capture @9.1-9.10 (ident "get_value"))) + (capture @9.1-9.10 (ident "get_value")) + (capture @6.1-6.12 (ident "make_record"))) (e-lambda @12.12-12.41 (args (p-assign @12.13-12.14 (ident "n"))) (e-call @12.16-12.41 - (e-lookup-local @12.16-12.25 - (p-assign @9.1-9.10 (ident "get_value"))) (e-call @12.26-12.40 - (e-lookup-local @12.26-12.37 - (p-assign @6.1-6.12 (ident "make_record"))) (e-lookup-local @12.38-12.39 (p-assign @12.13-12.14 (ident "n"))))))) (annotation @12.1-12.9 (declared-type (ty-fn @11.12-11.26 (effectful false) - (ty-apply @11.12-11.19 (symbol "List") - (ty-var @11.17-11.18 (name "a"))) - (ty @11.23-11.26 (name "Str")))))) + (ty-apply @11.12-11.19 (name "List") (builtin) + (ty-rigid-var @11.17-11.18 (name "a"))) + (ty-lookup @11.23-11.26 (name "Str") (builtin)))))) (d-let (p-assign @14.1-14.7 (ident "answer")) (e-call @14.10-14.24 - (e-lookup-local @14.10-14.18 - (p-assign @12.1-12.9 (ident "composed"))) (e-list @14.19-14.23 (elems - (e-int @14.20-14.22 (value "42"))))))) + (e-num @14.20-14.22 (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"))))) ~~~ # TYPES ~~~clojure (inferred-types (defs - (patt @6.1-6.12 (type "a -> { tag: Error, value: a }")) - (patt @9.1-9.10 (type "{ tag: Error, value: a } -> a")) + (patt @6.1-6.12 (type "a -> { tag: Str, value: a }")) + (patt @9.1-9.10 (type "{ tag: Str, value: a } -> a")) (patt @12.1-12.9 (type "List(a) -> Error")) (patt @14.1-14.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 @6.15-6.44 (type "a -> { tag: Error, value: a }")) - (expr @9.13-9.24 (type "{ tag: Error, value: a } -> a")) + (expr @6.15-6.44 (type "a -> { tag: Str, value: a }")) + (expr @9.13-9.24 (type "{ tag: Str, value: a } -> a")) (expr @12.12-12.41 (type "List(a) -> Error")) (expr @14.10-14.24 (type "Error")))) ~~~ diff --git a/test/snapshots/test_tuple_instantiation_crash.md b/test/snapshots/test_tuple_instantiation_crash.md index 80c92a8ccb..d909307267 100644 --- a/test/snapshots/test_tuple_instantiation_crash.md +++ b/test/snapshots/test_tuple_instantiation_crash.md @@ -20,18 +20,18 @@ TYPE MISMATCH - test_tuple_instantiation_crash.md:9:8:9:12 # PROBLEMS **TYPE MISMATCH** This expression is used in an unexpected way: -**test_tuple_instantiation_crash.md:9:8:9:12:** +**test_tuple_instantiation_crash.md:9:8:9:18:** ```roc main = swap(1, 2) ``` - ^^^^ + ^^^^^^^^^^ It has the type: - _(a, b) -> (b, a)_ - -But here it's being used as: _Num(_size), Num(_size2) -> _ret_ +But I expected it to be: + _(c, d) -> (d, c)_ + # TOKENS ~~~zig KwApp(1:1-1:4),OpenSquare(1:5-1:6),LowerIdent(1:6-1:10),CloseSquare(1:10-1:11),OpenCurly(1:12-1:13),LowerIdent(1:14-1:16),OpColon(1:16-1:17),KwPlatform(1:18-1:26),StringStart(1:27-1:28),StringPart(1:28-1:53),StringEnd(1:53-1:54),CloseCurly(1:55-1:56), @@ -105,26 +105,45 @@ NO CHANGE (declared-type (ty-fn @4.8-4.24 (effectful false) (ty-tuple @4.8-4.14 - (ty-var @4.9-4.10 (name "a")) - (ty-var @4.12-4.13 (name "b"))) + (ty-rigid-var @4.9-4.10 (name "a")) + (ty-rigid-var @4.12-4.13 (name "b"))) (ty-tuple @4.18-4.24 - (ty-var @4.19-4.20 (name "b")) - (ty-var @4.22-4.23 (name "a"))))))) + (ty-rigid-var @4.12-4.13 (name "b")) + (ty-rigid-var @4.9-4.10 (name "a"))))))) (d-let (p-assign @9.1-9.5 (ident "main")) (e-call @9.8-9.18 - (e-lookup-local @9.8-9.12 - (p-assign @5.1-5.5 (ident "swap"))) - (e-int @9.13-9.14 (value "1")) - (e-int @9.16-9.17 (value "2"))))) + (e-num @9.13-9.14 (value "1")) + (e-num @9.16-9.17 (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 @5.1-5.5 (type "Error")) + (patt @5.1-5.5 (type "(a, b) -> (b, a)")) (patt @9.1-9.5 (type "_c"))) + (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.23 (type "Error")) + (expr @5.8-5.23 (type "(a, b) -> (b, a)")) (expr @9.8-9.18 (type "_c")))) ~~~ diff --git a/test/snapshots/type_alias_decl.md b/test/snapshots/type_alias_decl.md index d2ee4fdfad..cb7f8d33ce 100644 --- a/test/snapshots/type_alias_decl.md +++ b/test/snapshots/type_alias_decl.md @@ -282,7 +282,7 @@ main! = |_| { (e-block @27.13-39.2 (s-let @30.5-30.17 (p-assign @30.5-30.11 (ident "userId")) - (e-int @30.14-30.17 (value "123"))) + (e-num @30.14-30.17 (value "123"))) (s-let @33.5-33.40 (p-assign @33.5-33.11 (ident "person")) (e-record @33.14-33.40 @@ -291,102 +291,117 @@ main! = |_| { (e-string @33.22-33.29 (e-literal @33.23-33.28 (string "Alice")))) (field (name "age") - (e-int @33.36-33.38 (value "30")))))) + (e-num @33.36-33.38 (value "30")))))) (s-let @36.5-36.16 (p-assign @36.5-36.10 (ident "color")) (e-tag @36.13-36.16 (name "Red"))) (e-lookup-local @38.5-38.11 (p-assign @30.5-30.11 (ident "userId")))))) + (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 @4.1-4.13 (ty-header @4.1-4.7 (name "UserId")) - (ty @4.10-4.13 (name "U64"))) + (ty-lookup @4.10-4.13 (name "U64") (builtin))) (s-alias-decl @7.1-7.37 (ty-header @7.1-7.16 (name "Result") (ty-args - (ty-var @7.8-7.10 (name "ok")) - (ty-var @7.12-7.15 (name "err")))) + (ty-rigid-var @7.8-7.10 (name "ok")) + (ty-rigid-var @7.12-7.15 (name "err")))) (ty-tag-union @7.19-7.37 - (ty-apply @7.20-7.26 (symbol "Ok") - (ty-var @7.23-7.25 (name "ok"))) - (ty-apply @7.28-7.36 (symbol "Err") - (ty-var @7.32-7.35 (name "err"))))) + (tag_name @7.20-7.26 (name "Ok")) + (tag_name @7.28-7.36 (name "Err")))) (s-alias-decl @10.1-10.35 (ty-header @10.1-10.7 (name "Person")) (ty-record @10.10-10.35 (field (field "name") - (ty @10.19-10.22 (name "Str"))) + (ty-lookup @10.19-10.22 (name "Str") (builtin))) (field (field "age") - (ty @10.30-10.33 (name "U64"))))) + (ty-lookup @10.30-10.33 (name "U64") (builtin))))) (s-alias-decl @13.1-13.21 (ty-header @13.1-13.12 (name "MapFn") (ty-args - (ty-var @13.7-13.8 (name "a")) - (ty-var @13.10-13.11 (name "b")))) + (ty-rigid-var @13.7-13.8 (name "a")) + (ty-rigid-var @13.10-13.11 (name "b")))) (ty-fn @13.15-13.21 (effectful false) - (ty-var @13.15-13.16 (name "a")) - (ty-var @13.20-13.21 (name "b")))) + (ty-rigid-var @13.7-13.8 (name "a")) + (ty-rigid-var @13.10-13.11 (name "b")))) (s-alias-decl @16.1-16.38 (ty-header @16.1-16.18 (name "ApiResponse") (ty-args - (ty-var @16.13-16.17 (name "data")))) - (ty-apply @16.21-16.38 (symbol "Result") - (ty-var @16.28-16.32 (name "data")) - (ty @16.34-16.37 (name "Str")))) + (ty-rigid-var @16.13-16.17 (name "data")))) + (ty-apply @16.21-16.38 (name "Result") (local) + (ty-rigid-var @16.13-16.17 (name "data")) + (ty-lookup @16.21-16.38 (name "Str") (builtin)))) (s-alias-decl @19.1-19.47 (ty-header @19.1-19.6 (name "Color")) (ty-tag-union @19.9-19.47 - (ty @19.10-19.13 (name "Red")) - (ty @19.15-19.20 (name "Green")) - (ty @19.22-19.26 (name "Blue")) - (ty-apply @19.28-19.46 (symbol "Custom") - (ty @19.35-19.37 (name "U8")) - (ty @19.39-19.41 (name "U8")) - (ty @19.43-19.45 (name "U8"))))) + (tag_name @19.10-19.13 (name "Red")) + (tag_name @19.15-19.20 (name "Green")) + (tag_name @19.22-19.26 (name "Blue")) + (tag_name @19.28-19.46 (name "Custom")))) (s-alias-decl @22.1-25.2 (ty-header @22.1-22.16 (name "Container") (ty-args - (ty-var @22.11-22.15 (name "item")))) + (ty-rigid-var @22.11-22.15 (name "item")))) (ty-record @22.19-25.2 (field (field "contents") - (ty-apply @23.16-23.26 (symbol "List") - (ty-var @23.21-23.25 (name "item")))) + (ty-apply @23.16-23.26 (name "List") (builtin) + (ty-rigid-var @22.11-22.15 (name "item")))) (field (field "metadata") (ty-record @24.16-24.45 (field (field "size") - (ty @24.25-24.28 (name "U64"))) + (ty-lookup @24.25-24.28 (name "U64") (builtin))) (field (field "created") - (ty @24.40-24.43 (name "Str")))))))) + (ty-lookup @24.40-24.43 (name "Str") (builtin)))))))) ~~~ # TYPES ~~~clojure (inferred-types (defs - (patt @27.1-27.6 (type "_arg -> U64"))) + (patt @27.1-27.6 (type "_arg -> UserId"))) (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 @4.1-4.13 (type "UserId") (ty-header @4.1-4.7 (name "UserId"))) (alias @7.1-7.37 (type "Result(ok, err)") (ty-header @7.1-7.16 (name "Result") (ty-args - (ty-var @7.8-7.10 (name "ok")) - (ty-var @7.12-7.15 (name "err"))))) + (ty-rigid-var @7.8-7.10 (name "ok")) + (ty-rigid-var @7.12-7.15 (name "err"))))) (alias @10.1-10.35 (type "Person") (ty-header @10.1-10.7 (name "Person"))) (alias @13.1-13.21 (type "MapFn(a, b)") (ty-header @13.1-13.12 (name "MapFn") (ty-args - (ty-var @13.7-13.8 (name "a")) - (ty-var @13.10-13.11 (name "b"))))) + (ty-rigid-var @13.7-13.8 (name "a")) + (ty-rigid-var @13.10-13.11 (name "b"))))) (alias @16.1-16.38 (type "ApiResponse(data)") (ty-header @16.1-16.18 (name "ApiResponse") (ty-args - (ty-var @16.13-16.17 (name "data"))))) + (ty-rigid-var @16.13-16.17 (name "data"))))) (alias @19.1-19.47 (type "Color") (ty-header @19.1-19.6 (name "Color"))) (alias @22.1-25.2 (type "Container(item)") (ty-header @22.1-22.16 (name "Container") (ty-args - (ty-var @22.11-22.15 (name "item")))))) + (ty-rigid-var @22.11-22.15 (name "item")))))) (expressions - (expr @27.9-39.2 (type "_arg -> U64")))) + (expr @27.9-39.2 (type "_arg -> UserId")))) ~~~ diff --git a/test/snapshots/type_alias_parameterized.md b/test/snapshots/type_alias_parameterized.md index 8f5f95b141..bd43bc9bb3 100644 --- a/test/snapshots/type_alias_parameterized.md +++ b/test/snapshots/type_alias_parameterized.md @@ -12,21 +12,16 @@ Pair(a, b) : (a, b) swapPair : Pair(a, b) -> Pair(b, a) swapPair = |(x, y)| (y, x) -test1 = |_| swapPair((1, 2)) - -test2 = |_| swapPair(1, 2) +main! = |_| swapPair(1, 2) ~~~ # EXPECTED -TYPE MISMATCH - type_alias_parameterized.md:10:13:10:21 +TYPE MISMATCH - type_alias_parameterized.md:8:13:8:27 # PROBLEMS -**UNIMPLEMENTED** - - **TYPE MISMATCH** This expression is used in an unexpected way: -**type_alias_parameterized.md:10:13:10:27:** +**type_alias_parameterized.md:8:13:8:27:** ```roc -test2 = |_| swapPair(1, 2) +main! = |_| swapPair(1, 2) ``` ^^^^^^^^^^^^^^ @@ -34,7 +29,7 @@ It has the type: _Num(_size), Num(_size2) -> _ret_ But I expected it to be: - _Pair(Error) -> Pair(Error)_ + _Pair(c, d) -> Pair(d, c)_ # TOKENS ~~~zig @@ -42,13 +37,12 @@ KwApp(1:1-1:4),OpenSquare(1:5-1:6),LowerIdent(1:6-1:11),CloseSquare(1:11-1:12),O UpperIdent(3:1-3:5),NoSpaceOpenRound(3:5-3:6),LowerIdent(3:6-3:7),Comma(3:7-3:8),LowerIdent(3:9-3:10),CloseRound(3:10-3:11),OpColon(3:12-3:13),OpenRound(3:14-3:15),LowerIdent(3:15-3:16),Comma(3:16-3:17),LowerIdent(3:18-3:19),CloseRound(3:19-3:20), LowerIdent(5:1-5:9),OpColon(5:10-5:11),UpperIdent(5:12-5:16),NoSpaceOpenRound(5:16-5:17),LowerIdent(5:17-5:18),Comma(5:18-5:19),LowerIdent(5:20-5:21),CloseRound(5:21-5:22),OpArrow(5:23-5:25),UpperIdent(5:26-5:30),NoSpaceOpenRound(5:30-5:31),LowerIdent(5:31-5:32),Comma(5:32-5:33),LowerIdent(5:34-5:35),CloseRound(5:35-5:36), LowerIdent(6:1-6:9),OpAssign(6:10-6:11),OpBar(6:12-6:13),NoSpaceOpenRound(6:13-6:14),LowerIdent(6:14-6:15),Comma(6:15-6:16),LowerIdent(6:17-6:18),CloseRound(6:18-6:19),OpBar(6:19-6:20),OpenRound(6:21-6:22),LowerIdent(6:22-6:23),Comma(6:23-6:24),LowerIdent(6:25-6:26),CloseRound(6:26-6:27), -LowerIdent(8:1-8:6),OpAssign(8:7-8:8),OpBar(8:9-8:10),Underscore(8:10-8:11),OpBar(8:11-8:12),LowerIdent(8:13-8:21),NoSpaceOpenRound(8:21-8:22),NoSpaceOpenRound(8:22-8:23),Int(8:23-8:24),Comma(8:24-8:25),Int(8:26-8:27),CloseRound(8:27-8:28),CloseRound(8:28-8:29), -LowerIdent(10:1-10:6),OpAssign(10:7-10:8),OpBar(10:9-10:10),Underscore(10:10-10:11),OpBar(10:11-10:12),LowerIdent(10:13-10:21),NoSpaceOpenRound(10:21-10:22),Int(10:22-10:23),Comma(10:23-10:24),Int(10:25-10:26),CloseRound(10:26-10:27), -EndOfFile(11:1-11:1), +LowerIdent(8:1-8:6),OpAssign(8:7-8:8),OpBar(8:9-8:10),Underscore(8:10-8:11),OpBar(8:11-8:12),LowerIdent(8:13-8:21),NoSpaceOpenRound(8:21-8:22),Int(8:22-8:23),Comma(8:23-8:24),Int(8:25-8:26),CloseRound(8:26-8:27), +EndOfFile(9:1-9:1), ~~~ # PARSE ~~~clojure -(file @1.1-10.27 +(file @1.1-8.27 (app @1.1-1.53 (provides @1.5-1.12 (exposed-lower-ident @1.6-1.11 @@ -89,25 +83,15 @@ EndOfFile(11:1-11:1), (e-tuple @6.21-6.27 (e-ident @6.22-6.23 (raw "y")) (e-ident @6.25-6.26 (raw "x"))))) - (s-decl @8.1-8.29 - (p-ident @8.1-8.6 (raw "test1")) - (e-lambda @8.9-8.29 + (s-decl @8.1-8.27 + (p-ident @8.1-8.6 (raw "main!")) + (e-lambda @8.9-8.27 (args (p-underscore)) - (e-apply @8.13-8.29 + (e-apply @8.13-8.27 (e-ident @8.13-8.21 (raw "swapPair")) - (e-tuple @8.22-8.28 - (e-int @8.23-8.24 (raw "1")) - (e-int @8.26-8.27 (raw "2")))))) - (s-decl @10.1-10.27 - (p-ident @10.1-10.6 (raw "test2")) - (e-lambda @10.9-10.27 - (args - (p-underscore)) - (e-apply @10.13-10.27 - (e-ident @10.13-10.21 (raw "swapPair")) - (e-int @10.22-10.23 (raw "1")) - (e-int @10.25-10.26 (raw "2"))))))) + (e-int @8.22-8.23 (raw "1")) + (e-int @8.25-8.26 (raw "2"))))))) ~~~ # FORMATTED ~~~roc @@ -140,29 +124,16 @@ NO CHANGE (ty-rigid-var @5.12-5.22 (name "b")) (ty-rigid-var @5.12-5.22 (name "a"))))))) (d-let - (p-assign @8.1-8.6 (ident "test1")) - (e-closure @8.9-8.29 + (p-assign @8.1-8.6 (ident "main!")) + (e-closure @8.9-8.27 (captures (capture @6.1-6.9 (ident "swapPair"))) - (e-lambda @8.9-8.29 + (e-lambda @8.9-8.27 (args (p-underscore @8.10-8.11)) - (e-call @8.13-8.29 - (e-tuple @8.22-8.28 - (elems - (e-num @8.23-8.24 (value "1")) - (e-num @8.26-8.27 (value "2")))))))) - (d-let - (p-assign @10.1-10.6 (ident "test2")) - (e-closure @10.9-10.27 - (captures - (capture @6.1-6.9 (ident "swapPair"))) - (e-lambda @10.9-10.27 - (args - (p-underscore @10.10-10.11)) - (e-call @10.13-10.27 - (e-num @10.22-10.23 (value "1")) - (e-num @10.25-10.26 (value "2")))))) + (e-call @8.13-8.27 + (e-num @8.22-8.23 (value "1")) + (e-num @8.25-8.26 (value "2")))))) (s-nominal-decl @1.1-1.1 (ty-header @1.1-1.1 (name "Bool")) (ty-tag-union @1.1-1.1 @@ -189,9 +160,8 @@ NO CHANGE ~~~clojure (inferred-types (defs - (patt @6.1-6.9 (type "Pair(Error, Error) -> Pair(Error, Error)")) - (patt @8.1-8.6 (type "_arg -> Error")) - (patt @10.1-10.6 (type "_arg -> _ret"))) + (patt @6.1-6.9 (type "Pair(a, b) -> Pair(b, a)")) + (patt @8.1-8.6 (type "_arg -> _ret"))) (type_decls (nominal @1.1-1.1 (type "Bool") (ty-header @1.1-1.1 (name "Bool"))) @@ -206,7 +176,6 @@ NO CHANGE (ty-rigid-var @3.6-3.7 (name "a")) (ty-rigid-var @3.9-3.10 (name "b")))))) (expressions - (expr @6.12-6.27 (type "Pair(Error, Error) -> Pair(Error, Error)")) - (expr @8.9-8.29 (type "_arg -> Error")) - (expr @10.9-10.27 (type "_arg -> _ret")))) + (expr @6.12-6.27 (type "Pair(a, b) -> Pair(b, a)")) + (expr @8.9-8.27 (type "_arg -> _ret")))) ~~~ diff --git a/test/snapshots/type_alias_simple.md b/test/snapshots/type_alias_simple.md index f19b1480ea..35a9a0266e 100644 --- a/test/snapshots/type_alias_simple.md +++ b/test/snapshots/type_alias_simple.md @@ -17,7 +17,19 @@ main! = |_| getUser(100) # EXPECTED NIL # PROBLEMS -NIL +**INVALID IF CONDITION** +This `if` condition needs to be a _Bool_: +**type_alias_simple.md:6:20:** +```roc +getUser = |id| if (id > 10) "big" else "small" +``` + ^^^^^^^ + +Right now, it has the type: + _UserId_ + +Every `if` condition must evaluate to a _Bool_–either `True` or `False`. + # TOKENS ~~~zig KwApp(1:1-1:4),OpenSquare(1:5-1:6),LowerIdent(1:6-1:11),CloseSquare(1:11-1:12),OpenCurly(1:13-1:14),LowerIdent(1:15-1:17),OpColon(1:17-1:18),KwPlatform(1:19-1:27),StringStart(1:28-1:29),StringPart(1:29-1:50),StringEnd(1:50-1:51),CloseCurly(1:52-1:53), @@ -91,7 +103,7 @@ NO CHANGE (e-binop @6.20-6.27 (op "gt") (e-lookup-local @6.20-6.22 (p-assign @6.12-6.14 (ident "id"))) - (e-int @6.25-6.27 (value "10"))) + (e-num @6.25-6.27 (value "10"))) (e-string @6.29-6.34 (e-literal @6.30-6.33 (string "big"))))) (if-else @@ -100,8 +112,8 @@ NO CHANGE (annotation @6.1-6.8 (declared-type (ty-fn @5.11-5.24 (effectful false) - (ty @5.11-5.17 (name "UserId")) - (ty @5.21-5.24 (name "Str")))))) + (ty-lookup @5.11-5.17 (name "UserId") (local)) + (ty-lookup @5.21-5.24 (name "Str") (builtin)))))) (d-let (p-assign @8.1-8.6 (ident "main!")) (e-closure @8.9-8.25 @@ -111,12 +123,23 @@ NO CHANGE (args (p-underscore @8.10-8.11)) (e-call @8.13-8.25 - (e-lookup-local @8.13-8.20 - (p-assign @6.1-6.8 (ident "getUser"))) - (e-int @8.21-8.24 (value "100")))))) + (e-num @8.21-8.24 (value "100")))))) + (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.13 (ty-header @3.1-3.7 (name "UserId")) - (ty @3.10-3.13 (name "U64")))) + (ty-lookup @3.10-3.13 (name "U64") (builtin)))) ~~~ # TYPES ~~~clojure @@ -125,6 +148,13 @@ NO CHANGE (patt @6.1-6.8 (type "UserId -> Str")) (patt @8.1-8.6 (type "_arg -> 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"))))) (alias @3.1-3.13 (type "UserId") (ty-header @3.1-3.7 (name "UserId")))) (expressions diff --git a/test/snapshots/type_alias_tag_union.md b/test/snapshots/type_alias_tag_union.md index 36823a86ab..2979dd4bc8 100644 --- a/test/snapshots/type_alias_tag_union.md +++ b/test/snapshots/type_alias_tag_union.md @@ -145,10 +145,10 @@ NO CHANGE (annotation @8.1-8.8 (declared-type (ty-fn @7.11-7.36 (effectful false) - (ty-apply @7.11-7.29 (symbol "MyResult") - (ty @7.20-7.23 (name "Str")) - (ty @7.25-7.28 (name "I32"))) - (ty @7.33-7.36 (name "Str")))))) + (ty-apply @7.11-7.29 (name "MyResult") (local) + (ty-lookup @7.11-7.29 (name "Str") (builtin)) + (ty-lookup @7.11-7.29 (name "I32") (builtin))) + (ty-lookup @7.33-7.36 (name "Str") (builtin)))))) (d-let (p-assign @15.1-15.10 (ident "getString")) (e-lambda @15.13-15.29 @@ -159,67 +159,84 @@ NO CHANGE (annotation @15.1-15.10 (declared-type (ty-fn @14.13-14.31 (effectful false) - (ty-apply @14.13-14.24 (symbol "Option") - (ty @14.20-14.23 (name "Str"))) - (ty @14.28-14.31 (name "Str")))))) + (ty-apply @14.13-14.24 (name "Option") (local) + (ty-lookup @14.13-14.24 (name "Str") (builtin))) + (ty-lookup @14.28-14.31 (name "Str") (builtin)))))) (d-let (p-assign @18.1-18.10 (ident "getNumber")) (e-lambda @18.13-18.21 (args (p-assign @18.14-18.18 (ident "_opt"))) - (e-int @18.20-18.21 (value "0"))) + (e-num @18.20-18.21 (value "0"))) (annotation @18.1-18.10 (declared-type (ty-fn @17.13-17.31 (effectful false) - (ty-apply @17.13-17.24 (symbol "Option") - (ty @17.20-17.23 (name "I32"))) - (ty @17.28-17.31 (name "I32")))))) + (ty-apply @17.13-17.24 (name "Option") (local) + (ty-lookup @17.13-17.24 (name "I32") (builtin))) + (ty-lookup @17.28-17.31 (name "I32") (builtin)))))) (d-let (p-assign @20.1-20.6 (ident "main!")) (e-lambda @20.9-20.15 (args (p-underscore @20.10-20.11)) (e-empty_record @20.13-20.15))) + (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 @4.1-4.41 (ty-header @4.1-4.18 (name "MyResult") (ty-args - (ty-var @4.10-4.12 (name "ok")) - (ty-var @4.14-4.17 (name "err")))) + (ty-rigid-var @4.10-4.12 (name "ok")) + (ty-rigid-var @4.14-4.17 (name "err")))) (ty-tag-union @4.21-4.41 - (ty-apply @4.22-4.30 (symbol "Good") - (ty-var @4.27-4.29 (name "ok"))) - (ty-apply @4.32-4.40 (symbol "Bad") - (ty-var @4.36-4.39 (name "err"))))) + (tag_name @4.22-4.30 (name "Good")) + (tag_name @4.32-4.40 (name "Bad")))) (s-alias-decl @11.1-11.28 (ty-header @11.1-11.10 (name "Option") (ty-args - (ty-var @11.8-11.9 (name "a")))) + (ty-rigid-var @11.8-11.9 (name "a")))) (ty-tag-union @11.13-11.28 - (ty-apply @11.14-11.21 (symbol "Some") - (ty-var @11.19-11.20 (name "a"))) - (ty @11.23-11.27 (name "None"))))) + (tag_name @11.14-11.21 (name "Some")) + (tag_name @11.23-11.27 (name "None"))))) ~~~ # TYPES ~~~clojure (inferred-types (defs - (patt @8.1-8.8 (type "MyResult(Str, I32) -> Str")) + (patt @8.1-8.8 (type "MyResult(Str, Num(Int(Signed32))) -> Str")) (patt @15.1-15.10 (type "Option(Str) -> Str")) - (patt @18.1-18.10 (type "Option(I32) -> I32")) + (patt @18.1-18.10 (type "Option(Num(Int(Signed32))) -> Num(Int(Signed32))")) (patt @20.1-20.6 (type "_arg -> {}"))) (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 @4.1-4.41 (type "MyResult(ok, err)") (ty-header @4.1-4.18 (name "MyResult") (ty-args - (ty-var @4.10-4.12 (name "ok")) - (ty-var @4.14-4.17 (name "err"))))) + (ty-rigid-var @4.10-4.12 (name "ok")) + (ty-rigid-var @4.14-4.17 (name "err"))))) (alias @11.1-11.28 (type "Option(a)") (ty-header @11.1-11.10 (name "Option") (ty-args - (ty-var @11.8-11.9 (name "a")))))) + (ty-rigid-var @11.8-11.9 (name "a")))))) (expressions - (expr @8.11-8.32 (type "MyResult(Str, I32) -> Str")) + (expr @8.11-8.32 (type "MyResult(Str, Num(Int(Signed32))) -> Str")) (expr @15.13-15.29 (type "Option(Str) -> Str")) - (expr @18.13-18.21 (type "Option(I32) -> I32")) + (expr @18.13-18.21 (type "Option(Num(Int(Signed32))) -> Num(Int(Signed32))")) (expr @20.9-20.15 (type "_arg -> {}")))) ~~~ diff --git a/test/snapshots/type_anno_connection.md b/test/snapshots/type_anno_connection.md index 8cfe5b4ef5..7886e5bacb 100644 --- a/test/snapshots/type_anno_connection.md +++ b/test/snapshots/type_anno_connection.md @@ -71,29 +71,48 @@ NO CHANGE (e-binop @4.15-4.20 (op "add") (e-lookup-local @4.15-4.16 (p-assign @4.12-4.13 (ident "x"))) - (e-int @4.19-4.20 (value "1")))) + (e-num @4.19-4.20 (value "1")))) (annotation @4.1-4.8 (declared-type (ty-fn @3.11-3.21 (effectful false) - (ty @3.11-3.14 (name "U64")) - (ty @3.18-3.21 (name "U64")))))) + (ty-lookup @3.11-3.14 (name "U64") (builtin)) + (ty-lookup @3.18-3.21 (name "U64") (builtin)))))) (d-let (p-assign @7.1-7.10 (ident "my_number")) (e-call @7.13-7.24 - (e-lookup-local @7.13-7.20 - (p-assign @4.1-4.8 (ident "add_one"))) - (e-int @7.21-7.23 (value "42"))) + (e-num @7.21-7.23 (value "42"))) (annotation @7.1-7.10 (declared-type - (ty @6.13-6.16 (name "U64")))))) + (ty-lookup @6.13-6.16 (name "U64") (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.8 (type "U64 -> U64")) - (patt @7.1-7.10 (type "U64"))) + (patt @4.1-4.8 (type "Num(Int(Unsigned64)) -> Num(Int(Unsigned64))")) + (patt @7.1-7.10 (type "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 @4.11-4.20 (type "U64 -> U64")) - (expr @7.13-7.24 (type "U64")))) + (expr @4.11-4.20 (type "Num(Int(Unsigned64)) -> Num(Int(Unsigned64))")) + (expr @7.13-7.24 (type "Num(Int(Unsigned64))")))) ~~~ diff --git a/test/snapshots/type_annotation_missing_parens.md b/test/snapshots/type_annotation_missing_parens.md index 9dcb9027f0..fc45dd3eee 100644 --- a/test/snapshots/type_annotation_missing_parens.md +++ b/test/snapshots/type_annotation_missing_parens.md @@ -72,11 +72,32 @@ nums : List ~~~ # 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)) ~~~ diff --git a/test/snapshots/type_annotations.md b/test/snapshots/type_annotations.md index 8538796130..84af13a094 100644 --- a/test/snapshots/type_annotations.md +++ b/test/snapshots/type_annotations.md @@ -110,11 +110,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)) ~~~ diff --git a/test/snapshots/type_app_complex_nested.md b/test/snapshots/type_app_complex_nested.md index f6b8b340a6..02692a9f04 100644 --- a/test/snapshots/type_app_complex_nested.md +++ b/test/snapshots/type_app_complex_nested.md @@ -45,6 +45,17 @@ ComplexType(a, b) : Result(List(Maybe(a)), Dict(Str, Error(b))) ^^^^^ +**UNDECLARED TYPE** +The type _Dict_ is not declared in this scope. + +This type is referenced here: +**type_app_complex_nested.md:18:44:18:48:** +```roc +ComplexType(a, b) : Result(List(Maybe(a)), Dict(Str, Error(b))) +``` + ^^^^ + + **UNDECLARED TYPE** The type _Error_ is not declared in this scope. @@ -67,6 +78,17 @@ processComplex : Result(List(Maybe(a)), Dict(Str, Error(_b))) -> List(a) ^^^^^ +**UNDECLARED TYPE** +The type _Dict_ is not declared in this scope. + +This type is referenced here: +**type_app_complex_nested.md:4:41:4:45:** +```roc +processComplex : Result(List(Maybe(a)), Dict(Str, Error(_b))) -> List(a) +``` + ^^^^ + + **UNDECLARED TYPE** The type _Error_ is not declared in this scope. @@ -101,6 +123,38 @@ deepNested : Maybe(Result(List(Dict(Str, a)), _b)) -> a ^^^^^ +**UNDECLARED TYPE** +The type _Dict_ is not declared in this scope. + +This type is referenced here: +**type_app_complex_nested.md:12:32:12:36:** +```roc +deepNested : Maybe(Result(List(Dict(Str, a)), _b)) -> a +``` + ^^^^ + + +**INCOMPATIBLE MATCH PATTERNS** +The first pattern in this `match` is incompatible: +**type_app_complex_nested.md:6:5:** +```roc + match result { + Ok(maybeList) => [] + Err(_) => [] + } +``` + ^^^^^^^^^^^^^ + +The first pattern has the type: + _Result(ok, err)_ + +But the expression right after `match` has the type: + _Result(List(Error), Error)_ + +These two types can't never match! + + + # TOKENS ~~~zig KwApp(1:1-1:4),OpenSquare(1:5-1:6),LowerIdent(1:6-1:11),CloseSquare(1:11-1:12),OpenCurly(1:13-1:14),LowerIdent(1:15-1:17),OpColon(1:17-1:18),KwPlatform(1:19-1:27),StringStart(1:28-1:29),StringPart(1:29-1:50),StringEnd(1:50-1:51),CloseCurly(1:52-1:53), @@ -278,16 +332,12 @@ main! = |_| processComplex(Ok([Some(42), None])) (annotation @5.1-5.15 (declared-type (ty-fn @4.18-4.73 (effectful false) - (ty-apply @4.18-4.62 (symbol "Result") - (ty-apply @4.25-4.39 (symbol "List") - (ty-apply @4.30-4.38 (symbol "Maybe") - (ty-var @4.36-4.37 (name "a")))) - (ty-apply @4.41-4.61 (symbol "Dict") - (ty @4.46-4.49 (name "Str")) - (ty-apply @4.51-4.60 (symbol "Error") - (ty-var @4.57-4.59 (name "_b"))))) - (ty-apply @4.66-4.73 (symbol "List") - (ty-var @4.71-4.72 (name "a"))))))) + (ty-apply @4.18-4.62 (name "Result") (local) + (ty-apply @4.18-4.62 (name "List") (builtin) + (ty-malformed @4.30-4.35)) + (ty-malformed @4.18-4.62)) + (ty-apply @4.66-4.73 (name "List") (builtin) + (ty-rigid-var @4.36-4.37 (name "a"))))))) (d-let (p-assign @13.1-13.11 (ident "deepNested")) (e-lambda @13.14-15.2 @@ -298,14 +348,8 @@ main! = |_| processComplex(Ok([Some(42), None])) (annotation @13.1-13.11 (declared-type (ty-fn @12.14-12.56 (effectful false) - (ty-apply @12.14-12.51 (symbol "Maybe") - (ty-apply @12.20-12.50 (symbol "Result") - (ty-apply @12.27-12.45 (symbol "List") - (ty-apply @12.32-12.44 (symbol "Dict") - (ty @12.37-12.40 (name "Str")) - (ty-var @12.42-12.43 (name "a")))) - (ty-var @12.47-12.49 (name "_b")))) - (ty-var @12.55-12.56 (name "a")))))) + (ty-malformed @12.14-12.19) + (ty-rigid-var @12.42-12.43 (name "a")))))) (d-let (p-assign @20.1-20.6 (ident "main!")) (e-closure @20.9-20.49 @@ -315,8 +359,6 @@ main! = |_| processComplex(Ok([Some(42), None])) (args (p-underscore @20.10-20.11)) (e-call @20.13-20.49 - (e-lookup-local @20.13-20.27 - (p-assign @5.1-5.15 (ident "processComplex"))) (e-nominal @20.28-20.48 (nominal "Result") (e-tag @20.28-20.48 (name "Ok") (args @@ -324,37 +366,53 @@ main! = |_| processComplex(Ok([Some(42), None])) (elems (e-tag @20.32-20.40 (name "Some") (args - (e-int @20.37-20.39 (value "42")))) + (e-num @20.37-20.39 (value "42")))) (e-tag @20.42-20.46 (name "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")))) (s-alias-decl @18.1-18.64 (ty-header @18.1-18.18 (name "ComplexType") (ty-args - (ty-var @18.13-18.14 (name "a")) - (ty-var @18.16-18.17 (name "b")))) - (ty-apply @18.21-18.64 (symbol "Result") - (ty-apply @18.28-18.42 (symbol "List") - (ty-apply @18.33-18.41 (symbol "Maybe") - (ty-var @18.39-18.40 (name "a")))) - (ty-apply @18.44-18.63 (symbol "Dict") - (ty @18.49-18.52 (name "Str")) - (ty-apply @18.54-18.62 (symbol "Error") - (ty-var @18.60-18.61 (name "b"))))))) + (ty-rigid-var @18.13-18.14 (name "a")) + (ty-rigid-var @18.16-18.17 (name "b")))) + (ty-apply @18.21-18.64 (name "Result") (local) + (ty-apply @18.21-18.64 (name "List") (builtin) + (ty-malformed @18.33-18.38)) + (ty-malformed @18.21-18.64)))) ~~~ # TYPES ~~~clojure (inferred-types (defs - (patt @5.1-5.15 (type "Result(List(item), Dict) -> List(a)")) + (patt @5.1-5.15 (type "Result(List(Error), Error) -> List(a)")) (patt @13.1-13.11 (type "Error -> a")) - (patt @20.1-20.6 (type "_arg -> List(a)"))) + (patt @20.1-20.6 (type "_arg -> List(_elem)"))) (type_decls + (nominal @1.1-1.1 (type "Bool") + (ty-header @1.1-1.1 (name "Bool"))) + (nominal @1.1-1.1 (type "Error") + (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 @18.1-18.64 (type "ComplexType(a, b)") (ty-header @18.1-18.18 (name "ComplexType") (ty-args - (ty-var @18.13-18.14 (name "a")) - (ty-var @18.16-18.17 (name "b")))))) + (ty-rigid-var @18.13-18.14 (name "a")) + (ty-rigid-var @18.16-18.17 (name "b")))))) (expressions - (expr @5.18-9.6 (type "Result(List(item), Dict) -> List(a)")) + (expr @5.18-9.6 (type "Result(List(Error), Error) -> List(a)")) (expr @13.14-15.2 (type "Error -> a")) - (expr @20.9-20.49 (type "_arg -> List(a)")))) + (expr @20.9-20.49 (type "_arg -> List(_elem)")))) ~~~ diff --git a/test/snapshots/type_app_multiple_args.md b/test/snapshots/type_app_multiple_args.md index de4306aa9f..2274e3e4b0 100644 --- a/test/snapshots/type_app_multiple_args.md +++ b/test/snapshots/type_app_multiple_args.md @@ -16,6 +16,17 @@ main! = |_| processDict(Dict.empty().insert("one", 1)) UNDEFINED VARIABLE - type_app_multiple_args.md:6:25:6:35 TOO MANY ARGS - type_app_multiple_args.md:3:15:3:29 # PROBLEMS +**UNDECLARED TYPE** +The type _Dict_ is not declared in this scope. + +This type is referenced here: +**type_app_multiple_args.md:3:15:3:19:** +```roc +processDict : Dict(Str, U64) -> List(Str) +``` + ^^^^ + + **UNDEFINED VARIABLE** Nothing is named `empty` in this scope. Is there an `import` or `exposing` missing up-top? @@ -27,16 +38,6 @@ main! = |_| processDict(Dict.empty().insert("one", 1)) ^^^^^^^^^^ -**TOO MANY ARGS** -The type _Dict_ expects 0 argument, but got 2 instead. -**type_app_multiple_args.md:3:15:3:29:** -```roc -processDict : Dict(Str, U64) -> List(Str) -``` - ^^^^^^^^^^^^^^ - - - # TOKENS ~~~zig KwApp(1:1-1:4),OpenSquare(1:5-1:6),LowerIdent(1:6-1:11),CloseSquare(1:11-1:12),OpenCurly(1:13-1:14),LowerIdent(1:15-1:17),OpColon(1:17-1:18),KwPlatform(1:19-1:27),StringStart(1:28-1:29),StringPart(1:29-1:50),StringEnd(1:50-1:51),CloseCurly(1:52-1:53), @@ -107,11 +108,9 @@ NO CHANGE (annotation @4.1-4.12 (declared-type (ty-fn @3.15-3.42 (effectful false) - (ty-apply @3.15-3.29 (symbol "Dict") - (ty @3.20-3.23 (name "Str")) - (ty @3.25-3.28 (name "U64"))) - (ty-apply @3.33-3.42 (symbol "List") - (ty @3.38-3.41 (name "Str"))))))) + (ty-malformed @3.15-3.19) + (ty-apply @3.33-3.42 (name "List") (builtin) + (ty-lookup @3.38-3.41 (name "Str") (builtin))))))) (d-let (p-assign @6.1-6.6 (ident "main!")) (e-closure @6.9-6.55 @@ -121,16 +120,26 @@ NO CHANGE (args (p-underscore @6.10-6.11)) (e-call @6.13-6.55 - (e-lookup-local @6.13-6.24 - (p-assign @4.1-4.12 (ident "processDict"))) (e-dot-access @6.25-6.54 (field "insert") (receiver - (e-call @6.25-6.37 - (e-runtime-error (tag "ident_not_in_scope")))) + (e-call @6.25-6.37)) (args (e-string @6.45-6.50 (e-literal @6.46-6.49 (string "one"))) - (e-int @6.52-6.53 (value "1"))))))))) + (e-num @6.52-6.53 (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 @@ -138,6 +147,14 @@ NO CHANGE (defs (patt @4.1-4.12 (type "Error -> List(Str)")) (patt @6.1-6.6 (type "_arg -> List(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.15-4.25 (type "Error -> List(Str)")) (expr @6.9-6.55 (type "_arg -> List(Str)")))) diff --git a/test/snapshots/type_app_single_arg.md b/test/snapshots/type_app_single_arg.md index 7e2aae2248..0cbae9f16d 100644 --- a/test/snapshots/type_app_single_arg.md +++ b/test/snapshots/type_app_single_arg.md @@ -92,9 +92,9 @@ main! = |_| processList(["one", "two"]) (annotation @4.1-4.12 (declared-type (ty-fn @3.15-3.31 (effectful false) - (ty-apply @3.15-3.24 (symbol "List") - (ty @3.20-3.23 (name "Str"))) - (ty @3.28-3.31 (name "U64")))))) + (ty-apply @3.15-3.24 (name "List") (builtin) + (ty-lookup @3.20-3.23 (name "Str") (builtin))) + (ty-lookup @3.28-3.31 (name "U64") (builtin)))))) (d-let (p-assign @6.1-6.6 (ident "main!")) (e-closure @6.9-6.39 @@ -104,22 +104,41 @@ main! = |_| processList(["one", "two"]) (args (p-underscore @6.10-6.11)) (e-call @6.13-6.39 - (e-lookup-local @6.13-6.24 - (p-assign @4.1-4.12 (ident "processList"))) (e-list @6.25-6.38 (elems (e-string @6.26-6.31 (e-literal @6.27-6.30 (string "one"))) (e-string @6.32-6.37 - (e-literal @6.33-6.36 (string "two")))))))))) + (e-literal @6.33-6.36 (string "two"))))))))) + (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.12 (type "List(Str) -> U64")) - (patt @6.1-6.6 (type "_arg -> U64"))) + (patt @4.1-4.12 (type "List(Str) -> Num(Int(Unsigned64))")) + (patt @6.1-6.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 @4.15-4.32 (type "List(Str) -> U64")) - (expr @6.9-6.39 (type "_arg -> U64")))) + (expr @4.15-4.32 (type "List(Str) -> Num(Int(Unsigned64))")) + (expr @6.9-6.39 (type "_arg -> Num(Int(Unsigned64))")))) ~~~ diff --git a/test/snapshots/type_application_basic.md b/test/snapshots/type_application_basic.md index 4013b41bb2..9133433da6 100644 --- a/test/snapshots/type_application_basic.md +++ b/test/snapshots/type_application_basic.md @@ -94,9 +94,9 @@ main! = |_| processList(["one", "two", "three"]) (annotation @4.1-4.12 (declared-type (ty-fn @3.15-3.31 (effectful false) - (ty-apply @3.15-3.24 (symbol "List") - (ty @3.20-3.23 (name "Str"))) - (ty @3.28-3.31 (name "U64")))))) + (ty-apply @3.15-3.24 (name "List") (builtin) + (ty-lookup @3.20-3.23 (name "Str") (builtin))) + (ty-lookup @3.28-3.31 (name "U64") (builtin)))))) (d-let (p-assign @6.1-6.6 (ident "main!")) (e-closure @6.9-6.47 @@ -106,8 +106,6 @@ main! = |_| processList(["one", "two", "three"]) (args (p-underscore @6.10-6.11)) (e-call @6.13-6.47 - (e-lookup-local @6.13-6.24 - (p-assign @4.1-4.12 (ident "processList"))) (e-list @6.25-6.46 (elems (e-string @6.26-6.31 @@ -115,15 +113,36 @@ main! = |_| processList(["one", "two", "three"]) (e-string @6.32-6.37 (e-literal @6.33-6.36 (string "two"))) (e-string @6.38-6.45 - (e-literal @6.39-6.44 (string "three")))))))))) + (e-literal @6.39-6.44 (string "three"))))))))) + (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.12 (type "List(Str) -> U64")) - (patt @6.1-6.6 (type "_arg -> U64"))) + (patt @4.1-4.12 (type "List(Str) -> Num(Int(Unsigned64))")) + (patt @6.1-6.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 @4.15-4.32 (type "List(Str) -> U64")) - (expr @6.9-6.47 (type "_arg -> U64")))) + (expr @4.15-4.32 (type "List(Str) -> Num(Int(Unsigned64))")) + (expr @6.9-6.47 (type "_arg -> Num(Int(Unsigned64))")))) ~~~ diff --git a/test/snapshots/type_builtin.md b/test/snapshots/type_builtin.md index 523ad464d9..ca71b75597 100644 --- a/test/snapshots/type_builtin.md +++ b/test/snapshots/type_builtin.md @@ -45,18 +45,38 @@ 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.15 (ty-header @3.1-3.9 (name "MyNumber")) - (ty @3.12-3.15 (name "U64"))) + (ty-lookup @3.12-3.15 (name "U64") (builtin))) (s-alias-decl @4.1-4.15 (ty-header @4.1-4.9 (name "MyString")) - (ty @4.12-4.15 (name "Str")))) + (ty-lookup @4.12-4.15 (name "Str") (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.15 (type "MyNumber") (ty-header @3.1-3.9 (name "MyNumber"))) (alias @4.1-4.15 (type "MyString") diff --git a/test/snapshots/type_comprehensive_scope.md b/test/snapshots/type_comprehensive_scope.md index 22d1812831..629ccdc48b 100644 --- a/test/snapshots/type_comprehensive_scope.md +++ b/test/snapshots/type_comprehensive_scope.md @@ -119,56 +119,6 @@ MyDict : Dict(Str, U64) ^^^^ -**EXPOSED BUT NOT DEFINED** -The module header says that `MyU64` is exposed, but it is not defined anywhere in this module. - -**type_comprehensive_scope.md:1:9:1:14:** -```roc -module [MyU64, Person, Result, Tree, Node] -``` - ^^^^^ -You can fix this by either defining `MyU64` in this module, or by removing it from the list of exposed values. - -**EXPOSED BUT NOT DEFINED** -The module header says that `Person` is exposed, but it is not defined anywhere in this module. - -**type_comprehensive_scope.md:1:16:1:22:** -```roc -module [MyU64, Person, Result, Tree, Node] -``` - ^^^^^^ -You can fix this by either defining `Person` in this module, or by removing it from the list of exposed values. - -**EXPOSED BUT NOT DEFINED** -The module header says that `Result` is exposed, but it is not defined anywhere in this module. - -**type_comprehensive_scope.md:1:24:1:30:** -```roc -module [MyU64, Person, Result, Tree, Node] -``` - ^^^^^^ -You can fix this by either defining `Result` in this module, or by removing it from the list of exposed values. - -**EXPOSED BUT NOT DEFINED** -The module header says that `Tree` is exposed, but it is not defined anywhere in this module. - -**type_comprehensive_scope.md:1:32:1:36:** -```roc -module [MyU64, Person, Result, Tree, Node] -``` - ^^^^ -You can fix this by either defining `Tree` in this module, or by removing it from the list of exposed values. - -**EXPOSED BUT NOT DEFINED** -The module header says that `Node` is exposed, but it is not defined anywhere in this module. - -**type_comprehensive_scope.md:1:38:1:42:** -```roc -module [MyU64, Person, Result, Tree, Node] -``` - ^^^^ -You can fix this by either defining `Node` in this module, or by removing it from the list of exposed values. - # TOKENS ~~~zig KwModule(1:1-1:7),OpenSquare(1:8-1:9),UpperIdent(1:9-1:14),Comma(1:14-1:15),UpperIdent(1:16-1:22),Comma(1:22-1:23),UpperIdent(1:24-1:30),Comma(1:30-1:31),UpperIdent(1:32-1:36),Comma(1:36-1:37),UpperIdent(1:38-1:42),CloseSquare(1:42-1:43), diff --git a/test/snapshots/type_declarations.md b/test/snapshots/type_declarations.md index 2096bcc9a5..9022cc981f 100644 --- a/test/snapshots/type_declarations.md +++ b/test/snapshots/type_declarations.md @@ -202,56 +202,67 @@ 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.41 (ty-header @3.1-3.10 (name "Map") (ty-args - (ty-var @3.5-3.6 (name "a")) - (ty-var @3.8-3.9 (name "b")))) + (ty-rigid-var @3.5-3.6 (name "a")) + (ty-rigid-var @3.8-3.9 (name "b")))) (ty-fn @3.13-3.41 (effectful false) - (ty-apply @3.13-3.20 (symbol "List") - (ty-var @3.18-3.19 (name "a"))) + (ty-apply @3.13-3.20 (name "List") (builtin) + (ty-rigid-var @3.5-3.6 (name "a"))) (ty-parens @3.22-3.30 (ty-fn @3.23-3.29 (effectful false) - (ty-var @3.23-3.24 (name "a")) - (ty-var @3.28-3.29 (name "b")))) - (ty-apply @3.34-3.41 (symbol "List") - (ty-var @3.39-3.40 (name "b"))))) + (ty-rigid-var @3.5-3.6 (name "a")) + (ty-rigid-var @3.8-3.9 (name "b")))) + (ty-apply @3.34-3.41 (name "List") (builtin) + (ty-rigid-var @3.8-3.9 (name "b"))))) (s-alias-decl @5.1-5.17 (ty-header @5.1-5.4 (name "Foo")) (ty-tuple @5.7-5.17 - (ty @5.8-5.11 (name "Bar")) - (ty @5.13-5.16 (name "Baz")))) + (ty-malformed @5.8-5.11) + (ty-malformed @5.13-5.16))) (s-alias-decl @7.1-7.43 (ty-header @7.1-7.8 (name "Some") (ty-args - (ty-var @7.6-7.7 (name "a")))) + (ty-rigid-var @7.6-7.7 (name "a")))) (ty-record @7.11-7.43 (field (field "foo") - (ty-apply @7.19-7.24 (symbol "Ok") - (ty-var @7.22-7.23 (name "a")))) + (ty-malformed @7.19-7.21)) (field (field "bar") - (ty @7.32-7.41 (name "Something"))))) + (ty-malformed @7.32-7.41)))) (s-alias-decl @9.1-9.27 (ty-header @9.1-9.9 (name "Maybe") (ty-args - (ty-var @9.7-9.8 (name "a")))) + (ty-rigid-var @9.7-9.8 (name "a")))) (ty-tag-union @9.12-9.27 - (ty-apply @9.13-9.20 (symbol "Some") - (ty-var @9.18-9.19 (name "a"))) - (ty @9.22-9.26 (name "None")))) + (tag_name @9.13-9.20 (name "Some")) + (tag_name @9.22-9.26 (name "None")))) (s-alias-decl @11.1-11.38 (ty-header @11.1-11.12 (name "SomeFunc") (ty-args - (ty-var @11.10-11.11 (name "a")))) + (ty-rigid-var @11.10-11.11 (name "a")))) (ty-fn @11.15-11.38 (effectful false) - (ty-apply @11.15-11.23 (symbol "Maybe") - (ty-var @11.21-11.22 (name "a"))) - (ty-var @11.25-11.26 (name "a")) - (ty-apply @11.30-11.38 (symbol "Maybe") - (ty-var @11.36-11.37 (name "a"))))) + (ty-apply @11.15-11.23 (name "Maybe") (local) + (ty-rigid-var @11.10-11.11 (name "a"))) + (ty-rigid-var @11.10-11.11 (name "a")) + (ty-apply @11.30-11.38 (name "Maybe") (local) + (ty-rigid-var @11.10-11.11 (name "a"))))) (s-alias-decl @13.1-13.13 (ty-header @13.1-13.7 (name "MyType")) - (ty @13.10-13.13 (name "U64"))) + (ty-lookup @13.10-13.13 (name "U64") (builtin))) (s-alias-decl @15.1-15.24 (ty-header @15.1-15.8 (name "MyType2")) (ty-malformed @15.11-15.24))) @@ -261,28 +272,35 @@ NO CHANGE (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.41 (type "Map(a, b)") (ty-header @3.1-3.10 (name "Map") (ty-args - (ty-var @3.5-3.6 (name "a")) - (ty-var @3.8-3.9 (name "b"))))) + (ty-rigid-var @3.5-3.6 (name "a")) + (ty-rigid-var @3.8-3.9 (name "b"))))) (alias @5.1-5.17 (type "Foo") (ty-header @5.1-5.4 (name "Foo"))) (alias @7.1-7.43 (type "Some(a)") (ty-header @7.1-7.8 (name "Some") (ty-args - (ty-var @7.6-7.7 (name "a"))))) + (ty-rigid-var @7.6-7.7 (name "a"))))) (alias @9.1-9.27 (type "Maybe(a)") (ty-header @9.1-9.9 (name "Maybe") (ty-args - (ty-var @9.7-9.8 (name "a"))))) + (ty-rigid-var @9.7-9.8 (name "a"))))) (alias @11.1-11.38 (type "SomeFunc(a)") (ty-header @11.1-11.12 (name "SomeFunc") (ty-args - (ty-var @11.10-11.11 (name "a"))))) + (ty-rigid-var @11.10-11.11 (name "a"))))) (alias @13.1-13.13 (type "MyType") (ty-header @13.1-13.7 (name "MyType"))) - (alias @15.1-15.24 (type "Error") + (alias @15.1-15.24 (type "MyType2") (ty-header @15.1-15.8 (name "MyType2")))) (expressions)) ~~~ diff --git a/test/snapshots/type_function_effectful.md b/test/snapshots/type_function_effectful.md index c9241154c8..4be98ced59 100644 --- a/test/snapshots/type_function_effectful.md +++ b/test/snapshots/type_function_effectful.md @@ -108,8 +108,6 @@ main! = |_| {} (p-assign @4.15-4.18 (ident "fn!")) (p-assign @4.20-4.21 (ident "x"))) (e-call @4.23-4.29 - (e-lookup-local @4.23-4.26 - (p-assign @4.15-4.18 (ident "fn!"))) (e-lookup-local @4.27-4.28 (p-assign @4.20-4.21 (ident "x")))))) (d-let @@ -117,15 +115,36 @@ main! = |_| {} (e-lambda @6.9-6.15 (args (p-underscore @6.10-6.11)) - (e-empty_record @6.13-6.15)))) + (e-empty_record @6.13-6.15))) + (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.11 (type "_arg -> ret, _arg2 -> ret2")) + (patt @4.1-4.11 (type "a -> b, a -> b")) (patt @6.1-6.6 (type "_arg -> {}"))) + (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.14-4.29 (type "_arg -> ret, _arg2 -> ret2")) + (expr @4.14-4.29 (type "a -> b, a -> b")) (expr @6.9-6.15 (type "_arg -> {}")))) ~~~ diff --git a/test/snapshots/type_function_multi_arg.md b/test/snapshots/type_function_multi_arg.md index 2fd14c6c54..fbff8c154d 100644 --- a/test/snapshots/type_function_multi_arg.md +++ b/test/snapshots/type_function_multi_arg.md @@ -141,14 +141,12 @@ main! = |_| {} (p-assign @4.15-4.16 (ident "x"))) (e-closure @4.18-4.30 (captures - (capture @4.10-4.12 (ident "fn")) - (capture @4.15-4.16 (ident "x"))) + (capture @4.15-4.16 (ident "x")) + (capture @4.10-4.12 (ident "fn"))) (e-lambda @4.18-4.30 (args (p-assign @4.19-4.20 (ident "y"))) (e-call @4.22-4.30 - (e-lookup-local @4.22-4.24 - (p-assign @4.10-4.12 (ident "fn"))) (e-lookup-local @4.25-4.26 (p-assign @4.15-4.16 (ident "x"))) (e-lookup-local @4.28-4.29 @@ -158,15 +156,36 @@ main! = |_| {} (e-lambda @6.9-6.15 (args (p-underscore @6.10-6.11)) - (e-empty_record @6.13-6.15)))) + (e-empty_record @6.13-6.15))) + (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.6 (type "_arg, _arg2 -> ret -> _arg3 -> _arg4 -> ret2")) + (patt @4.1-4.6 (type "a, b -> c -> a -> b -> c")) (patt @6.1-6.6 (type "_arg -> {}"))) + (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.30 (type "_arg, _arg2 -> ret -> _arg3 -> _arg4 -> ret2")) + (expr @4.9-4.30 (type "a, b -> c -> a -> b -> c")) (expr @6.9-6.15 (type "_arg -> {}")))) ~~~ diff --git a/test/snapshots/type_function_simple.md b/test/snapshots/type_function_simple.md index a52b9fd948..a9000f3619 100644 --- a/test/snapshots/type_function_simple.md +++ b/test/snapshots/type_function_simple.md @@ -108,8 +108,6 @@ main! = |_| {} (p-assign @4.10-4.12 (ident "fn")) (p-assign @4.14-4.15 (ident "x"))) (e-call @4.17-4.22 - (e-lookup-local @4.17-4.19 - (p-assign @4.10-4.12 (ident "fn"))) (e-lookup-local @4.20-4.21 (p-assign @4.14-4.15 (ident "x")))))) (d-let @@ -117,15 +115,36 @@ main! = |_| {} (e-lambda @6.9-6.15 (args (p-underscore @6.10-6.11)) - (e-empty_record @6.13-6.15)))) + (e-empty_record @6.13-6.15))) + (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.6 (type "_arg -> ret, _arg2 -> ret2")) + (patt @4.1-4.6 (type "a -> b, a -> b")) (patt @6.1-6.6 (type "_arg -> {}"))) + (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.22 (type "_arg -> ret, _arg2 -> ret2")) + (expr @4.9-4.22 (type "a -> b, a -> b")) (expr @6.9-6.15 (type "_arg -> {}")))) ~~~ diff --git a/test/snapshots/type_multiple_aliases.md b/test/snapshots/type_multiple_aliases.md index 7f192aa3f4..94cb205b87 100644 --- a/test/snapshots/type_multiple_aliases.md +++ b/test/snapshots/type_multiple_aliases.md @@ -157,10 +157,10 @@ NO CHANGE (annotation @9.1-9.12 (declared-type (ty-fn @8.15-8.48 (effectful false) - (ty @8.15-8.21 (name "UserId")) - (ty @8.23-8.31 (name "UserName")) - (ty @8.33-8.40 (name "UserAge")) - (ty @8.44-8.48 (name "User")))))) + (ty-lookup @8.15-8.21 (name "UserId") (local)) + (ty-lookup @8.23-8.31 (name "UserName") (local)) + (ty-lookup @8.33-8.40 (name "UserAge") (local)) + (ty-lookup @8.44-8.48 (name "User") (local)))))) (d-let (p-assign @12.1-12.14 (ident "get_user_name")) (e-lambda @12.17-12.33 @@ -173,8 +173,8 @@ NO CHANGE (annotation @12.1-12.14 (declared-type (ty-fn @11.17-11.33 (effectful false) - (ty @11.17-11.21 (name "User")) - (ty @11.25-11.33 (name "UserName")))))) + (ty-lookup @11.17-11.21 (name "User") (local)) + (ty-lookup @11.25-11.33 (name "UserName") (local)))))) (d-let (p-assign @14.1-14.6 (ident "main!")) (e-closure @14.9-17.2 @@ -188,35 +188,44 @@ NO CHANGE (s-let @15.2-15.38 (p-assign @15.2-15.6 (ident "user")) (e-call @15.9-15.38 - (e-lookup-local @15.9-15.20 - (p-assign @9.1-9.12 (ident "create_user"))) - (e-int @15.21-15.24 (value "123")) + (e-num @15.21-15.24 (value "123")) (e-string @15.26-15.33 (e-literal @15.27-15.32 (string "Alice"))) - (e-int @15.35-15.37 (value "25")))) + (e-num @15.35-15.37 (value "25")))) (e-call @16.2-16.21 - (e-lookup-local @16.2-16.15 - (p-assign @12.1-12.14 (ident "get_user_name"))) (e-lookup-local @16.16-16.20 (p-assign @15.2-15.6 (ident "user")))))))) + (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.13 (ty-header @3.1-3.7 (name "UserId")) - (ty @3.10-3.13 (name "U64"))) + (ty-lookup @3.10-3.13 (name "U64") (builtin))) (s-alias-decl @4.1-4.15 (ty-header @4.1-4.9 (name "UserName")) - (ty @4.12-4.15 (name "Str"))) + (ty-lookup @4.12-4.15 (name "Str") (builtin))) (s-alias-decl @5.1-5.13 (ty-header @5.1-5.8 (name "UserAge")) - (ty @5.11-5.13 (name "U8"))) + (ty-lookup @5.11-5.13 (name "U8") (builtin))) (s-alias-decl @6.1-6.55 (ty-header @6.1-6.5 (name "User")) (ty-record @6.8-6.55 (field (field "id") - (ty @6.15-6.21 (name "UserId"))) + (ty-lookup @6.15-6.21 (name "UserId") (local))) (field (field "name") - (ty @6.30-6.38 (name "UserName"))) + (ty-lookup @6.30-6.38 (name "UserName") (local))) (field (field "age") - (ty @6.46-6.53 (name "UserAge")))))) + (ty-lookup @6.46-6.53 (name "UserAge") (local)))))) ~~~ # TYPES ~~~clojure @@ -226,6 +235,13 @@ NO CHANGE (patt @12.1-12.14 (type "User -> UserName")) (patt @14.1-14.6 (type "_arg -> UserName"))) (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.13 (type "UserId") (ty-header @3.1-3.7 (name "UserId"))) (alias @4.1-4.15 (type "UserName") diff --git a/test/snapshots/type_record_basic.md b/test/snapshots/type_record_basic.md index 6889d7c614..e2fef424ab 100644 --- a/test/snapshots/type_record_basic.md +++ b/test/snapshots/type_record_basic.md @@ -92,10 +92,10 @@ main! = |_| getName({ name: "luke", age: 21 }) (ty-fn @3.11-3.41 (effectful false) (ty-record @3.11-3.34 (field (field "name") - (ty @3.19-3.22 (name "Str"))) + (ty-lookup @3.19-3.22 (name "Str") (builtin))) (field (field "age") - (ty @3.29-3.32 (name "U64")))) - (ty @3.38-3.41 (name "Str")))))) + (ty-lookup @3.29-3.32 (name "U64") (builtin)))) + (ty-lookup @3.38-3.41 (name "Str") (builtin)))))) (d-let (p-assign @6.1-6.6 (ident "main!")) (e-closure @6.9-6.44 @@ -105,23 +105,42 @@ main! = |_| getName({ name: "luke", age: 21 }) (args (p-underscore @6.10-6.11)) (e-call @6.13-6.44 - (e-lookup-local @6.13-6.20 - (p-assign @4.1-4.8 (ident "getName"))) (e-record @6.21-6.43 (fields (field (name "name") (e-string @6.28-6.34 (e-literal @6.29-6.33 (string "luke")))) (field (name "age") - (e-int @6.40-6.42 (value "21")))))))))) + (e-num @6.40-6.42 (value "21"))))))))) + (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.8 (type "{ age: U64, name: Str } -> Str")) + (patt @4.1-4.8 (type "{ age: Num(Int(Unsigned64)), name: Str } -> Str")) (patt @6.1-6.6 (type "_arg -> 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.11-4.28 (type "{ age: U64, name: Str } -> Str")) + (expr @4.11-4.28 (type "{ age: Num(Int(Unsigned64)), name: Str } -> Str")) (expr @6.9-6.44 (type "_arg -> Str")))) ~~~ diff --git a/test/snapshots/type_record_effectful.md b/test/snapshots/type_record_effectful.md index 83d9eab9f7..44aca2c7ef 100644 --- a/test/snapshots/type_record_effectful.md +++ b/test/snapshots/type_record_effectful.md @@ -112,9 +112,6 @@ main! = |_| {} (e-block @6.22-9.2 (s-expr @7.5-7.30 (e-call @7.5-7.30 - (e-lookup-external @7.5-7.17 - (module-idx "0") - (target-node-idx "0")) (e-dot-access @7.18-7.29 (field "name") (receiver (e-lookup-local @7.18-7.24 @@ -128,16 +125,29 @@ main! = |_| {} (ty-fn @5.13-5.43 (effectful true) (ty-record @5.13-5.36 (field (field "name") - (ty @5.21-5.24 (name "Str"))) + (ty-lookup @5.21-5.24 (name "Str") (builtin))) (field (field "age") - (ty @5.31-5.34 (name "U64")))) - (ty @5.40-5.43 (name "Str")))))) + (ty-lookup @5.31-5.34 (name "U64") (builtin)))) + (ty-lookup @5.40-5.43 (name "Str") (builtin)))))) (d-let (p-assign @10.1-10.6 (ident "main!")) (e-lambda @10.9-10.15 (args (p-underscore @10.10-10.11)) (e-empty_record @10.13-10.15))) + (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))) ~~~ @@ -145,9 +155,17 @@ main! = |_| {} ~~~clojure (inferred-types (defs - (patt @6.1-6.10 (type "{ age: U64, name: Str } => Str")) + (patt @6.1-6.10 (type "{ age: Num(Int(Unsigned64)), name: Str } => Str")) (patt @10.1-10.6 (type "_arg -> {}"))) + (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.13-9.2 (type "{ age: U64, name: Str } => Str")) + (expr @6.13-9.2 (type "{ age: Num(Int(Unsigned64)), name: Str } => Str")) (expr @10.9-10.15 (type "_arg -> {}")))) ~~~ diff --git a/test/snapshots/type_record_simple.md b/test/snapshots/type_record_simple.md index 67f142ed63..32bafcbb0c 100644 --- a/test/snapshots/type_record_simple.md +++ b/test/snapshots/type_record_simple.md @@ -88,24 +88,45 @@ main! = |_| {} (ty-fn @3.12-3.42 (effectful false) (ty-record @3.12-3.35 (field (field "name") - (ty @3.20-3.23 (name "Str"))) + (ty-lookup @3.20-3.23 (name "Str") (builtin))) (field (field "age") - (ty @3.30-3.33 (name "U64")))) - (ty @3.39-3.42 (name "Str")))))) + (ty-lookup @3.30-3.33 (name "U64") (builtin)))) + (ty-lookup @3.39-3.42 (name "Str") (builtin)))))) (d-let (p-assign @6.1-6.6 (ident "main!")) (e-lambda @6.9-6.15 (args (p-underscore @6.10-6.11)) - (e-empty_record @6.13-6.15)))) + (e-empty_record @6.13-6.15))) + (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.9 (type "{ age: U64, name: Str } -> Str")) + (patt @4.1-4.9 (type "{ age: Num(Int(Unsigned64)), name: Str } -> Str")) (patt @6.1-6.6 (type "_arg -> {}"))) + (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.12-4.32 (type "{ age: U64, name: Str } -> Str")) + (expr @4.12-4.32 (type "{ age: Num(Int(Unsigned64)), name: Str } -> Str")) (expr @6.9-6.15 (type "_arg -> {}")))) ~~~ diff --git a/test/snapshots/type_record_with_vars.md b/test/snapshots/type_record_with_vars.md index d113835eed..fe790600d5 100644 --- a/test/snapshots/type_record_with_vars.md +++ b/test/snapshots/type_record_with_vars.md @@ -88,16 +88,29 @@ main! = |_| {} (ty-fn @3.12-3.40 (effectful false) (ty-record @3.12-3.35 (field (field "field") - (ty-var @3.21-3.22 (name "a"))) + (ty-rigid-var @3.21-3.22 (name "a"))) (field (field "other") - (ty-var @3.31-3.33 (name "_b")))) - (ty-var @3.39-3.40 (name "a")))))) + (ty-rigid-var @3.31-3.33 (name "_b")))) + (ty-rigid-var @3.21-3.22 (name "a")))))) (d-let (p-assign @6.1-6.6 (ident "main!")) (e-lambda @6.9-6.15 (args (p-underscore @6.10-6.11)) - (e-empty_record @6.13-6.15)))) + (e-empty_record @6.13-6.15))) + (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 @@ -105,6 +118,14 @@ main! = |_| {} (defs (patt @4.1-4.9 (type "{ field: a, other: _b } -> a")) (patt @6.1-6.6 (type "_arg -> {}"))) + (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.12-4.33 (type "{ field: a, other: _b } -> a")) (expr @6.9-6.15 (type "_arg -> {}")))) diff --git a/test/snapshots/type_redeclaration_same_scope.md b/test/snapshots/type_redeclaration_same_scope.md index 4e685122d7..56b934da23 100644 --- a/test/snapshots/type_redeclaration_same_scope.md +++ b/test/snapshots/type_redeclaration_same_scope.md @@ -73,35 +73,53 @@ 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.27 (ty-header @3.1-3.9 (name "Maybe") (ty-args - (ty-var @3.7-3.8 (name "a")))) + (ty-rigid-var @3.7-3.8 (name "a")))) (ty-tag-union @3.12-3.27 - (ty-apply @3.13-3.20 (symbol "Some") - (ty-var @3.18-3.19 (name "a"))) - (ty @3.22-3.26 (name "None")))) + (tag_name @3.13-3.20 (name "Some")) + (tag_name @3.22-3.26 (name "None")))) (s-alias-decl @4.1-4.24 (ty-header @4.1-4.9 (name "Maybe") (ty-args - (ty-var @4.7-4.8 (name "a")))) + (ty-rigid-var @4.7-4.8 (name "a")))) (ty-tag-union @4.12-4.24 - (ty-apply @4.13-4.18 (symbol "Ok") - (ty-var @4.16-4.17 (name "a"))) - (ty @4.20-4.23 (name "Err"))))) + (tag_name @4.13-4.18 (name "Ok")) + (tag_name @4.20-4.23 (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"))))) (alias @3.1-3.27 (type "Maybe(a)") (ty-header @3.1-3.9 (name "Maybe") (ty-args - (ty-var @3.7-3.8 (name "a"))))) + (ty-rigid-var @3.7-3.8 (name "a"))))) (alias @4.1-4.24 (type "Maybe(a)") (ty-header @4.1-4.9 (name "Maybe") (ty-args - (ty-var @4.7-4.8 (name "a")))))) + (ty-rigid-var @4.7-4.8 (name "a")))))) (expressions)) ~~~ diff --git a/test/snapshots/type_same_var_multiple_uses.md b/test/snapshots/type_same_var_multiple_uses.md index f4e0ba7059..9cfdb5bee9 100644 --- a/test/snapshots/type_same_var_multiple_uses.md +++ b/test/snapshots/type_same_var_multiple_uses.md @@ -81,16 +81,29 @@ NO CHANGE (annotation @4.1-4.5 (declared-type (ty-fn @3.8-3.19 (effectful false) - (ty-var @3.8-3.9 (name "a")) + (ty-rigid-var @3.8-3.9 (name "a")) (ty-tuple @3.13-3.19 - (ty-var @3.14-3.15 (name "a")) - (ty-var @3.17-3.18 (name "a"))))))) + (ty-rigid-var @3.8-3.9 (name "a")) + (ty-rigid-var @3.8-3.9 (name "a"))))))) (d-let (p-assign @6.1-6.6 (ident "main!")) (e-lambda @6.9-6.15 (args (p-underscore @6.10-6.11)) - (e-empty_record @6.13-6.15)))) + (e-empty_record @6.13-6.15))) + (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 @@ -98,6 +111,14 @@ NO CHANGE (defs (patt @4.1-4.5 (type "a -> (a, a)")) (patt @6.1-6.6 (type "_arg -> {}"))) + (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.8-4.18 (type "a -> (a, a)")) (expr @6.9-6.15 (type "_arg -> {}")))) diff --git a/test/snapshots/type_scope_integration.md b/test/snapshots/type_scope_integration.md index c881325225..d5f8c93d5b 100644 --- a/test/snapshots/type_scope_integration.md +++ b/test/snapshots/type_scope_integration.md @@ -52,26 +52,6 @@ Bar : SomeUndeclaredType ^^^^^^^^^^^^^^^^^^ -**EXPOSED BUT NOT DEFINED** -The module header says that `Foo` is exposed, but it is not defined anywhere in this module. - -**type_scope_integration.md:1:9:1:12:** -```roc -module [Foo, Bar] -``` - ^^^ -You can fix this by either defining `Foo` in this module, or by removing it from the list of exposed values. - -**EXPOSED BUT NOT DEFINED** -The module header says that `Bar` is exposed, but it is not defined anywhere in this module. - -**type_scope_integration.md:1:14:1:17:** -```roc -module [Foo, Bar] -``` - ^^^ -You can fix this by either defining `Bar` in this module, or by removing it from the list of exposed values. - # TOKENS ~~~zig KwModule(1:1-1:7),OpenSquare(1:8-1:9),UpperIdent(1:9-1:12),Comma(1:12-1:13),UpperIdent(1:14-1:17),CloseSquare(1:17-1:18), diff --git a/test/snapshots/type_shadowing_across_scopes.md b/test/snapshots/type_shadowing_across_scopes.md index 392e08a072..39291bc5c8 100644 --- a/test/snapshots/type_shadowing_across_scopes.md +++ b/test/snapshots/type_shadowing_across_scopes.md @@ -111,16 +111,6 @@ processData = |data| ^^^^ -**EXPOSED BUT NOT DEFINED** -The module header says that `Result` is exposed, but it is not defined anywhere in this module. - -**type_shadowing_across_scopes.md:1:9:1:15:** -```roc -module [Result, processData] -``` - ^^^^^^ -You can fix this by either defining `Result` in this module, or by removing it from the list of exposed values. - # TOKENS ~~~zig KwModule(1:1-1:7),OpenSquare(1:8-1:9),UpperIdent(1:9-1:15),Comma(1:15-1:16),LowerIdent(1:17-1:28),CloseSquare(1:28-1:29), diff --git a/test/snapshots/type_simple_pure.md b/test/snapshots/type_simple_pure.md index d4cfaf338d..b929f6b294 100644 --- a/test/snapshots/type_simple_pure.md +++ b/test/snapshots/type_simple_pure.md @@ -73,14 +73,27 @@ NO CHANGE (annotation @4.1-4.9 (declared-type (ty-fn @3.12-3.22 (effectful false) - (ty @3.12-3.15 (name "Str")) - (ty @3.19-3.22 (name "Str")))))) + (ty-lookup @3.12-3.15 (name "Str") (builtin)) + (ty-lookup @3.19-3.22 (name "Str") (builtin)))))) (d-let (p-assign @6.1-6.6 (ident "main!")) (e-lambda @6.9-6.15 (args (p-underscore @6.10-6.11)) - (e-empty_record @6.13-6.15)))) + (e-empty_record @6.13-6.15))) + (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 @@ -88,6 +101,14 @@ NO CHANGE (defs (patt @4.1-4.9 (type "Str -> Str")) (patt @6.1-6.6 (type "_arg -> {}"))) + (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.12-4.17 (type "Str -> Str")) (expr @6.9-6.15 (type "_arg -> {}")))) diff --git a/test/snapshots/type_tag_union_complex.md b/test/snapshots/type_tag_union_complex.md index 6d81d4ce39..47073006fb 100644 --- a/test/snapshots/type_tag_union_complex.md +++ b/test/snapshots/type_tag_union_complex.md @@ -182,8 +182,8 @@ NO CHANGE (annotation @18.1-18.14 (declared-type (ty-fn @17.17-17.30 (effectful false) - (ty @17.17-17.23 (name "Result")) - (ty @17.27-17.30 (name "Str")))))) + (ty-lookup @17.17-17.23 (name "Result") (local)) + (ty-lookup @17.27-17.30 (name "Str") (builtin)))))) (d-let (p-assign @22.1-22.15 (ident "handleResponse")) (e-lambda @22.18-22.39 @@ -194,61 +194,73 @@ NO CHANGE (annotation @22.1-22.15 (declared-type (ty-fn @21.18-21.33 (effectful false) - (ty @21.18-21.26 (name "Response")) - (ty @21.30-21.33 (name "Str")))))) + (ty-lookup @21.18-21.26 (name "Response") (local)) + (ty-lookup @21.30-21.33 (name "Str") (builtin)))))) (d-let (p-assign @24.1-24.6 (ident "main!")) (e-lambda @24.9-24.15 (args (p-underscore @24.10-24.11)) (e-empty_record @24.13-24.15))) + (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 @4.1-4.37 (ty-header @4.1-4.7 (name "Status")) (ty-tag-union @4.10-4.37 - (ty @4.11-4.18 (name "Loading")) - (ty @4.20-4.28 (name "Complete")) - (ty @4.30-4.36 (name "Failed")))) + (tag_name @4.11-4.18 (name "Loading")) + (tag_name @4.20-4.28 (name "Complete")) + (tag_name @4.30-4.36 (name "Failed")))) (s-alias-decl @7.1-7.55 (ty-header @7.1-7.7 (name "Result")) (ty-tag-union @7.10-7.55 - (ty-apply @7.11-7.23 (symbol "Success") - (ty @7.19-7.22 (name "Str"))) - (ty-apply @7.25-7.35 (symbol "Error") - (ty @7.31-7.34 (name "Str"))) - (ty-apply @7.37-7.54 (symbol "Warning") - (ty @7.45-7.48 (name "Str")) - (ty @7.50-7.53 (name "I32"))))) + (tag_name @7.11-7.23 (name "Success")) + (tag_name @7.25-7.35 (name "Error")) + (tag_name @7.37-7.54 (name "Warning")))) (s-alias-decl @10.1-10.50 (ty-header @10.1-10.9 (name "Response")) (ty-tag-union @10.12-10.50 - (ty-apply @10.13-10.23 (symbol "Ok") - (ty @10.16-10.22 (name "Result"))) - (ty @10.25-10.37 (name "NetworkError")) - (ty @10.39-10.49 (name "ParseError")))) + (tag_name @10.13-10.23 (name "Ok")) + (tag_name @10.25-10.37 (name "NetworkError")) + (tag_name @10.39-10.49 (name "ParseError")))) (s-alias-decl @13.1-13.52 (ty-header @13.1-13.10 (name "UserState")) (ty-tag-union @13.13-13.52 - (ty-apply @13.14-13.25 (symbol "Active") - (ty @13.21-13.24 (name "Str"))) - (ty @13.27-13.35 (name "Inactive")) - (ty-apply @13.37-13.51 (symbol "Suspended") - (ty @13.47-13.50 (name "Str"))))) + (tag_name @13.14-13.25 (name "Active")) + (tag_name @13.27-13.35 (name "Inactive")) + (tag_name @13.37-13.51 (name "Suspended")))) (s-alias-decl @14.1-14.58 (ty-header @14.1-14.16 (name "ConnectionState")) (ty-tag-union @14.19-14.58 - (ty @14.20-14.26 (name "Active")) - (ty @14.28-14.40 (name "Disconnected")) - (ty-apply @14.42-14.57 (symbol "Connecting") - (ty @14.53-14.56 (name "Str")))))) + (tag_name @14.20-14.26 (name "Active")) + (tag_name @14.28-14.40 (name "Disconnected")) + (tag_name @14.42-14.57 (name "Connecting"))))) ~~~ # TYPES ~~~clojure (inferred-types (defs - (patt @18.1-18.14 (type "Result -> Str")) + (patt @18.1-18.14 (type "Result(_a, _b) -> Str")) (patt @22.1-22.15 (type "Response -> Str")) (patt @24.1-24.6 (type "_arg -> {}"))) (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 @4.1-4.37 (type "Status") (ty-header @4.1-4.7 (name "Status"))) (alias @7.1-7.55 (type "Result") @@ -260,7 +272,7 @@ NO CHANGE (alias @14.1-14.58 (type "ConnectionState") (ty-header @14.1-14.16 (name "ConnectionState")))) (expressions - (expr @18.17-18.38 (type "Result -> Str")) + (expr @18.17-18.38 (type "Result(_a, _b) -> Str")) (expr @22.18-22.39 (type "Response -> Str")) (expr @24.9-24.15 (type "_arg -> {}")))) ~~~ diff --git a/test/snapshots/type_two_variables.md b/test/snapshots/type_two_variables.md index bcffd08ce3..c9e2ba7e74 100644 --- a/test/snapshots/type_two_variables.md +++ b/test/snapshots/type_two_variables.md @@ -118,7 +118,7 @@ NO CHANGE ~~~clojure (inferred-types (defs - (patt @4.1-4.5 (type "(Error, Error) -> (Error, Error)")) + (patt @4.1-4.5 (type "(a, b) -> (b, a)")) (patt @6.1-6.6 (type "_arg -> {}"))) (type_decls (nominal @1.1-1.1 (type "Bool") @@ -129,6 +129,6 @@ NO CHANGE (ty-rigid-var @1.1-1.1 (name "ok")) (ty-rigid-var @1.1-1.1 (name "err")))))) (expressions - (expr @4.8-4.23 (type "(Error, Error) -> (Error, Error)")) + (expr @4.8-4.23 (type "(a, b) -> (b, a)")) (expr @6.9-6.15 (type "_arg -> {}")))) ~~~ diff --git a/test/snapshots/type_undeclared_usage.md b/test/snapshots/type_undeclared_usage.md index 316d9b6bb3..efc9518d55 100644 --- a/test/snapshots/type_undeclared_usage.md +++ b/test/snapshots/type_undeclared_usage.md @@ -136,11 +136,24 @@ AnotherType : SomeModule.MissingType (annotation @6.1-6.13 (declared-type (ty-fn @5.16-5.39 (effectful false) - (ty @5.16-5.32 (name "UndeclaredResult")) - (ty @5.36-5.39 (name "Str")))))) + (ty-malformed @5.16-5.32) + (ty-lookup @5.36-5.39 (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")))) (s-alias-decl @3.1-3.21 (ty-header @3.1-3.7 (name "MyType")) - (ty @3.10-3.21 (name "UnknownType"))) + (ty-malformed @3.10-3.21)) (s-alias-decl @10.1-10.37 (ty-header @10.1-10.12 (name "AnotherType")) (ty-malformed @10.15-10.37))) @@ -151,9 +164,16 @@ AnotherType : SomeModule.MissingType (defs (patt @6.1-6.13 (type "Error -> Str"))) (type_decls - (alias @3.1-3.21 (type "Error") + (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.21 (type "MyType") (ty-header @3.1-3.7 (name "MyType"))) - (alias @10.1-10.37 (type "Error") + (alias @10.1-10.37 (type "AnotherType") (ty-header @10.1-10.12 (name "AnotherType")))) (expressions (expr @6.16-8.2 (type "Error -> Str")))) diff --git a/test/snapshots/type_var_annotation_body_connection.md b/test/snapshots/type_var_annotation_body_connection.md index 534b00e459..465a55fb27 100644 --- a/test/snapshots/type_var_annotation_body_connection.md +++ b/test/snapshots/type_var_annotation_body_connection.md @@ -102,14 +102,27 @@ main! = |_| {} (annotation @4.1-4.9 (declared-type (ty-fn @3.12-3.18 (effectful false) - (ty-var @3.12-3.13 (name "a")) - (ty-var @3.17-3.18 (name "a")))))) + (ty-rigid-var @3.12-3.13 (name "a")) + (ty-rigid-var @3.12-3.13 (name "a")))))) (d-let (p-assign @10.1-10.6 (ident "main!")) (e-lambda @10.9-10.15 (args (p-underscore @10.10-10.11)) - (e-empty_record @10.13-10.15)))) + (e-empty_record @10.13-10.15))) + (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 @@ -117,6 +130,14 @@ main! = |_| {} (defs (patt @4.1-4.9 (type "a -> a")) (patt @10.1-10.6 (type "_arg -> {}"))) + (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.12-8.2 (type "a -> a")) (expr @10.9-10.15 (type "_arg -> {}")))) diff --git a/test/snapshots/type_var_collision_simple.md b/test/snapshots/type_var_collision_simple.md index f40b33a0a6..8b4f9ea2c4 100644 --- a/test/snapshots/type_var_collision_simple.md +++ b/test/snapshots/type_var_collision_simple.md @@ -167,13 +167,13 @@ main! = |_| { (can-ir (d-let (p-assign @4.1-4.2 (ident "a")) - (e-int @4.5-4.6 (value "1"))) + (e-num @4.5-4.6 (value "1"))) (d-let (p-assign @5.1-5.2 (ident "b")) - (e-int @5.5-5.6 (value "2"))) + (e-num @5.5-5.6 (value "2"))) (d-let (p-assign @6.1-6.2 (ident "c")) - (e-int @6.5-6.6 (value "3"))) + (e-num @6.5-6.6 (value "3"))) (d-let (p-assign @9.1-9.9 (ident "identity")) (e-lambda @9.12-9.17 @@ -205,10 +205,10 @@ main! = |_| { (e-closure @17.9-23.2 (captures (capture @9.1-9.9 (ident "identity")) - (capture @4.1-4.2 (ident "a")) - (capture @5.1-5.2 (ident "b")) (capture @12.1-12.10 (ident "identity2")) (capture @15.1-15.5 (ident "pair")) + (capture @5.1-5.2 (ident "b")) + (capture @4.1-4.2 (ident "a")) (capture @6.1-6.2 (ident "c"))) (e-lambda @17.9-23.2 (args @@ -217,21 +217,15 @@ main! = |_| { (s-let @18.5-18.27 (p-assign @18.5-18.12 (ident "result1")) (e-call @18.15-18.27 - (e-lookup-local @18.15-18.23 - (p-assign @9.1-9.9 (ident "identity"))) - (e-int @18.24-18.26 (value "42")))) + (e-num @18.24-18.26 (value "42")))) (s-let @19.5-19.33 (p-assign @19.5-19.12 (ident "result2")) (e-call @19.15-19.33 - (e-lookup-local @19.15-19.24 - (p-assign @12.1-12.10 (ident "identity2"))) (e-string @19.25-19.32 (e-literal @19.26-19.31 (string "hello"))))) (s-let @20.5-20.37 (p-assign @20.5-20.12 (ident "result3")) (e-call @20.15-20.37 - (e-lookup-local @20.15-20.19 - (p-assign @15.1-15.5 (ident "pair"))) (e-lookup-local @20.20-20.27 (p-assign @18.5-18.12 (ident "result1"))) (e-lookup-local @20.29-20.36 @@ -243,7 +237,20 @@ main! = |_| { (e-lookup-local @22.9-22.10 (p-assign @5.1-5.2 (ident "b")))) (e-lookup-local @22.13-22.14 - (p-assign @6.1-6.2 (ident "c"))))))))) + (p-assign @6.1-6.2 (ident "c")))))))) + (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 @@ -252,16 +259,24 @@ main! = |_| { (patt @4.1-4.2 (type "Num(_size)")) (patt @5.1-5.2 (type "Num(_size)")) (patt @6.1-6.2 (type "Num(_size)")) - (patt @9.1-9.9 (type "_arg -> _ret")) - (patt @12.1-12.10 (type "_arg -> _ret")) - (patt @15.1-15.5 (type "_arg, _arg2 -> (_field, _field2)")) + (patt @9.1-9.9 (type "d -> d")) + (patt @12.1-12.10 (type "d -> d")) + (patt @15.1-15.5 (type "d, e -> (d, e)")) (patt @17.1-17.6 (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.6 (type "Num(_size)")) (expr @6.5-6.6 (type "Num(_size)")) - (expr @9.12-9.17 (type "_arg -> _ret")) - (expr @12.13-12.18 (type "_arg -> _ret")) - (expr @15.8-15.39 (type "_arg, _arg2 -> (_field, _field2)")) + (expr @9.12-9.17 (type "d -> d")) + (expr @12.13-12.18 (type "d -> d")) + (expr @15.8-15.39 (type "d, e -> (d, e)")) (expr @17.9-23.2 (type "_arg -> Num(_size)")))) ~~~ diff --git a/test/snapshots/type_var_multiple.md b/test/snapshots/type_var_multiple.md index 2632245c73..c93016f431 100644 --- a/test/snapshots/type_var_multiple.md +++ b/test/snapshots/type_var_multiple.md @@ -144,7 +144,7 @@ main! = |_| {} ~~~clojure (inferred-types (defs - (patt @5.1-5.5 (type "(Error, Error) -> (Error, Error)")) + (patt @5.1-5.5 (type "(a, b) -> (b, a)")) (patt @10.1-10.6 (type "_arg -> {}"))) (type_decls (nominal @1.1-1.1 (type "Bool") @@ -155,6 +155,6 @@ main! = |_| {} (ty-rigid-var @1.1-1.1 (name "ok")) (ty-rigid-var @1.1-1.1 (name "err")))))) (expressions - (expr @5.8-8.2 (type "(Error, Error) -> (Error, Error)")) + (expr @5.8-8.2 (type "(a, b) -> (b, a)")) (expr @10.9-10.15 (type "_arg -> {}")))) ~~~ diff --git a/test/snapshots/type_var_name_avoids_collision.md b/test/snapshots/type_var_name_avoids_collision.md index 0ade149544..c8756527a3 100644 --- a/test/snapshots/type_var_name_avoids_collision.md +++ b/test/snapshots/type_var_name_avoids_collision.md @@ -402,7 +402,7 @@ main! = |_| { (can-ir (d-let (p-assign @4.1-4.2 (ident "a")) - (e-int @4.5-4.7 (value "42"))) + (e-num @4.5-4.7 (value "42"))) (d-let (p-assign @7.1-7.9 (ident "identity")) (e-lambda @7.12-7.17 @@ -446,67 +446,67 @@ main! = |_| { (p-assign @20.19-20.25 (ident "second"))))))) (d-let (p-assign @23.1-23.2 (ident "f")) - (e-int @23.5-23.6 (value "1"))) + (e-num @23.5-23.6 (value "1"))) (d-let (p-assign @24.1-24.2 (ident "g")) - (e-int @24.5-24.6 (value "2"))) + (e-num @24.5-24.6 (value "2"))) (d-let (p-assign @25.1-25.2 (ident "h")) - (e-int @25.5-25.6 (value "3"))) + (e-num @25.5-25.6 (value "3"))) (d-let (p-assign @26.1-26.2 (ident "i")) - (e-int @26.5-26.6 (value "4"))) + (e-num @26.5-26.6 (value "4"))) (d-let (p-assign @27.1-27.2 (ident "j")) - (e-int @27.5-27.6 (value "5"))) + (e-num @27.5-27.6 (value "5"))) (d-let (p-assign @28.1-28.2 (ident "k")) - (e-int @28.5-28.6 (value "6"))) + (e-num @28.5-28.6 (value "6"))) (d-let (p-assign @29.1-29.2 (ident "l")) - (e-int @29.5-29.6 (value "7"))) + (e-num @29.5-29.6 (value "7"))) (d-let (p-assign @30.1-30.2 (ident "m")) - (e-int @30.5-30.6 (value "8"))) + (e-num @30.5-30.6 (value "8"))) (d-let (p-assign @31.1-31.2 (ident "n")) - (e-int @31.5-31.6 (value "9"))) + (e-num @31.5-31.6 (value "9"))) (d-let (p-assign @32.1-32.2 (ident "o")) - (e-int @32.5-32.7 (value "10"))) + (e-num @32.5-32.7 (value "10"))) (d-let (p-assign @33.1-33.2 (ident "p")) - (e-int @33.5-33.7 (value "11"))) + (e-num @33.5-33.7 (value "11"))) (d-let (p-assign @34.1-34.2 (ident "q")) - (e-int @34.5-34.7 (value "12"))) + (e-num @34.5-34.7 (value "12"))) (d-let (p-assign @35.1-35.2 (ident "r")) - (e-int @35.5-35.7 (value "13"))) + (e-num @35.5-35.7 (value "13"))) (d-let (p-assign @36.1-36.2 (ident "s")) - (e-int @36.5-36.7 (value "14"))) + (e-num @36.5-36.7 (value "14"))) (d-let (p-assign @37.1-37.2 (ident "t")) - (e-int @37.5-37.7 (value "15"))) + (e-num @37.5-37.7 (value "15"))) (d-let (p-assign @38.1-38.2 (ident "u")) - (e-int @38.5-38.7 (value "16"))) + (e-num @38.5-38.7 (value "16"))) (d-let (p-assign @39.1-39.2 (ident "v")) - (e-int @39.5-39.7 (value "17"))) + (e-num @39.5-39.7 (value "17"))) (d-let (p-assign @40.1-40.2 (ident "w")) - (e-int @40.5-40.7 (value "18"))) + (e-num @40.5-40.7 (value "18"))) (d-let (p-assign @41.1-41.2 (ident "x")) - (e-int @41.5-41.7 (value "19"))) + (e-num @41.5-41.7 (value "19"))) (d-let (p-assign @42.1-42.2 (ident "y")) - (e-int @42.5-42.7 (value "20"))) + (e-num @42.5-42.7 (value "20"))) (d-let (p-assign @43.1-43.2 (ident "z")) - (e-int @43.5-43.7 (value "21"))) + (e-num @43.5-43.7 (value "21"))) (d-let (p-assign @46.1-46.19 (ident "yetAnotherIdentity")) (e-lambda @46.22-46.31 @@ -516,10 +516,10 @@ main! = |_| { (p-assign @46.23-46.26 (ident "arg"))))) (d-let (p-assign @49.1-49.3 (ident "aa")) - (e-int @49.6-49.9 (value "100"))) + (e-num @49.6-49.9 (value "100"))) (d-let (p-assign @50.1-50.3 (ident "ab")) - (e-int @50.6-50.9 (value "200"))) + (e-num @50.6-50.9 (value "200"))) (d-let (p-assign @53.1-53.14 (ident "finalIdentity")) (e-lambda @53.17-53.30 @@ -532,12 +532,12 @@ main! = |_| { (e-closure @55.9-65.2 (captures (capture @16.1-16.16 (ident "anotherIdentity")) + (capture @23.1-23.2 (ident "f")) + (capture @4.1-4.2 (ident "a")) (capture @53.1-53.14 (ident "finalIdentity")) - (capture @46.1-46.19 (ident "yetAnotherIdentity")) (capture @7.1-7.9 (ident "identity")) (capture @20.1-20.8 (ident "combine")) - (capture @4.1-4.2 (ident "a")) - (capture @23.1-23.2 (ident "f"))) + (capture @46.1-46.19 (ident "yetAnotherIdentity"))) (e-lambda @55.9-65.2 (args (p-underscore @55.10-55.11)) @@ -545,21 +545,15 @@ main! = |_| { (s-let @57.5-57.28 (p-assign @57.5-57.12 (ident "result1")) (e-call @57.15-57.28 - (e-lookup-local @57.15-57.23 - (p-assign @7.1-7.9 (ident "identity"))) - (e-int @57.24-57.27 (value "123")))) + (e-num @57.24-57.27 (value "123")))) (s-let @58.5-58.38 (p-assign @58.5-58.12 (ident "result2")) (e-call @58.15-58.38 - (e-lookup-local @58.15-58.30 - (p-assign @16.1-16.16 (ident "anotherIdentity"))) (e-string @58.31-58.37 (e-literal @58.32-58.36 (string "test"))))) (s-let @59.5-59.40 (p-assign @59.5-59.12 (ident "result3")) (e-call @59.15-59.40 - (e-lookup-local @59.15-59.22 - (p-assign @20.1-20.8 (ident "combine"))) (e-lookup-local @59.23-59.30 (p-assign @57.5-57.12 (ident "result1"))) (e-lookup-local @59.32-59.39 @@ -567,34 +561,43 @@ main! = |_| { (s-let @60.5-60.39 (p-assign @60.5-60.12 (ident "result4")) (e-call @60.15-60.39 - (e-lookup-local @60.15-60.33 - (p-assign @46.1-46.19 (ident "yetAnotherIdentity"))) (e-nominal @60.34-60.38 (nominal "Bool") (e-tag @60.34-60.38 (name "True"))))) (s-let @61.5-61.34 (p-assign @61.5-61.12 (ident "result5")) (e-call @61.15-61.34 - (e-lookup-local @61.15-61.28 - (p-assign @53.1-53.14 (ident "finalIdentity"))) (e-dec-small @61.29-61.33 (numerator "314") (denominator-power-of-ten "2") (value "3.14")))) (e-binop @64.5-64.10 (op "add") (e-lookup-local @64.5-64.6 (p-assign @4.1-4.2 (ident "a"))) (e-lookup-local @64.9-64.10 - (p-assign @23.1-23.2 (ident "f"))))))))) + (p-assign @23.1-23.2 (ident "f")))))))) + (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.2 (type "Num(_size)")) - (patt @7.1-7.9 (type "_arg2 -> _ret")) + (patt @7.1-7.9 (type "ac -> ac")) (patt @10.1-10.2 (type "Str")) - (patt @11.1-11.2 (type "Frac(_size)")) + (patt @11.1-11.2 (type "Num(Frac(_size))")) (patt @12.1-12.2 (type "Bool")) (patt @13.1-13.2 (type "Bool")) - (patt @16.1-16.16 (type "_arg2 -> _ret")) - (patt @20.1-20.8 (type "_arg2, _arg3 -> (_field, _field2)")) + (patt @16.1-16.16 (type "ac -> ac")) + (patt @20.1-20.8 (type "ac, ad -> (ac, ad)")) (patt @23.1-23.2 (type "Num(_size)")) (patt @24.1-24.2 (type "Num(_size)")) (patt @25.1-25.2 (type "Num(_size)")) @@ -616,20 +619,28 @@ main! = |_| { (patt @41.1-41.2 (type "Num(_size)")) (patt @42.1-42.2 (type "Num(_size)")) (patt @43.1-43.2 (type "Num(_size)")) - (patt @46.1-46.19 (type "_arg2 -> _ret")) + (patt @46.1-46.19 (type "ac -> ac")) (patt @49.1-49.3 (type "Num(_size)")) (patt @50.1-50.3 (type "Num(_size)")) - (patt @53.1-53.14 (type "_arg2 -> _ret")) + (patt @53.1-53.14 (type "ac -> ac")) (patt @55.1-55.6 (type "_arg2 -> 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.7 (type "Num(_size)")) - (expr @7.12-7.17 (type "_arg2 -> _ret")) + (expr @7.12-7.17 (type "ac -> ac")) (expr @10.5-10.12 (type "Str")) - (expr @11.5-11.9 (type "Frac(_size)")) + (expr @11.5-11.9 (type "Num(Frac(_size))")) (expr @12.5-12.9 (type "Bool")) (expr @13.5-13.10 (type "Bool")) - (expr @16.19-16.24 (type "_arg2 -> _ret")) - (expr @20.11-20.42 (type "_arg2, _arg3 -> (_field, _field2)")) + (expr @16.19-16.24 (type "ac -> ac")) + (expr @20.11-20.42 (type "ac, ad -> (ac, ad)")) (expr @23.5-23.6 (type "Num(_size)")) (expr @24.5-24.6 (type "Num(_size)")) (expr @25.5-25.6 (type "Num(_size)")) @@ -651,9 +662,9 @@ main! = |_| { (expr @41.5-41.7 (type "Num(_size)")) (expr @42.5-42.7 (type "Num(_size)")) (expr @43.5-43.7 (type "Num(_size)")) - (expr @46.22-46.31 (type "_arg2 -> _ret")) + (expr @46.22-46.31 (type "ac -> ac")) (expr @49.6-49.9 (type "Num(_size)")) (expr @50.6-50.9 (type "Num(_size)")) - (expr @53.17-53.30 (type "_arg2 -> _ret")) + (expr @53.17-53.30 (type "ac -> ac")) (expr @55.9-65.2 (type "_arg2 -> Num(_size)")))) ~~~ diff --git a/test/snapshots/type_var_namespace.md b/test/snapshots/type_var_namespace.md index 20653d7570..8b6b3dcf6b 100644 --- a/test/snapshots/type_var_namespace.md +++ b/test/snapshots/type_var_namespace.md @@ -166,18 +166,16 @@ main! = |_| {} (e-block @5.18-14.2 (s-let @7.5-7.14 (p-assign @7.5-7.9 (ident "elem")) - (e-int @7.12-7.14 (value "42"))) + (e-num @7.12-7.14 (value "42"))) (s-let @11.5-11.30 (p-assign @11.5-11.11 (ident "result")) (e-call @11.14-11.30 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @11.25-11.29 (p-assign @5.12-5.16 (ident "list"))))) (s-expr @11.31-11.33 (e-runtime-error (tag "expr_not_canonicalized"))) (s-expr @11.34-11.58 (e-call @11.34-11.58 - (e-runtime-error (tag "ident_not_in_scope")) (e-lookup-local @11.53-11.57 (p-assign @7.5-7.9 (ident "elem"))))) (e-lookup-local @13.5-13.11 @@ -185,15 +183,28 @@ main! = |_| {} (annotation @5.1-5.8 (declared-type (ty-fn @4.11-4.29 (effectful false) - (ty-apply @4.11-4.21 (symbol "List") - (ty-var @4.16-4.20 (name "elem"))) - (ty-var @4.25-4.29 (name "elem")))))) + (ty-apply @4.11-4.21 (name "List") (builtin) + (ty-rigid-var @4.16-4.20 (name "elem"))) + (ty-rigid-var @4.16-4.20 (name "elem")))))) (d-let (p-assign @16.1-16.6 (ident "main!")) (e-lambda @16.9-16.15 (args (p-underscore @16.10-16.11)) - (e-empty_record @16.13-16.15)))) + (e-empty_record @16.13-16.15))) + (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 @@ -201,6 +212,14 @@ main! = |_| {} (defs (patt @5.1-5.8 (type "List(elem) -> elem")) (patt @16.1-16.6 (type "_arg -> {}"))) + (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.11-14.2 (type "List(elem) -> elem")) (expr @16.9-16.15 (type "_arg -> {}")))) diff --git a/test/snapshots/type_var_shadowing.md b/test/snapshots/type_var_shadowing.md index 833ca40c4d..5046f5f08c 100644 --- a/test/snapshots/type_var_shadowing.md +++ b/test/snapshots/type_var_shadowing.md @@ -114,21 +114,32 @@ main! = |_| {} (e-lookup-local @8.17-8.18 (p-assign @8.14-8.15 (ident "y"))))) (e-call @10.5-10.13 - (e-lookup-local @10.5-10.10 - (p-assign @8.5-8.10 (ident "inner"))) (e-lookup-local @10.11-10.12 (p-assign @5.10-5.11 (ident "x")))))) (annotation @5.1-5.6 (declared-type (ty-fn @4.9-4.15 (effectful false) - (ty-var @4.9-4.10 (name "a")) - (ty-var @4.14-4.15 (name "a")))))) + (ty-rigid-var @4.9-4.10 (name "a")) + (ty-rigid-var @4.9-4.10 (name "a")))))) (d-let (p-assign @13.1-13.6 (ident "main!")) (e-lambda @13.9-13.15 (args (p-underscore @13.10-13.11)) - (e-empty_record @13.13-13.15)))) + (e-empty_record @13.13-13.15))) + (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 @@ -136,6 +147,14 @@ main! = |_| {} (defs (patt @5.1-5.6 (type "a -> a")) (patt @13.1-13.6 (type "_arg -> {}"))) + (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.9-11.2 (type "a -> a")) (expr @13.9-13.15 (type "_arg -> {}")))) diff --git a/test/snapshots/type_var_shadowing_inner.md b/test/snapshots/type_var_shadowing_inner.md index 62e1b8bf56..7068de4381 100644 --- a/test/snapshots/type_var_shadowing_inner.md +++ b/test/snapshots/type_var_shadowing_inner.md @@ -110,21 +110,32 @@ main! = |_| {} (e-lookup-local @6.17-6.18 (p-assign @6.14-6.15 (ident "y"))))) (e-call @8.5-8.13 - (e-lookup-local @8.5-8.10 - (p-assign @6.5-6.10 (ident "inner"))) (e-lookup-local @8.11-8.12 (p-assign @4.10-4.11 (ident "x")))))) (annotation @4.1-4.6 (declared-type (ty-fn @3.9-3.15 (effectful false) - (ty-var @3.9-3.10 (name "a")) - (ty-var @3.14-3.15 (name "a")))))) + (ty-rigid-var @3.9-3.10 (name "a")) + (ty-rigid-var @3.9-3.10 (name "a")))))) (d-let (p-assign @11.1-11.6 (ident "main!")) (e-lambda @11.9-11.15 (args (p-underscore @11.10-11.11)) - (e-empty_record @11.13-11.15)))) + (e-empty_record @11.13-11.15))) + (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 @@ -132,6 +143,14 @@ main! = |_| {} (defs (patt @4.1-4.6 (type "a -> a")) (patt @11.1-11.6 (type "_arg -> {}"))) + (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-9.2 (type "a -> a")) (expr @11.9-11.15 (type "_arg -> {}")))) diff --git a/test/snapshots/type_var_underscore_conventions.md b/test/snapshots/type_var_underscore_conventions.md index 7aa8adf9bb..8d0e5ec4b8 100644 --- a/test/snapshots/type_var_underscore_conventions.md +++ b/test/snapshots/type_var_underscore_conventions.md @@ -104,12 +104,12 @@ ending_underscore = |list| "default" ``` ^^^^^^^^^ -The type annotation says it should have the type: - _elem__ - -But here it's being used as: +It has the type: _Str_ +But the type annotation says it should have the type: + _elem__ + # TOKENS ~~~zig KwApp(1:1-1:4),OpenSquare(1:5-1:6),LowerIdent(1:6-1:10),CloseSquare(1:10-1:11),OpenCurly(1:12-1:13),LowerIdent(1:14-1:16),OpColon(1:16-1:17),KwPlatform(1:18-1:26),StringStart(1:27-1:28),StringPart(1:28-1:53),StringEnd(1:53-1:54),CloseCurly(1:55-1:56), @@ -231,9 +231,9 @@ NO CHANGE (annotation @5.1-5.11 (declared-type (ty-fn @4.14-4.31 (effectful false) - (ty-apply @4.14-4.24 (symbol "List") - (ty-var @4.19-4.23 (name "elem"))) - (ty @4.28-4.31 (name "Str")))))) + (ty-apply @4.14-4.24 (name "List") (builtin) + (ty-rigid-var @4.19-4.23 (name "elem"))) + (ty-lookup @4.28-4.31 (name "Str") (builtin)))))) (d-let (p-assign @9.1-9.18 (ident "ending_underscore")) (e-lambda @9.21-9.37 @@ -244,9 +244,9 @@ NO CHANGE (annotation @9.1-9.18 (declared-type (ty-fn @8.21-8.41 (effectful false) - (ty-apply @8.21-8.32 (symbol "List") - (ty-var @8.26-8.31 (name "elem_"))) - (ty-var @8.36-8.41 (name "elem_")))))) + (ty-apply @8.21-8.32 (name "List") (builtin) + (ty-rigid-var @8.26-8.31 (name "elem_"))) + (ty-rigid-var @8.26-8.31 (name "elem_")))))) (d-let (p-assign @13.1-13.13 (ident "combo_single")) (e-lambda @13.16-13.27 @@ -257,9 +257,9 @@ NO CHANGE (annotation @13.1-13.13 (declared-type (ty-fn @12.16-12.33 (effectful false) - (ty-apply @12.16-12.26 (symbol "List") - (ty-var @12.21-12.25 (name "bad_"))) - (ty @12.30-12.33 (name "Str")))))) + (ty-apply @12.16-12.26 (name "List") (builtin) + (ty-rigid-var @12.21-12.25 (name "bad_"))) + (ty-lookup @12.30-12.33 (name "Str") (builtin)))))) (d-let (p-assign @17.1-17.13 (ident "valid_single")) (e-lambda @17.16-17.27 @@ -270,9 +270,9 @@ NO CHANGE (annotation @17.1-17.13 (declared-type (ty-fn @16.16-16.34 (effectful false) - (ty-apply @16.16-16.27 (symbol "List") - (ty-var @16.21-16.26 (name "_elem"))) - (ty @16.31-16.34 (name "Str")))))) + (ty-apply @16.16-16.27 (name "List") (builtin) + (ty-rigid-var @16.21-16.26 (name "_elem"))) + (ty-lookup @16.31-16.34 (name "Str") (builtin)))))) (d-let (p-assign @20.1-20.12 (ident "valid_multi")) (e-lambda @20.15-20.22 @@ -285,16 +285,29 @@ NO CHANGE (annotation @20.1-20.12 (declared-type (ty-fn @19.15-19.33 (effectful false) - (ty-var @19.15-19.19 (name "elem")) - (ty-apply @19.23-19.33 (symbol "List") - (ty-var @19.28-19.32 (name "elem"))))))) + (ty-rigid-var @19.15-19.19 (name "elem")) + (ty-apply @19.23-19.33 (name "List") (builtin) + (ty-rigid-var @19.15-19.19 (name "elem"))))))) (d-let (p-assign @22.1-22.5 (ident "main")) (e-lambda @22.8-22.18 (args (p-assign @22.9-22.10 (ident "x"))) (e-string @22.12-22.18 - (e-literal @22.13-22.17 (string "done")))))) + (e-literal @22.13-22.17 (string "done"))))) + (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 @@ -306,6 +319,14 @@ NO CHANGE (patt @17.1-17.13 (type "List(_elem) -> Str")) (patt @20.1-20.12 (type "elem -> List(elem)")) (patt @22.1-22.5 (type "_arg -> 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 @5.14-5.25 (type "List(elem) -> Str")) (expr @9.21-9.37 (type "List(elem_) -> Error")) diff --git a/test/snapshots/unary_minus_double_negative.md b/test/snapshots/unary_minus_double_negative.md index bc789a92a7..d642d81ff8 100644 --- a/test/snapshots/unary_minus_double_negative.md +++ b/test/snapshots/unary_minus_double_negative.md @@ -36,14 +36,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-unary-minus @1.6-1.11 - (e-unary-minus @1.8-1.10 - (e-lookup-local @1.9-1.10 - (p-assign @1.3-1.4 (ident "x")))))) - (e-int @1.13-1.14 (value "5"))) + (e-num @1.13-1.14 (value "5"))) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/unary_minus_lambda_parameter.md b/test/snapshots/unary_minus_lambda_parameter.md index 6dfca7d2e8..7327000656 100644 --- a/test/snapshots/unary_minus_lambda_parameter.md +++ b/test/snapshots/unary_minus_lambda_parameter.md @@ -34,13 +34,7 @@ NO CHANGE # CANONICALIZE ~~~clojure (e-call @1.1-1.12 - (e-lambda @1.2-1.8 - (args - (p-assign @1.3-1.4 (ident "x"))) - (e-unary-minus @1.6-1.8 - (e-lookup-local @1.7-1.8 - (p-assign @1.3-1.4 (ident "x"))))) - (e-int @1.10-1.11 (value "5"))) + (e-num @1.10-1.11 (value "5"))) ~~~ # TYPES ~~~clojure diff --git a/test/snapshots/unused_vars_block.md b/test/snapshots/unused_vars_block.md index bc9eea50a9..d51972f9e8 100644 --- a/test/snapshots/unused_vars_block.md +++ b/test/snapshots/unused_vars_block.md @@ -147,31 +147,52 @@ main! = |_| { (e-block @3.13-21.2 (s-let @5.5-5.20 (p-assign @5.5-5.15 (ident "unused_var")) - (e-int @5.18-5.20 (value "42"))) + (e-num @5.18-5.20 (value "42"))) (s-let @8.5-8.19 (p-assign @8.5-8.13 (ident "used_var")) - (e-int @8.16-8.19 (value "100"))) + (e-num @8.16-8.19 (value "100"))) (s-let @11.5-11.29 (p-assign @11.5-11.19 (ident "another_unused")) (e-string @11.22-11.29 (e-literal @11.23-11.28 (string "hello")))) (s-let @14.5-16.10 (p-assign @14.5-14.13 (ident "_ignored")) - (e-int @16.7-16.10 (value "999"))) + (e-num @16.7-16.10 (value "999"))) (s-let @19.5-19.27 (p-assign @19.5-19.11 (ident "result")) (e-binop @19.14-19.27 (op "add") (e-lookup-local @19.14-19.22 (p-assign @8.5-8.13 (ident "used_var"))) - (e-int @19.25-19.27 (value "10")))) + (e-num @19.25-19.27 (value "10")))) (e-lookup-local @20.5-20.11 - (p-assign @19.5-19.11 (ident "result"))))))) + (p-assign @19.5-19.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.6 (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 @3.9-21.2 (type "_arg -> Num(_size)")))) ~~~ diff --git a/test/snapshots/unused_vars_simple.md b/test/snapshots/unused_vars_simple.md index b021b02bd3..588388f976 100644 --- a/test/snapshots/unused_vars_simple.md +++ b/test/snapshots/unused_vars_simple.md @@ -179,7 +179,7 @@ main! = |_| { (e-lambda @4.18-4.24 (args (p-assign @4.19-4.20 (ident "x"))) - (e-int @4.22-4.24 (value "42")))) + (e-num @4.22-4.24 (value "42")))) (d-let (p-assign @7.1-7.16 (ident "used_underscore")) (e-lambda @7.19-7.34 @@ -192,7 +192,7 @@ main! = |_| { (e-lambda @10.21-10.35 (args (p-assign @10.22-10.30 (ident "_ignored"))) - (e-int @10.32-10.35 (value "100")))) + (e-num @10.32-10.35 (value "100")))) (d-let (p-assign @13.1-13.13 (ident "used_regular")) (e-lambda @13.16-13.35 @@ -201,7 +201,7 @@ main! = |_| { (e-binop @13.25-13.35 (op "add") (e-lookup-local @13.25-13.31 (p-assign @13.17-13.23 (ident "number"))) - (e-int @13.34-13.35 (value "1"))))) + (e-num @13.34-13.35 (value "1"))))) (d-let (p-assign @15.1-15.6 (ident "main!")) (e-closure @15.9-21.2 @@ -217,27 +217,19 @@ main! = |_| { (s-let @16.5-16.26 (p-assign @16.5-16.6 (ident "a")) (e-call @16.9-16.26 - (e-lookup-local @16.9-16.23 - (p-assign @4.1-4.15 (ident "unused_regular"))) - (e-int @16.24-16.25 (value "5")))) + (e-num @16.24-16.25 (value "5")))) (s-let @17.5-17.28 (p-assign @17.5-17.6 (ident "b")) (e-call @17.9-17.28 - (e-lookup-local @17.9-17.24 - (p-assign @7.1-7.16 (ident "used_underscore"))) - (e-int @17.25-17.27 (value "10")))) + (e-num @17.25-17.27 (value "10")))) (s-let @18.5-18.30 (p-assign @18.5-18.6 (ident "c")) (e-call @18.9-18.30 - (e-lookup-local @18.9-18.26 - (p-assign @10.1-10.18 (ident "unused_underscore"))) - (e-int @18.27-18.29 (value "15")))) + (e-num @18.27-18.29 (value "15")))) (s-let @19.5-19.25 (p-assign @19.5-19.6 (ident "d")) (e-call @19.9-19.25 - (e-lookup-local @19.9-19.21 - (p-assign @13.1-13.13 (ident "used_regular"))) - (e-int @19.22-19.24 (value "20")))) + (e-num @19.22-19.24 (value "20")))) (e-binop @20.5-20.18 (op "add") (e-binop @20.5-20.14 (op "add") (e-binop @20.5-20.10 (op "add") @@ -248,20 +240,41 @@ main! = |_| { (e-lookup-local @20.13-20.14 (p-assign @18.5-18.6 (ident "c")))) (e-lookup-local @20.17-20.18 - (p-assign @19.5-19.6 (ident "d"))))))))) + (p-assign @19.5-19.6 (ident "d")))))))) + (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.15 (type "_arg -> Num(_size)")) - (patt @7.1-7.16 (type "_arg -> _ret")) + (patt @7.1-7.16 (type "e -> e")) (patt @10.1-10.18 (type "_arg -> Num(_size)")) (patt @13.1-13.13 (type "Num(_size) -> Num(_size2)")) (patt @15.1-15.6 (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.18-4.24 (type "_arg -> Num(_size)")) - (expr @7.19-7.34 (type "_arg -> _ret")) + (expr @7.19-7.34 (type "e -> e")) (expr @10.21-10.35 (type "_arg -> Num(_size)")) (expr @13.16-13.35 (type "Num(_size) -> Num(_size2)")) (expr @15.9-21.2 (type "_arg -> Num(_size)")))) diff --git a/test/snapshots/where_clause/where_clauses_1.md b/test/snapshots/where_clause/where_clauses_1.md index 6282055a1e..4a395ddbc5 100644 --- a/test/snapshots/where_clause/where_clauses_1.md +++ b/test/snapshots/where_clause/where_clauses_1.md @@ -92,31 +92,51 @@ 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-6.24 (ty-header @3.1-3.16 (name "Hash") (ty-args - (ty-var @3.6-3.7 (name "a")) - (ty-var @3.9-3.15 (name "hasher")))) - (ty-var @3.19-3.20 (name "a"))) + (ty-rigid-var @3.6-3.7 (name "a")) + (ty-rigid-var @3.9-3.15 (name "hasher")))) + (ty-rigid-var @3.6-3.7 (name "a"))) (s-alias-decl @8.1-8.53 (ty-header @8.1-8.10 (name "Decode") (ty-args - (ty-var @8.8-8.9 (name "a")))) - (ty-var @8.13-8.14 (name "a")))) + (ty-rigid-var @8.8-8.9 (name "a")))) + (ty-rigid-var @8.8-8.9 (name "a")))) ~~~ # 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-6.24 (type "Hash(a, hasher)") (ty-header @3.1-3.16 (name "Hash") (ty-args - (ty-var @3.6-3.7 (name "a")) - (ty-var @3.9-3.15 (name "hasher"))))) + (ty-rigid-var @3.6-3.7 (name "a")) + (ty-rigid-var @3.9-3.15 (name "hasher"))))) (alias @8.1-8.53 (type "Decode(a)") (ty-header @8.1-8.10 (name "Decode") (ty-args - (ty-var @8.8-8.9 (name "a")))))) + (ty-rigid-var @8.8-8.9 (name "a")))))) (expressions)) ~~~ diff --git a/test/snapshots/where_clause/where_clauses_10.md b/test/snapshots/where_clause/where_clauses_10.md index 8a897b04b2..12c8120d18 100644 --- a/test/snapshots/where_clause/where_clauses_10.md +++ b/test/snapshots/where_clause/where_clauses_10.md @@ -82,16 +82,29 @@ 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-import @3.1-3.32 (module "Decode") (exposes (exposed (name "Decode") (wildcard false)))) (s-type-anno @5.1-9.21 (name "decodeThings") (ty-fn @7.3-7.28 (effectful false) - (ty-apply @7.3-7.17 (symbol "List") - (ty-apply @7.8-7.16 (symbol "List") - (ty @7.13-7.15 (name "U8")))) - (ty-apply @7.21-7.28 (symbol "List") - (ty-var @7.26-7.27 (name "a")))) + (ty-apply @7.3-7.17 (name "List") (builtin) + (ty-apply @7.8-7.16 (name "List") (builtin) + (ty-lookup @7.13-7.15 (name "U8") (builtin)))) + (ty-apply @7.21-7.28 (name "List") (builtin) + (ty-rigid-var @7.26-7.27 (name "a")))) (where (alias @9.5-9.21 (module-of "a") (ident "Decode")))) (ext-decl @9.5-9.21 (ident "module(a).Decode") (kind "type"))) @@ -100,5 +113,13 @@ NO CHANGE ~~~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)) ~~~ diff --git a/test/snapshots/where_clause/where_clauses_4.md b/test/snapshots/where_clause/where_clauses_4.md index 4af67ba84e..d09f202ebf 100644 --- a/test/snapshots/where_clause/where_clauses_4.md +++ b/test/snapshots/where_clause/where_clauses_4.md @@ -76,21 +76,34 @@ NO CHANGE (annotation @7.1-7.13 (declared-type (ty-fn @5.16-5.41 (effectful false) - (ty-apply @5.16-5.30 (symbol "List") - (ty-apply @5.21-5.29 (symbol "List") - (ty @5.26-5.28 (name "U8")))) - (ty-apply @5.34-5.41 (symbol "List") - (ty-var @5.39-5.40 (name "a"))))))) + (ty-apply @5.16-5.30 (name "List") (builtin) + (ty-apply @5.21-5.29 (name "List") (builtin) + (ty-lookup @5.26-5.28 (name "U8") (builtin)))) + (ty-apply @5.34-5.41 (name "List") (builtin) + (ty-rigid-var @5.39-5.40 (name "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-import @3.1-3.32 (module "Decode") (exposes (exposed (name "Decode") (wildcard false)))) (s-type-anno @5.1-6.24 (name "decodeThings") (ty-fn @5.16-5.41 (effectful false) - (ty-apply @5.16-5.30 (symbol "List") - (ty-apply @5.21-5.29 (symbol "List") - (ty @5.26-5.28 (name "U8")))) - (ty-apply @5.34-5.41 (symbol "List") - (ty-var @5.39-5.40 (name "a")))) + (ty-apply @5.16-5.30 (name "List") (builtin) + (ty-apply @5.21-5.29 (name "List") (builtin) + (ty-lookup @5.26-5.28 (name "U8") (builtin)))) + (ty-apply @5.34-5.41 (name "List") (builtin) + (ty-rigid-var @5.39-5.40 (name "a")))) (where (alias @6.8-6.24 (module-of "a") (ident "Decode")))) (ext-decl @6.8-6.24 (ident "module(a).Decode") (kind "type"))) @@ -99,7 +112,15 @@ NO CHANGE ~~~clojure (inferred-types (defs - (patt @7.1-7.13 (type "List(item) -> List(a)"))) + (patt @7.1-7.13 (type "List(List(Num(Int(Unsigned8)))) -> List(a)"))) + (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 @1.1-1.1 (type "List(item) -> List(a)")))) + (expr @1.1-1.1 (type "List(List(Num(Int(Unsigned8)))) -> List(a)")))) ~~~ diff --git a/test/snapshots/where_clause/where_clauses_7.md b/test/snapshots/where_clause/where_clauses_7.md index 0064c18786..d4cc3c70da 100644 --- a/test/snapshots/where_clause/where_clauses_7.md +++ b/test/snapshots/where_clause/where_clauses_7.md @@ -127,31 +127,51 @@ Decode(a) : a # 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-10.26 (ty-header @3.1-3.16 (name "Hash") (ty-args - (ty-var @3.6-3.7 (name "a")) - (ty-var @3.9-3.15 (name "hasher")))) - (ty-var @5.3-5.4 (name "a"))) + (ty-rigid-var @3.6-3.7 (name "a")) + (ty-rigid-var @3.9-3.15 (name "hasher")))) + (ty-rigid-var @3.6-3.7 (name "a"))) (s-alias-decl @12.1-16.9 (ty-header @12.1-12.10 (name "Decode") (ty-args - (ty-var @12.8-12.9 (name "a")))) - (ty-var @12.13-12.14 (name "a")))) + (ty-rigid-var @12.8-12.9 (name "a")))) + (ty-rigid-var @12.8-12.9 (name "a")))) ~~~ # 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-10.26 (type "Hash(a, hasher)") (ty-header @3.1-3.16 (name "Hash") (ty-args - (ty-var @3.6-3.7 (name "a")) - (ty-var @3.9-3.15 (name "hasher"))))) + (ty-rigid-var @3.6-3.7 (name "a")) + (ty-rigid-var @3.9-3.15 (name "hasher"))))) (alias @12.1-16.9 (type "Decode(a)") (ty-header @12.1-12.10 (name "Decode") (ty-args - (ty-var @12.8-12.9 (name "a")))))) + (ty-rigid-var @12.8-12.9 (name "a")))))) (expressions)) ~~~ diff --git a/test/snapshots/where_clause/where_clauses_error_cases.md b/test/snapshots/where_clause/where_clauses_error_cases.md index 2df33f0c8c..c841b3a107 100644 --- a/test/snapshots/where_clause/where_clauses_error_cases.md +++ b/test/snapshots/where_clause/where_clauses_error_cases.md @@ -188,32 +188,53 @@ broken_fn3 : a -> b # 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-type-anno @4.1-6.24 (name "broken_fn1") (ty-fn @4.14-4.20 (effectful false) - (ty-var @4.14-4.15 (name "a")) - (ty-var @4.19-4.20 (name "b"))) + (ty-rigid-var @4.14-4.15 (name "a")) + (ty-rigid-var @4.19-4.20 (name "b"))) (where (malformed @6.5-6.24))) (s-type-anno @9.1-10.8 (name "broken_fn2") (ty-fn @9.14-9.20 (effectful false) - (ty-var @9.14-9.15 (name "a")) - (ty-var @9.19-9.20 (name "b"))) + (ty-rigid-var @9.14-9.15 (name "a")) + (ty-rigid-var @9.19-9.20 (name "b"))) (where (malformed @10.3-10.8))) (s-type-anno @13.1-15.30 (name "broken_fn3") (ty-fn @13.14-13.20 (effectful false) - (ty-var @13.14-13.15 (name "a")) - (ty-var @13.19-13.20 (name "b"))) + (ty-rigid-var @13.14-13.15 (name "a")) + (ty-rigid-var @13.19-13.20 (name "b"))) (where (method @15.5-15.30 (module-of "c") (ident "method") (args - (ty-var @15.24-15.25 (name "c"))) - (ty-var @15.29-15.30 (name "d"))))) + (ty-rigid-var @15.24-15.25 (name "c"))) + (ty-rigid-var @15.29-15.30 (name "d"))))) (ext-decl @15.5-15.30 (ident "module(c).method") (kind "value"))) ~~~ # 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)) ~~~ diff --git a/test/snapshots/where_clause/where_clauses_minimal.md b/test/snapshots/where_clause/where_clauses_minimal.md index 11237d456d..590c78eebc 100644 --- a/test/snapshots/where_clause/where_clauses_minimal.md +++ b/test/snapshots/where_clause/where_clauses_minimal.md @@ -59,17 +59,30 @@ NO CHANGE (annotation @6.1-6.11 (declared-type (ty-fn @3.14-3.20 (effectful false) - (ty-var @3.14-3.15 (name "a")) - (ty-var @3.19-3.20 (name "b")))))) + (ty-rigid-var @3.14-3.15 (name "a")) + (ty-rigid-var @3.19-3.20 (name "b")))))) + (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-type-anno @3.1-5.29 (name "convert_me") (ty-fn @3.14-3.20 (effectful false) - (ty-var @3.14-3.15 (name "a")) - (ty-var @3.19-3.20 (name "b"))) + (ty-rigid-var @3.14-3.15 (name "a")) + (ty-rigid-var @3.19-3.20 (name "b"))) (where (method @5.3-5.29 (module-of "a") (ident "convert") (args - (ty-var @5.23-5.24 (name "a"))) - (ty-var @5.28-5.29 (name "b"))))) + (ty-rigid-var @3.14-3.15 (name "a"))) + (ty-rigid-var @3.19-3.20 (name "b"))))) (ext-decl @5.3-5.29 (ident "module(a).convert") (kind "value"))) ~~~ # TYPES @@ -77,6 +90,14 @@ NO CHANGE (inferred-types (defs (patt @6.1-6.11 (type "a -> b"))) + (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 @1.1-1.1 (type "a -> b")))) ~~~ diff --git a/test/snapshots/where_clause/where_clauses_multi_type_vars.md b/test/snapshots/where_clause/where_clauses_multi_type_vars.md index 6be440a4bd..11d8732e03 100644 --- a/test/snapshots/where_clause/where_clauses_multi_type_vars.md +++ b/test/snapshots/where_clause/where_clauses_multi_type_vars.md @@ -68,23 +68,36 @@ NO CHANGE (annotation @4.1-4.8 (declared-type (ty-fn @3.11-3.20 (effectful false) - (ty-var @3.11-3.12 (name "a")) - (ty-var @3.14-3.15 (name "b")) - (ty-var @3.19-3.20 (name "c")))))) + (ty-rigid-var @3.11-3.12 (name "a")) + (ty-rigid-var @3.14-3.15 (name "b")) + (ty-rigid-var @3.19-3.20 (name "c")))))) + (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-type-anno @3.1-3.83 (name "process") (ty-fn @3.11-3.20 (effectful false) - (ty-var @3.11-3.12 (name "a")) - (ty-var @3.14-3.15 (name "b")) - (ty-var @3.19-3.20 (name "c"))) + (ty-rigid-var @3.11-3.12 (name "a")) + (ty-rigid-var @3.14-3.15 (name "b")) + (ty-rigid-var @3.19-3.20 (name "c"))) (where (method @3.27-3.53 (module-of "a") (ident "convert") (args - (ty-var @3.47-3.48 (name "a"))) - (ty-var @3.52-3.53 (name "c"))) + (ty-rigid-var @3.11-3.12 (name "a"))) + (ty-rigid-var @3.19-3.20 (name "c"))) (method @3.55-3.83 (module-of "b") (ident "transform") (args - (ty-var @3.77-3.78 (name "b"))) - (ty-var @3.82-3.83 (name "c"))))) + (ty-rigid-var @3.14-3.15 (name "b"))) + (ty-rigid-var @3.19-3.20 (name "c"))))) (ext-decl @3.27-3.53 (ident "module(a).convert") (kind "value")) (ext-decl @3.55-3.83 (ident "module(b).transform") (kind "value"))) ~~~ @@ -93,6 +106,14 @@ NO CHANGE (inferred-types (defs (patt @4.1-4.8 (type "a, b -> c"))) + (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.11-4.21 (type "a, b -> c")))) ~~~ diff --git a/test/snapshots/where_clause/where_clauses_multiline.md b/test/snapshots/where_clause/where_clauses_multiline.md index 8d175f6196..d92ff72c2c 100644 --- a/test/snapshots/where_clause/where_clauses_multiline.md +++ b/test/snapshots/where_clause/where_clauses_multiline.md @@ -66,23 +66,36 @@ NO CHANGE (annotation @7.1-7.8 (declared-type (ty-fn @3.11-3.20 (effectful false) - (ty-var @3.11-3.12 (name "a")) - (ty-var @3.14-3.15 (name "b")) - (ty-var @3.19-3.20 (name "c")))))) + (ty-rigid-var @3.11-3.12 (name "a")) + (ty-rigid-var @3.14-3.15 (name "b")) + (ty-rigid-var @3.19-3.20 (name "c")))))) + (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-type-anno @3.1-6.31 (name "process") (ty-fn @3.11-3.20 (effectful false) - (ty-var @3.11-3.12 (name "a")) - (ty-var @3.14-3.15 (name "b")) - (ty-var @3.19-3.20 (name "c"))) + (ty-rigid-var @3.11-3.12 (name "a")) + (ty-rigid-var @3.14-3.15 (name "b")) + (ty-rigid-var @3.19-3.20 (name "c"))) (where (method @5.3-5.29 (module-of "a") (ident "convert") (args - (ty-var @5.23-5.24 (name "a"))) - (ty-var @5.28-5.29 (name "c"))) + (ty-rigid-var @3.11-3.12 (name "a"))) + (ty-rigid-var @3.19-3.20 (name "c"))) (method @6.3-6.31 (module-of "b") (ident "transform") (args - (ty-var @6.25-6.26 (name "b"))) - (ty-var @6.30-6.31 (name "c"))))) + (ty-rigid-var @3.14-3.15 (name "b"))) + (ty-rigid-var @3.19-3.20 (name "c"))))) (ext-decl @5.3-5.29 (ident "module(a).convert") (kind "value")) (ext-decl @6.3-6.31 (ident "module(b).transform") (kind "value"))) ~~~ @@ -91,6 +104,14 @@ NO CHANGE (inferred-types (defs (patt @7.1-7.8 (type "a, b -> c"))) + (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 @1.1-1.1 (type "a, b -> c")))) ~~~ diff --git a/test/snapshots/where_clause/where_clauses_serde_example.md b/test/snapshots/where_clause/where_clauses_serde_example.md index e0d3b27b62..7c30028ff8 100644 --- a/test/snapshots/where_clause/where_clauses_serde_example.md +++ b/test/snapshots/where_clause/where_clauses_serde_example.md @@ -77,36 +77,57 @@ NO CHANGE (annotation @5.1-5.12 (declared-type (ty-fn @3.15-3.49 (effectful false) - (ty-apply @3.15-3.23 (symbol "List") - (ty @3.20-3.22 (name "U8"))) - (ty-apply @3.27-3.49 (symbol "Result") - (ty-var @3.34-3.35 (name "a")) - (ty-tag-union @3.37-3.48 - (ty @3.38-3.47 (name "DecodeErr")))))))) + (ty-apply @3.15-3.23 (name "List") (builtin) + (ty-lookup @3.20-3.22 (name "U8") (builtin))) + (ty-apply @3.27-3.49 (name "Result") (local) + (ty-rigid-var @3.27-3.49 (name "a")) + (ty-tag-union @3.27-3.49 + (tag_name @3.38-3.47 (name "DecodeErr")))))))) + (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-type-anno @3.1-4.61 (name "deserialize") (ty-fn @3.15-3.49 (effectful false) - (ty-apply @3.15-3.23 (symbol "List") - (ty @3.20-3.22 (name "U8"))) - (ty-apply @3.27-3.49 (symbol "Result") - (ty-var @3.34-3.35 (name "a")) - (ty-tag-union @3.37-3.48 - (ty @3.38-3.47 (name "DecodeErr"))))) + (ty-apply @3.15-3.23 (name "List") (builtin) + (ty-lookup @3.20-3.22 (name "U8") (builtin))) + (ty-apply @3.27-3.49 (name "Result") (local) + (ty-rigid-var @3.27-3.49 (name "a")) + (ty-tag-union @3.27-3.49 + (tag_name @3.38-3.47 (name "DecodeErr"))))) (where (method @4.8-4.61 (module-of "a") (ident "decode") (args - (ty-apply @4.27-4.35 (symbol "List") - (ty @4.32-4.34 (name "U8")))) - (ty-apply @4.39-4.61 (symbol "Result") - (ty-var @4.46-4.47 (name "a")) + (ty-apply @4.27-4.35 (name "List") (builtin) + (ty-lookup @4.32-4.34 (name "U8") (builtin)))) + (ty-apply @4.39-4.61 (name "Result") (local) + (ty-rigid-var @3.27-3.49 (name "a")) (ty-tag-union @4.49-4.60 - (ty @4.50-4.59 (name "DecodeErr"))))))) + (tag_name @4.50-4.59 (name "DecodeErr"))))))) (ext-decl @4.8-4.61 (ident "module(a).decode") (kind "value"))) ~~~ # TYPES ~~~clojure (inferred-types (defs - (patt @5.1-5.12 (type "List(U8) -> Result(a, [DecodeErr])"))) + (patt @5.1-5.12 (type "List(Num(Int(Unsigned8))) -> Result(a, [DecodeErr])"))) + (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.15-5.22 (type "List(U8) -> Result(a, [DecodeErr])")))) + (expr @5.15-5.22 (type "List(Num(Int(Unsigned8))) -> Result(a, [DecodeErr])")))) ~~~ diff --git a/test/snapshots/where_clause/where_clauses_simple_dispatch.md b/test/snapshots/where_clause/where_clauses_simple_dispatch.md index 5f48d186ea..77d1c762e8 100644 --- a/test/snapshots/where_clause/where_clauses_simple_dispatch.md +++ b/test/snapshots/where_clause/where_clauses_simple_dispatch.md @@ -68,17 +68,30 @@ NO CHANGE (annotation @4.1-4.10 (declared-type (ty-fn @3.13-3.21 (effectful false) - (ty-var @3.13-3.14 (name "a")) - (ty @3.18-3.21 (name "Str")))))) + (ty-rigid-var @3.13-3.14 (name "a")) + (ty-lookup @3.18-3.21 (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")))) (s-type-anno @3.1-3.55 (name "stringify") (ty-fn @3.13-3.21 (effectful false) - (ty-var @3.13-3.14 (name "a")) - (ty @3.18-3.21 (name "Str"))) + (ty-rigid-var @3.13-3.14 (name "a")) + (ty-lookup @3.18-3.21 (name "Str") (builtin))) (where (method @3.28-3.55 (module-of "a") (ident "to_str") (args - (ty-var @3.47-3.48 (name "a"))) - (ty @3.52-3.55 (name "Str"))))) + (ty-rigid-var @3.13-3.14 (name "a"))) + (ty-lookup @3.52-3.55 (name "Str") (builtin))))) (ext-decl @3.28-3.55 (ident "module(a).to_str") (kind "value"))) ~~~ # TYPES @@ -86,6 +99,14 @@ NO CHANGE (inferred-types (defs (patt @4.1-4.10 (type "a -> 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.13-4.35 (type "a -> Str")))) ~~~ diff --git a/test/snapshots/where_clause/where_clauses_type_annotation.md b/test/snapshots/where_clause/where_clauses_type_annotation.md index a3a1027f05..af2bb08e20 100644 --- a/test/snapshots/where_clause/where_clauses_type_annotation.md +++ b/test/snapshots/where_clause/where_clauses_type_annotation.md @@ -68,17 +68,30 @@ NO CHANGE (annotation @4.1-4.8 (declared-type (ty-fn @3.11-3.17 (effectful false) - (ty-var @3.11-3.12 (name "a")) - (ty-var @3.16-3.17 (name "b")))))) + (ty-rigid-var @3.11-3.12 (name "a")) + (ty-rigid-var @3.16-3.17 (name "b")))))) + (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-type-anno @3.1-3.47 (name "convert") (ty-fn @3.11-3.17 (effectful false) - (ty-var @3.11-3.12 (name "a")) - (ty-var @3.16-3.17 (name "b"))) + (ty-rigid-var @3.11-3.12 (name "a")) + (ty-rigid-var @3.16-3.17 (name "b"))) (where (method @3.24-3.47 (module-of "a") (ident "to_b") (args - (ty-var @3.41-3.42 (name "a"))) - (ty-var @3.46-3.47 (name "b"))))) + (ty-rigid-var @3.11-3.12 (name "a"))) + (ty-rigid-var @3.16-3.17 (name "b"))))) (ext-decl @3.24-3.47 (ident "module(a).to_b") (kind "value"))) ~~~ # TYPES @@ -86,6 +99,14 @@ NO CHANGE (inferred-types (defs (patt @4.1-4.8 (type "a -> b"))) + (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.11-4.23 (type "a -> b")))) ~~~