cblp/funlangs

Functional languages index

Haskell

42

71 commits

updated Sep 23, 2019

See the code

README

Functional languages

There is no such thing as a functional language.

You can write functionally in any language.

Also, different languages have different functional features.

Functional features

FeatureCC++HaskellIdrisJavaOCamlPythonRustScala
Closures:x::warning::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::warning::heavy_check_mark:
Downwards Funarg Problem:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Functions:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Guaranteed Tail Call Optimization:heavy_check_mark::heavy_check_mark::x::heavy_check_mark::warning:
Lambda Abstraction Syntax:x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::warning::heavy_check_mark::heavy_check_mark:
Pure Functions:x::warning::heavy_check_mark::heavy_check_mark::x::x::x::x::x:
Upwards Funarg Problem:x::warning::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:

Supporting features

FeatureCC++HaskellIdrisJavaOCamlPythonRustScala
Ad Hoc Polymorphism:x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Algebraic Data Types:x::x::heavy_check_mark::heavy_check_mark::heavy_check_mark::x::heavy_check_mark::heavy_check_mark:
Dependent Types:x::x::x::heavy_check_mark::x::x::x::x:
Forces Immutability:x::x::heavy_check_mark::heavy_check_mark::heavy_check_mark::x::heavy_check_mark::warning:
Immutable Data:x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Laziness By Default:x::x::heavy_check_mark::x::x::x::x::x:
Parametric Modules:x::x::warning::heavy_check_mark::heavy_check_mark::x::x::heavy_check_mark:
Parametric Polymorphism:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Pattern Matching:warning::heavy_check_mark::heavy_check_mark::heavy_check_mark::warning::warning::heavy_check_mark:
Pattern Matching Alternatives:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Pattern Matching Variable Introduction:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Polymorphic Recursion:x::x::heavy_check_mark::heavy_check_mark::x::heavy_check_mark::warning::heavy_check_mark:
Referential Transparency:heavy_check_mark::heavy_check_mark::x:
Row Polymorphism:x::x::warning::x::heavy_check_mark::x:
Static Typing:warning::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::x::heavy_check_mark::heavy_check_mark:
Totality Checking:x::x::x::heavy_check_mark::x::x::x::x:
Uniqueness Types:x::x::x::heavy_check_mark::x::x::heavy_check_mark::x:
Universe Polymorphism:x::x::x::heavy_check_mark::x::x::x::x:

Scores

A well implemented feature counts as 1, a hard-to-use one counts as 0.5. Supporting featurues count twice less.

LanguageScore
Idris15.0
Haskell13.5
OCaml11.5
Scala10.75
Rust9.25
Python7.0
C++6.75
Java5.0
C2.25

Contributors

cblp

69 commits

Odomontois

2 commits

cblp/funlangs

Functional languages index

Haskell

42

71 commits

updated Sep 23, 2019

See the code

README

Functional languages

There is no such thing as a functional language.

You can write functionally in any language.

Also, different languages have different functional features.

Functional features

FeatureCC++HaskellIdrisJavaOCamlPythonRustScala
Closures:x::warning::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::warning::heavy_check_mark:
Downwards Funarg Problem:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Functions:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Guaranteed Tail Call Optimization:heavy_check_mark::heavy_check_mark::x::heavy_check_mark::warning:
Lambda Abstraction Syntax:x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::warning::heavy_check_mark::heavy_check_mark:
Pure Functions:x::warning::heavy_check_mark::heavy_check_mark::x::x::x::x::x:
Upwards Funarg Problem:x::warning::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:

Supporting features

FeatureCC++HaskellIdrisJavaOCamlPythonRustScala
Ad Hoc Polymorphism:x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Algebraic Data Types:x::x::heavy_check_mark::heavy_check_mark::heavy_check_mark::x::heavy_check_mark::heavy_check_mark:
Dependent Types:x::x::x::heavy_check_mark::x::x::x::x:
Forces Immutability:x::x::heavy_check_mark::heavy_check_mark::heavy_check_mark::x::heavy_check_mark::warning:
Immutable Data:x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Laziness By Default:x::x::heavy_check_mark::x::x::x::x::x:
Parametric Modules:x::x::warning::heavy_check_mark::heavy_check_mark::x::x::heavy_check_mark:
Parametric Polymorphism:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Pattern Matching:warning::heavy_check_mark::heavy_check_mark::heavy_check_mark::warning::warning::heavy_check_mark:
Pattern Matching Alternatives:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Pattern Matching Variable Introduction:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Polymorphic Recursion:x::x::heavy_check_mark::heavy_check_mark::x::heavy_check_mark::warning::heavy_check_mark:
Referential Transparency:heavy_check_mark::heavy_check_mark::x:
Row Polymorphism:x::x::warning::x::heavy_check_mark::x:
Static Typing:warning::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::x::heavy_check_mark::heavy_check_mark:
Totality Checking:x::x::x::heavy_check_mark::x::x::x::x:
Uniqueness Types:x::x::x::heavy_check_mark::x::x::heavy_check_mark::x:
Universe Polymorphism:x::x::x::heavy_check_mark::x::x::x::x:

Scores

A well implemented feature counts as 1, a hard-to-use one counts as 0.5. Supporting featurues count twice less.

LanguageScore
Idris15.0
Haskell13.5
OCaml11.5
Scala10.75
Rust9.25
Python7.0
C++6.75
Java5.0
C2.25

Contributors

cblp

69 commits

Odomontois

2 commits

Languages

Haskell

100.0%