Functional dependencies

From HaskellWiki

Functional dependencies are used to constrain the parameters of type classes. They let you state that in a multi-parameter type class, one of the parameters can be determined from the others, so that the parameter determined by the others can, for example, be the return type but none of the argument types of some of the methods.

Examples

Suppose you want to implement some code to perform simple linear algebra: