One thing I find interesting and original is the idea of flow-based type inference.<p>Citing the "The Lobster Type System" page [1]:<p><pre><code> Type checking happens in order of function calls,
i.e. it is much like evaluating the code,
but with types instead of values.
</code></pre>
With this flow analysis, lobster infer more specific types for each usage of a variable.<p><pre><code> var a = nil // a is a nilable of unknown type
if ..:
a = "foo" // a is a nilable string
if a: // guaranteed not be nil inside block
a += "!" // ok: a is of type string here
</code></pre>
[1] <a href="https://aardappel.github.io/lobster/type_checker.html" rel="nofollow">https://aardappel.github.io/lobster/type_checker.html</a>