
Do you have a concrete example?
I think that the recursive calls will all go via the original class method with its original type - we can't know that it's calling *this* instance till much later. So I still don't get it. An example would clear it up.
Simon
From: David Feuer
The type signature in the instance declaration must be more polymorphic than (or the same as) the one in the class declaration, instantiated with the instance type.
Usually if you give a signature, it must be _less_ polymorphic (or the same as) the type inferred from the term:
lessPolyPlus :: Integral a => a -> a -> a lessPolyPlus x y = x + y
Or
lessPolyPlus (x :: a) y = x + y :: Integral a => a
The examples in the User Guide aren't helping: you could just drop the InstanceSigs, and all is well-typed. (Even the example alleging to use -XScopedTypeVariables in a where sub-decl: you could just put random `xs :: [b]` without scoping `b`.) Dropping the Sigs altogether works because the type from the class decl, suitably instantiated, is less polymorphic than inferred from the term. IOW the suitably instantiated type restricts what would otherwise be inferred. Situation normal. I suppose it might be helpful to give an explicit InstanceSig as 'belt and braces' for the instantiated -- possibly because the instantiation is hard to figure out; possibly because you want to use -XScopedTypeVariables within a where-bound sub-decl, as an extra piece of string. I can see you mustn't make the InstanceSig _less_ polymorphic than the suitably instantiated. But the docos don't give any example where it's essential to provide an InstanceSig _and_ make it strictly more polymorphic. Here all the sigs and annotations are just superfluous:
maxPolyPlus :: Num a => a -> a -> a maxPolyPlus = (+)
class C a where foo :: a -> T a instance Integral a => C a where foo :: Num a => a -> T a foo (x :: a) = MkT (maxPolyPlus x x :: Num a => a)
Is there a persuasive example (to put in the User Guide)? AntC _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.orgmailto:Glasgow-haskell-users@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-usershttps://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fglasgow-haskell-users&data=04%7C01%7Csimonpj%40microsoft.com%7Cd48d198da4444de65d9008d95bee2560%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637641900674544282%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=j0m45j8G%2FJ7u6uHUB%2BwNQ0xM0p%2BMic3%2BM85xYud2U90%3D&reserved=0