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

Sean Leather leather at cs.uu.nl
Tue Jan 19 05:32:03 EST 2010


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

Regards,
Sean

On Tue, Jan 19, 2010 at 11:15, Simon Peyton-Jones <simonpj at 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 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/glasgow-haskell-users/attachments/20100119/cb4fd3c3/attachment.html


More information about the Glasgow-haskell-users mailing list