-----BEGIN PGP SIGNED MESSAGE----- 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] [email protected] system administrator [openafs,heimdal,too many hats] [email protected] electrical and computer engineering, carnegie mellon university KF8NH -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.10 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAkxoFikACgkQIn7hlCsL25VIJgCbB/3zqsATPssYNFsCD/H5fMOO DnUAn2+gBqlHyD0FyGFANSyVxWdI0PQR =/SmY -----END PGP SIGNATURE----- _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
