Limited monomorphic-only Damas-Hindley-Milner implemented in types
This commit is contained in:
11
k_prime.krak
11
k_prime.krak
@@ -835,6 +835,13 @@ fun main(argc: int, argv: **char): int {
|
||||
return make_pair(null<KPEnv>(), KPResult::Ok(kpBool(params[0].is_symbol())))
|
||||
}));
|
||||
|
||||
env->set(str("int?"), make_builtin_combiner(str("symbol?"), 1, false, fun(params: vec<KPValue>, dynamic_env: *KPEnv): pair<*KPEnv, KPResult> {
|
||||
if params.size != 1 {
|
||||
return make_pair(null<KPEnv>(), KPResult::Err(kpString(str("Need 1 param to int?"))))
|
||||
}
|
||||
return make_pair(null<KPEnv>(), KPResult::Ok(kpBool(params[0].is_int())))
|
||||
}));
|
||||
|
||||
env->set(str("str-to-symbol"), make_builtin_combiner(str("str-to-symbol"), 1, false, fun(params: vec<KPValue>, dynamic_env: *KPEnv): pair<*KPEnv, KPResult> {
|
||||
if params.size != 1 {
|
||||
return make_pair(null<KPEnv>(), KPResult::Err(kpString(str("Need 1 param to str-to-symbol"))))
|
||||
@@ -869,7 +876,7 @@ fun main(argc: int, argv: **char): int {
|
||||
return make_pair(null<KPEnv>(), KPResult::Err(kpString(str("Need 1 param to len"))))
|
||||
}
|
||||
if !params[0].is_array() && !params[0].is_string() {
|
||||
return make_pair(null<KPEnv>(), KPResult::Err(kpString(str("Called len with not an array/string ") + pr_str(params[0], true))))
|
||||
return make_pair(null<KPEnv>(), KPResult::Err(kpString(str("Called len with not an array/string ") + pr_str(params[0], true) + "\nenv was\n" + dynamic_env->to_string())))
|
||||
}
|
||||
if params[0].is_array() {
|
||||
return make_pair(null<KPEnv>(), KPResult::Ok(kpInt(params[0].get_array_rc().get().size)))
|
||||
@@ -882,7 +889,7 @@ fun main(argc: int, argv: **char): int {
|
||||
return make_pair(null<KPEnv>(), KPResult::Err(kpString(str("Need 2 params to idx"))))
|
||||
}
|
||||
if !params[0].is_array() && !params[0].is_string() { return make_pair(null<KPEnv>(), KPResult::Err(kpString(str("Param 1 to idx is not string or array") + pr_str(params[0], true)))); }
|
||||
if !params[1].is_int() { return make_pair(null<KPEnv>(), KPResult::Err(kpString(str("Param 2 to idx is not int")))); }
|
||||
if !params[1].is_int() { return make_pair(null<KPEnv>(), KPResult::Err(kpString(str("Param 2 to idx is not int ") + pr_str(params[1], true)))); }
|
||||
|
||||
var index = params[1].get_int()
|
||||
if index < 0 {
|
||||
|
||||
Reference in New Issue
Block a user