Porting some code from GHC 7.8.4 to GHC 7.10.2 and have encountered this rather odd failure:

    Could not deduce (MonadReader
                        (PqColumn m -> m B.ByteString)
                        (ReaderT (PqColumn m -> m B.ByteString) m))
      arising from a use of ‘ask’
    from the context (Monad m)
      bound by the type signature for
                 readFieldByteString :: Monad m =>
                                        PqColumn m -> RowReader m B.ByteString
      at src/EventStore/LibPq.hs:164:24-72
    In a stmt of a 'do' block: readField <- ask
    In the expression:
      do { readField <- ask;
           lift $ readField col }
    In an equation for ‘readFieldByteString’:
        readFieldByteString col
          = do { readField <- ask;
                 lift $ readField col }

I wondered if it was because the environment type (PqColumn m -> m B.ByteString) itself was an instance of MonadReader and the typechecker was getting confused, so I put the environment in a newtype and it was indeed happy.

Unfortunately I can't share enough of this code to get the problematic fragment to compile, and my initial attempts at a small reproduction have been unsuccessful. It's something like the following, but this compiles just fine.

    class MyClass m where
      type MyType m
      defaultValue :: m (MyType m)
    
    l :: Monad m => MyType m -> ReaderT (MyType m -> m Int) m Int
    l n = do
      f <- ask
      lift $ f n

Before I put more effort into reproducing this, does anyone recognise this failure or know what might be going on here?

Cheers,

David