aboutsummaryrefslogtreecommitdiff
path: root/neb/std/types.py
diff options
context:
space:
mode:
Diffstat (limited to 'neb/std/types.py')
-rw-r--r--neb/std/types.py13
1 files changed, 13 insertions, 0 deletions
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)