Can't infer type (type family + "element" type)
Simon PeytonJones
simonpj at microsoft.com
Tue Jan 19 05:15:51 EST 2010
Looks like a bug to me! I am currently elbowsdeep in reengineering 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: glasgowhaskellusersbounces at haskell.org [mailto:glasgowhaskellusers
 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
 _______________________________________________
 Glasgowhaskellusers mailing list
 Glasgowhaskellusers at haskell.org
 http://www.haskell.org/mailman/listinfo/glasgowhaskellusers
More information about the Glasgowhaskellusers
mailing list