Language/Paradigm | Higher-order functions | Currying |
---|---|---|
JavaScript | ✅ | via anonymous functions |
Python | ✅ | via anonymous functions |
Typescript | ✅ | via anonymous functions |
Java | ✅ | via anonymous functions |
C# | ✅ | via anonymous functions |
C++ | ✅ | via anonymous functions |
PHP | ✅ | via anonymous functions |
Go | ✅ | via anonymous functions |
None of these languages support Pure functions
| Language/Paradigm | Tail recursion | folds | unfolds | | —————– | ————– | —————————————— | ——- | | JavaScript | ❌ | .reduce() method on arrays | ❌ | | Python | ❌ | functools.reduce() function on iterables | ❌ | | Typescript | ❌ | .reduce() method on arrays | ❌ | | Java | ❌ | .reduce() method on streamable collections | ❌ | | C# | ❌ | .Aggregate() method on collections | ❌ | | C++ | ✅ | std::accumulate on sequences. | ❌ | | PHP | ❌ | array_reduce() on array | ❌ | | Go | ❌ | ❌ | ❌ |
They all support Product Types via Class, Record or Struct.
Language/Paradigm | Sum types | Pattern Matching | Dependent types |
---|---|---|---|
JavaScript | ❌ | ❌ | ❌ |
Python | ✅since 3.5 with typing.Union | ✅since 3.10 with match statement | ❌ |
Typescript | ✅discriminated unions | switch-case with shared field. | some type-level computations |
Java | Simulated via Sealed Interface | since Java 21 | ❌ |
C# | Simulated via Sealed Class | since C# 9.0 | some type-level computations |
C++ | since C++17 with std::variant | since C++17 with std::visit | some type-level computations |
PHP | ❌ | ❌ | ❌ |
Go | ❌ | ❌ | ❌ |