diff options
Diffstat (limited to 'neb/std')
| -rw-r--r-- | neb/std/core.py | 2 | ||||
| -rw-r--r-- | neb/std/types.py | 13 |
2 files changed, 14 insertions, 1 deletions
diff --git a/neb/std/core.py b/neb/std/core.py index 1c3c4b4..750594e 100644 --- a/neb/std/core.py +++ b/neb/std/core.py @@ -47,7 +47,7 @@ CORE.register("redef", Builtin("redef", interpretRedef, [def_name_arg, def_val_a def interpretLambda(symbol, args, env, ns): new_args = args return_type = Type(":any") - if isinstance(args[0], Type): + if isinstance(args[0], Type) or isinstance(args[0], MultiType): return_type = args[0] new_args = args[1:] diff --git a/neb/std/types.py b/neb/std/types.py index f8d5405..b5422da 100644 --- a/neb/std/types.py +++ b/neb/std/types.py @@ -69,6 +69,16 @@ def interpretIsLiteral(symbol, args, env, ns): TYPES.register("literal?", Builtin("literal?", interpretIsLiteral, [Arg("arg", TypeEnum.ANY)], return_type=Type(":bool"))) +def interpretIsListOfString(symbol, args, env, ns): + if not isinstance(args[0], List): + return Bool(False) + for arg in args[0].args: + if not isinstance(arg, String): + return Bool(False) + return Bool(True) + +TYPES.register("list-of-string?", Builtin("list-of-string?", interpretIsListOfString, [Arg("arg", TypeEnum.ANY)], return_type=Type(":bool"))) + # add types to env any_type = NebType(":any", None, interpretIsAny) literal_type = NebType(":literal", any_type, interpretIsLiteral) @@ -79,6 +89,8 @@ number_type = NebType(":number", literal_type, interpretIsNumber) int_type = NebType(":int", number_type, interpretIsInt) float_type = NebType(":float", number_type, interpretIsFloat) +list_of_string_type = NebType(":[:string]", list_type, interpretIsListOfString) + TYPES.register(":any", any_type) TYPES.register(":literal", literal_type) TYPES.register(":string", string_type) @@ -87,3 +99,4 @@ TYPES.register(":bool", bool_type) TYPES.register(":number", number_type) TYPES.register(":int", int_type) TYPES.register(":float", float_type) +TYPES.register(":[:string]", list_of_string_type) |
