Done: http://hackage.haskell.org/trac/ghc/ticket/3826

Regards,
Sean

On Tue, Jan 19, 2010 at 11:15, Simon Peyton-Jones <simonpj@microsoft.com> wrote:
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@haskell.org [mailto:glasgow-haskell-users-
| bounces@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@haskell.org
| http://www.haskell.org/mailman/listinfo/glasgow-haskell-users