The hierarchy of type system in Skila will be similar to Scala or C# — Object
as root, and then each type inherits from the other (single-/multi-inheritance, traits, and so on — another time). I didn’t yet decided about Nothing
from Scala.
Unlike C# Object
provides nothing — there is no forcing developer to implement ToString
(no every type has to have textual representation) or GetHashCode
(not every type has to be prepared to be put in collection or even compared).
Another deviation from those two languages is “no type” type — Void. It is single type outside entire hierarchy, it has only one value — void, so for example you can write:
fun hello() : Void = return void; end;
Omitting void
(value) here is valid.
The reason for introducing such “no type” is annoying dichotomy in C# libraries — Func
and Action
come to mind first. The only reason for having two distinct families is the fact Action
does not return anything (i.e. it returns void) and Func
returns something. This is not an issue with Skila – you can use:
Func<Int,T>
(function with parameter of type Int
, and returning some type T
). If T
is Void
(type) then… so what? it is good type as any other.