Data.ByteString.Lazy defines ByteString as a type synonym, and then uses that in instances, which isn't permitted by Haskell 98. How about defining a newtype ByteString in Data.ByteString.Lazy.Base instead?