On 24.06.2011 11:10, Daniel Fischer wrote:
On Friday 24 June 2011, 10:26:42, Guy wrote:
What does the ~ type operator mean? I've sometimes seen types such as (a
~ b) in error messages, but can't understand what GHC is trying to tell
me.
Type equality, (a ~ b) means that a and b are the same type (rather, that
the compiler can prove they're the same).
This type operator is needed when using type families. With functional
dependencies you can assert a bijection between types by writing
class C a b | a -> b, b -> a where
but using type functions you have to tell the compiler somehow that one
type function reverses the mapping of another function. This is where
(~) is needed. You can use this type operator, when LANGUAGE
TypeFamilies is enabled.
I assume that the use of (~) in type error messages reflects that GHC's
type checker is now internally based on type families. There are also
other circumstances, where GHC uses non-Haskell-98 syntax in its
messages, e.g. it uses explicit 'forall' quantifiers in error messages
also if they are disabled in the affected module.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe