
Hi
type assoc k v = [(k, v)]
works beautifully and everything makes sense.
type Assoc v = (Ord k) => [(k, v)]
This doesn't work. Is there any wayof defining k as an element of type Ordinal. I could redefine k by putting Char or Int in its place. Why can't I be more general? Thanks, Paul

Should work with glasgow extensions (-fglasgow-exts).
- Phil
On Dec 1, 2007 6:43 PM, PR Stanley
Hi
type assoc k v = [(k, v)]
works beautifully and everything makes sense.
type Assoc v = (Ord k) => [(k, v)]
This doesn't work. Is there any wayof defining k as an element of type Ordinal. I could redefine k by putting Char or Int in its place. Why can't I be more general? Thanks, Paul
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

On Dec 1, 2007, at 21:43 , PR Stanley wrote:
Hi
type assoc k v = [(k, v)]
works beautifully and everything makes sense.
type Assoc v = (Ord k) => [(k, v)]
This doesn't work. Is there any wayof defining k as an element of type Ordinal. I could redefine k by putting Char or Int in its place. Why can't I be more general?
Think of a type declaration as a macro which is expanded where it is used. With parentheses around it and any unresolved references "forall"ed, because it has no idea what to do with them at declaration time. So, if you use -fglasgow-exts, you could make the above type declaration. But when you use it: foo :: Assoc Int -> Assoc Int translates as foo :: (forall k. (Ord k) => [(k,Int)]) -> (forall k. (Ord k) => [(k,Int)]) This is almost certainly *not* what you want; the two "k"s are independent. It could be argued that GHC should be smarter about it... but formalizing what that means is difficult (and subject to disagreements). -- brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery@kf8nh.com system administrator [openafs,heimdal,too many hats] allbery@ece.cmu.edu electrical and computer engineering, carnegie mellon university KF8NH
participants (3)
-
Brandon S. Allbery KF8NH
-
Philip Weaver
-
PR Stanley