[[!comment format=mdwn username="https://www.joachim-breitner.de/" nickname="nomeata" avatar="http://cdn.libravatar.org/avatar/a2112893817513537c6a2c228c04c138a2f68bba57121ab7f267de58fc5171d7" subject="comment 3" date="2017-05-07T03:20:38Z" content=""" Still not good, I think, as the instance `Hashable Hash` has `hash = id`, so hash Nothing = hash () = id (hash ()) = hash (Just (hash ()) and we have a collision at type `Maybe Hash`. What would work is to do the same that `Hashable []` does, i.e. has the hash again: hash (Just v) = hash (val (hashValue v)) hash Nothing = hash (mempty :: B.ByteString) """]]