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 |
❌ |
❌ |
❌ |