[Haskell-cafe] Type family oddity

Manuel M T Chakravarty chak at cse.unsw.edu.au
Sun Oct 5 06:30:07 EDT 2008


Claus Reinke wrote:
> Btw, is there a list of common TF pitfalls somewhere? Some example
> items so far seem to be:
>
> 1 'C a => TF a', where 'a' isn't determinable
> 2 'TF a' is not fully polymorphic
> 3 'TF a' is not a decomposable type constructor, it stands only
>   for itself, or for its result (in that way it is more like a defined
>   function application)
>
> For 1/2, it is helpful to flatten type family applications:
>
> - 'C a => TF a' becomes: '(C a,TF a~tfa) => tfa'
> - 'TF a' becomes: 'TF a~tfa => tfa'
>
> For 3, it is helpful to imagine the arity of type families being  
> marked
> by braces, to distinguish type family parameters from any  
> constructor parameters, in case the type family reduces to a type  
> constructor:
>
> - Given 'type family TF2 a :: * -> *',    'TF2 a b' becomes: '{TF2  
> a} ~ tfa => tfa b'

It should rather be a type-level programming FAQ:

Re 1: Ambiguous signatures are a general problem.  However, they are  
syntactically harder to recognise with TFs.

Re 2: Applies to GADTs as well.

Re 3: I have always been wondering whether we want special syntax for  
the application of synonym families. That would make it syntactically  
easier to recognise ambiguous signatures and indicarte syntactically  
were decomposition is admisible.

BTW, part of the problem is that H98 is not entirely consistent with  
its use of upper and lower case identifiers.  Strictly speaking,  
already vanilla type synonyms should have been lower case as they are  
a simple form of functions on types (you cannot use decomposition on  
them!)  Then, synonym families could be lower-case, too.

Manuel



More information about the Haskell-Cafe mailing list