Marc,

| Could somebody tell me how to disambiguate the following program
| 
| > module Tmp( g ) where
| > data A p q = A
| > g :: (Num p,Ord q) => (A p q) -> Bool
| > g A = g A

I don't understand this.  "g" always returns bottom.

| I could do something like
| 
| > g a@A = a

That's different!  
        g A = A 
would be OK, except that now g returns a value of type (AB r s),
not a Bool.

| But that won't help me very much in the case of
| 
| > data AB p q = A
| >               B p q
| > g :: (Num p,Ord q) => (AB p q) -> Bool
| > g (B _ _) = A

That should be OK too, except that g doesn't return a Bool.

Simon

Reply via email to