Could not deduce Monad m => MonadReader r (ReaderT r m) ??

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
participants (1)
-
David Turner