in my opinion this is a bug of ghc. maybe the implementation works exactly as it should, according to the specification: then it's a bug in the specification. Show a => a -> a -> String just makes much much more sense than () -> () -> String which makes no sense at all imho and i think it would be possible to infer the type in this case. ++ :: [a] -> [a] -> [a] show :: Show e => e -> String on :: (b -> b -> c) -> (d -> b) -> d -> d -> c on (++) show :: d -> d -> c (++) :: [a] -> [a] -> [a] = b -> b -> c -> b = c = [a] show :: Show e => e -> String = (d -> b) -> b = String, Show d -> c = String, a = Char on (++) show :: Show d => d -> d -> String is it really not possible to write an algorithm that can deduce this kind of stuff? Am 08.06.2013 um 15:35 schrieb Brandon Allbery <allbery.b@gmail.com>:
On Sat, Jun 8, 2013 at 9:02 AM, Peter Hall <peter.hall@memorphic.com> wrote: This is confusing me, and I'm wondering if it's a compiler bug. I have this:
foo = (++) `on` show
I'm expecting the type to be:
foo :: Show a => a -> a -> String
But GHCI is inferring:
foo :: () -> () -> String
No bug; it's the monomorphism restriction combining with extended defaulting to infer a monomorphic type. If you want to keep the monomorphism restriction and throw a type error, disable ExtendedDefaultRules.
-- brandon s allbery kf8nh sine nomine associates allbery.b@gmail.com ballbery@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners