
| By the way, the description in the GHC User's Guide 7.4.12.2: | | newtype T v1...vn = T' (S t1...tk vk+1...vn) deriving (c1...cm) | | is too restrictive in requiring that S must be a type constructor of | the same arity as T, forbidding things like | | newtype Wrap m a = Wrap (m a) deriving (Monad, Eq) | | It should be | | newtype T v1...vn = T' (t vk+1...vn) deriving (c1...cm) | | with vk+1...vn not free in the type expression t. It should also | mention that T may not be recursive, unless all the classes are | those derivable by the existing mechanism. (There is some | awkwardness in the overlap between the two mechanisms.) Good point. It turned out that the HEAD already implemented this, but because I hadn't thought of this case, I'd missed a test in the eta-ok test. So there was a lurking bug. I've fixed the documentation as you suggest too. Thanks for pointing this out Simon