import * as ast from "./ast.ts"; export type Ty = | { tag: "error" } | { tag: "int" } | { tag: "string" } | { tag: "fn"; stmt: ast.Stmt; params: Ty[]; returnTy: Ty }; export function tyToString(ty: Ty): string { switch (ty.tag) { case "error": return ``; case "int": return `int`; case "string": return `string`; case "fn": { const k = ty.stmt.kind as ast.StmtKind & { tag: "fn" }; const params = ty.params .map((param, i) => `${k.params[i]}: ${tyToString(param)}`) .join(", "); const returnTy = tyToString(ty.returnTy); return `fn ${k.ident}(${params}) -> ${returnTy}`; } } }