diff options
| author | mryouse | 2022-06-30 03:40:39 +0000 | 
|---|---|---|
| committer | mryouse | 2022-06-30 03:40:39 +0000 | 
| commit | bf8900200c25d383c883501446a8048ad8966d94 (patch) | |
| tree | c9c5fbd4563b2edc066339f0933d9b225bb5bdd6 /neb/std/types.py | |
| parent | 5274edb5484f75266304d21840f8e854f2a1d3c5 (diff) | |
initial commit of multi-type support (only list of strings for now)
Diffstat (limited to 'neb/std/types.py')
| -rw-r--r-- | neb/std/types.py | 13 | 
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) | 
