2 ms·
Almost all of the languages I know that do "flow typing" (TypeScript, Flow, Hack), "smart casts" (Kotlin), or "type promotion" (Dart) are fairly statement-orien
by munificent 5y ago
Almost all of the languages I know that do "flow typing" (TypeScript, Flow, Hack), "smart casts" (Kotlin), or "type promotion" (Dart) are fairly statement-oriented.
Expression-based languages tend to have pattern matching which provides another way to solve the same problem.
Flow typing is most useful in imperative languages where code like this is common:
if (foo is! Bar) return "not a Bar";
foo.someBarMethod();
Early returns and other imperative control flow is idiomatic and it's annoying if the static type system doesn't understand it.
In a more functional or expression-oriented language, early returns and other imperative control flow like that is rarer, so there's less "flowing" to type over.
- cannabis_sam 5y agoHow does pattern matching solve the same problem?
- munificent 5y agoIt gives you a very nice notation for checking if a value has some type and, if so, binding a new variable that refers to it as that more specific type.
- cannabis_sam 5y agoHow does that solve the problem of statements being devoid of return information? Also, what? Pattern matching differentiate between values of a single type, and while the assignment mechanism is a great nice-to-have, it still completely follows the basic type consistency that actually typed functions provide. Statements have none of these qualities..
- munificent 5y agoI'm sorry, but we seem to be talking past each other. Why is it a problem that statements are "devoid of return information"? A statement occurs in a position where, by definition, no value it produces will be used.