
I have to port the following piece of code to ghc-6.6: [...] addSimpleFallOut :: IO a -> IO (Either String a) simpleFallOutId :: ObjectID (simpleFallOutId, addSimpleFallOut) = mkSimpleFallOut mkSimpleFallOut :: (ObjectID,IO a -> IO (Either String a)) mkSimpleFallOut = unsafePerformIO newFallOut {-# NOINLINE mkSimpleFallOut #-} newFallOut :: IO (ObjectID, IO a -> IO (Either String a)) [...] ghc-6.5.20060919 reports: Couldn't match expected type `forall a. IO a -> IO (Either String a)' against inferred type `IO a -> IO (Either String a)' Expected type: (ObjectID, forall a1. IO a1 -> IO (Either String a1)) Inferred type: (ObjectID, IO a -> IO (Either String a)) In the expression: mkSimpleFallOut In a pattern binding: (simpleFallOutId, addSimpleFallOut) = mkSimpleFallOut I can make the code compile by rewriting the pair as: simpleFallOutId = fst mkSimpleFallOut addSimpleFallOut = snd mkSimpleFallOut However, in this case I have inlined mkSimpleFallOut manually! Does this matter? If so, how could I rewrite the above code? Cheers Christian