[Haskell-cafe] Assorted AT fun and games

Brandon S Allbery KF8NH allbery at ece.cmu.edu
Sun Aug 15 12:30:33 EDT 2010

Hash: SHA1

On 8/15/10 09:00 , Andrew Coppin wrote:
>  class (Vector (Point x)) => HasSpace x where
>    type Point x :: *
> And now things get *really* interesting. Consider this:
>  data Foo x = Foo !x !(Point x)
> Surprisingly, GHC accepts this. This despite the rather obvious fact that
> "Point x" can exist if and only if "x" has a HasSpace instance. And yet, the
> type definition appears to say that "x" is simply an unconstrained type
> variable. Intriguing...

Maybe I'm missing something in all the type machinery I elided, but it looks
to me like you have that backwards:  HasSpace x requires Point x but not
vice versa.  Your actual usage may require the reverse association, but the
definition of Foo won't be modified by that usage --- only applications of
that definition.

- -- 
brandon s. allbery     [linux,solaris,freebsd,perl]      allbery at kf8nh.com
system administrator  [openafs,heimdal,too many hats]  allbery at ece.cmu.edu
electrical and computer engineering, carnegie mellon university      KF8NH
Version: GnuPG v2.0.10 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/


More information about the Haskell-Cafe mailing list