diff options
Diffstat (limited to 'neb/std/types.py')
| -rw-r--r-- | neb/std/types.py | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/neb/std/types.py b/neb/std/types.py index ab099e2..b5fb993 100644 --- a/neb/std/types.py +++ b/neb/std/types.py @@ -1,4 +1,4 @@ -from .. import TypeEnum, Environment, Arg, Builtin, evaluate, InterpretPanic +from .. import TypeEnum, Environment, Arg, Builtin, evaluate, InterpretPanic, NebType from ..structs import * TYPES = Environment() @@ -58,3 +58,32 @@ def interpretTypeOf(symbol, args, env, ns): return Type(f"{args[0].type_}") TYPES.register("typeof", Builtin("typeof", interpretTypeOf, [Arg("candidate", TypeEnum.ANY)])) + +def interpretIsAny(symbol, args, env, ns): + return Bool(True) + +TYPES.register("any?", Builtin("any?", interpretIsAny, [Arg("arg", TypeEnum.ANY)])) + +def interpretIsLiteral(symbol, args, env, ns): + return Bool(isinstance(args[0], Literal)) + +TYPES.register("literal?", Builtin("literal?", interpretIsLiteral, [Arg("arg", TypeEnum.ANY)])) + +# add types to env +any_type = NebType(":any", None, interpretIsAny) +literal_type = NebType(":literal", any_type, interpretIsLiteral) +string_type = NebType(":string", literal_type, interpretIsString) +list_type = NebType(":list", any_type, interpretIsList) +bool_type = NebType(":bool", literal_type, interpretIsBool) +number_type = NebType(":number", literal_type, interpretIsNumber) +int_type = NebType(":int", number_type, interpretIsInt) +float_type = NebType(":float", number_type, interpretIsFloat) + +TYPES.register(":any", any_type) +TYPES.register(":literal", literal_type) +TYPES.register(":string", string_type) +TYPES.register(":list", list_type) +TYPES.register(":bool", bool_type) +TYPES.register(":number", number_type) +TYPES.register(":int", int_type) +TYPES.register(":float", float_type) |
