consider the following definition: > class C a where foo :: a -> Int > instance C Bool where foo _ = 5
I can then say: > bar :: C a => a -> Int > bar (x :: a) = foo (undefined :: a) But not: > bar :: C a => a -> Int > bar x = foo (undefined :: a) because it tries to use a new scope for the type variable a and doesn't unify it with the one in the type spec. Why not? On a more general note, suppose I have a class and there are "constant members" of the class. For instance, something like: > class D a where constMember :: Int > instance D Int where constMember = 8 It seems ehre that there's no way to extract constMember for a /particular/ class, since you can't tell it what "a" is supposed to be. So, instead, I do: > class D a where constMember :: a -> Int -- should be independent of arg > instance D Int where constMember _ = 8 (which brings me to my use of "undefined::a"). But is there a better/preferred way to do this? - Hal -- Hal Daume III "Computer science is no more about computers | [EMAIL PROTECTED] than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell