TypeFamilies vs. FunctionalDependencies & type-level recursion

oleg at okmij.org oleg at okmij.org
Thu Jun 16 09:07:02 CEST 2011

> |   1. mutual dependencies:
> |  	class Add x y z | x y -> z, x z -> y, y z -> x
> |  I think this example can be emulated with type functions; the
> |  emulation didn't work with GHC 6.10, at least. It may work now.

> (The example you give is a bit odd because you specified that the
> types of any two arguments determine the third, which probably isn't
> what you want for Add.  But no matter.)

Actually I meant the triple dependencies, when any two arguments determine
the third. That class was implemented in the following


(it was called Sum). The file also demonstrates exponentiation, as a
ternary relation where any two arguments determine the third. (Unlike
Sum, that relation is partial).

More information about the Haskell-prime mailing list