On Wed, Apr 9, 2014 at 11:05 AM, Alexander Solla <alex.solla@gmail.com> wrote:
Try using scoped type variables, and explicitly declare the types for pack and unpack at the call site:

instance (Newtype a b, Newtype b c) => Newtype a c where
  pack = (pack :: b -> c)
           . (pack :: a -> b)

Did I get those types right?  They look free to me.

Actually, I'm not sure if that will work. How will GHC know which b to choose for the pair a and c, unless there are functional dependencies on a and c?