instance MonadSample Gen where
  randomWord = choose

-- Transformer instances

instance  MonadSample m            => MonadSample (IdentityT      m)       where randomWord = lift . randomWord
instance  MonadSample m            => MonadSample (ReaderT        r m)     where randomWord = lift . randomWord
instance  MonadSample m            => MonadSample (Strict.StateT  s m)     where randomWord = lift . randomWord
instance  MonadSample m            => MonadSample (Lazy.StateT    s m)     where randomWord = lift . randomWord
instance (MonadSample m, Monoid w) => MonadSample (Strict.WriterT w m)     where randomWord = lift . randomWord
instance (MonadSample m, Monoid w) => MonadSample (Lazy.WriterT   w m)     where randomWord = lift . randomWord
instance (MonadSample m, Monoid w) => MonadSample (Strict.RWST    r w s m) where randomWord = lift . randomWord