Hey, I ran into this earlier today, though it was in a where clause. :) Luckily I already knew what to google, since there are multiple ways to handle it and I wasn't sure which was best (I went with "just give it a signature").

You're looking at the storied Monomorphism Restriction!

https://wiki.haskell.org/Monomorphism_restriction

On Tue, Aug 14, 2018, 8:33 PM Jeffrey Brown <jeffbrown.the@gmail.com> wrote:
Today I was writing a lot of Hashable instances, and found it hard to read code littered long lines mostly consisting of `hashWithSalt`, so I made a synonym:

infixl 5 ##
(##) = hashWithSalt

But when I replaced all the `hashWithSalt`s with ##, I got lots of weird errors -- GHC kept wanting things to be Strings that were Ints, or vice verse. The problem vanished when I added this type signature:

(##) :: Hashable a => Int -> a -> Int

That's exactly the same type signature that hashWithSalt has.

Is this expected behavior? Desirable?


--
Jeff Brown | Jeffrey Benjamin Brown
Website   |   Facebook   |   LinkedIn(spammy, so I often miss messages here)   |   Github   
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.