Can't infer type (type family + "element" type)

Simon Peyton-Jones simonpj at microsoft.com
Tue Jan 19 05:15:51 EST 2010


Looks like a bug to me!  I am currently elbows-deep in re-engineering GHC's entire constraint generation and solving mechanism, which will, I hope, simply solve your problem.  

But meanwhile can I ask a favour: submit a Trac report with the offending code in reproducible form? Then I'll be sure to test the new code against all such tickets.

Thanks

Simon

| -----Original Message-----
| From: glasgow-haskell-users-bounces at haskell.org [mailto:glasgow-haskell-users-
| bounces at haskell.org] On Behalf Of Sean Leather
| Sent: 18 January 2010 16:59
| To: GHC Users List
| Subject: Can't infer type (type family + "element" type)
| 
| Suppose I have a class C,
| 
| > class C a where
| >   type E a
| >   c :: E a -> a -> a
| 
| a datatype T,
| 
| > data T a = T a
| 
| and an instance of C for T
| 
| > instance C (T a) where
| >   type E (T a) = a
| >   c x (T _) = T x
| 
| I would like to write a function such as f
| 
| > f t@(T x) = c x t
| 
| without a type signature. Unfortunately, I can't because GHC tells me
| 
|     Couldn't match expected type `t' against inferred type `T (E t)'
|     In the second argument of `c', namely `t'
|     In the expression: c x t
|     In the definition of `f': f (t@(T x)) = c x t
| 
| There are at least three possible ways to write the above code such
| that it works.
| 
| (1) Give a type signature for f
| 
| > f :: T a -> T a
| 
| (2) Define the class C using an equality constraint
| 
| > class C t where
| >   type E t
| >   c :: (E t ~ e) => e -> t -> t
| 
| (3) Define the class C using functional dependencies
| 
| > class C t e | t -> e where
| >   c :: e -> t -> t
| 
| But the real question is why don't I get a type for f?
| 
| This has been tested in GHC 6.10.1 and 6.12.1.
| 
| Thanks,
| Sean
| _______________________________________________
| Glasgow-haskell-users mailing list
| Glasgow-haskell-users at haskell.org
| http://www.haskell.org/mailman/listinfo/glasgow-haskell-users



More information about the Glasgow-haskell-users mailing list