(importWithDefAlias)

This commit is contained in:
2023-06-29 15:38:31 -06:00
parent bf17e9a1c6
commit f68911cf61

View File

@@ -1465,6 +1465,23 @@ class Macros {
// Prelude.print(Reader.toString(exp.def)); // Prelude.print(Reader.toString(exp.def));
exp; exp;
}; };
k.doc("importWithDefAlias", 0, 0, '(importWithDefAlias)');
macros["importWithDefAlias"] = (_, _, k:KissState) -> {
k.specialForms.remove("import");
k.macros["import"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {
var b = wholeExp.expBuilder();
var type = switch (args[0].def) {
case Symbol(typeName):
typeName;
default:
throw KissError.fromExp(wholeExp, "the only argument to (import) when using (importWithDefAlias) should be a symbol of a type path");
};
var baseType = type.split(".").pop();
b.callSymbol("defAlias", [b.meta("type", b.symbol(baseType)), args[0]]);
};
null;
};
k.doc("typeCase", 2, null, "(typeCase [<values>] ([:<Type> <name> <more typed names...>] <body>) <more cases...> (otherwise <required default>))"); k.doc("typeCase", 2, null, "(typeCase [<values>] ([:<Type> <name> <more typed names...>] <body>) <more cases...> (otherwise <required default>))");
macros["typeCase"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> { macros["typeCase"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k:KissState) -> {