Value types are Erg built-in types that can be evaluated at compile time, specifically:
Value = ( Int or Nat or Ratio or Float or Complex or Bool or Str or NoneType or Array Const or Tuple Const or Set Const or ConstFunc(Const, _) or ConstProc(Const, _) or ConstMethod(Const, _) )
Value-type objects, constants, and compile-time subroutines applied to them are called constant expressions.
1, 1.0, 1+2im, True, None, "aaa", [1, 2, 3], Fib(12)
Be careful with subroutines. Subroutines may or may not be value types. Since the substance of a subroutine is just a pointer, it can be treated as a value 1, but when compiling something that is not a subroutine cannot be used in a constant context. is not a value type because it doesn't make much sense.
Types classified as value types may be added in the future.
1 The term "value type" in Erg differs from the definition in other languages. There is no concept of memory within pure Erg semantics, and it is incorrect to state that it is a value type because it is placed on the stack, or that it is not a value type because it is actually a pointer. A value type only means that it is a
Value type or its subtypes. ↩