Hello all, sorry I must have taken my stupid pills this morning, I cannot get the following code to compile, what am I missing?

data MyState=MyState Integer
newState:: (RandomGen g) => RandT g IO MyState
newState = do
         time<-liftIO getCPUTime
         rand<-getRandomR (1,6)
         return $ MyState (time+rand)   

newStateIO :: IO MyState
newStateIO = do
        r<-getStdGen
        evalRandT newState r

-> Could not deduce (MonadIO (RandT g IO))  from the context (RandomGen g)  arising from a use of `liftIO' at ...:4:15-31
Possible fix:
  add (MonadIO (RandT g IO)) to the context of
    the type signature for `newState'
  or add an instance declaration for (MonadIO (RandT g IO)) Pirates.hs /Pirates/src line 167 Problem

But the MonadRandom docs say:
Instances:
MonadIO m => MonadIO (RandT g m)

And the MonadIO docs say:
Instances:
MonadIO IO
So it looks to me it should work!
I've also tried to replace IO by MonadIO m=> in the signature, or remove all signatures. No joy.

Thanks for any help. 

--
JP Moresmau
http://jpmoresmau.blogspot.com/