我刚刚从真实世界的haskell中输入了RandomState示例。它看起来像这样:将一个Show实例添加到RWH的RandomState示例中
import System.Random
import Control.Monad.State
type RandomState a = State StdGen a
getRandom :: Random a => RandomState a
getRandom =
get >>= \gen ->
let (val, gen') = random gen in
put gen' >>
return val
getTwoRandoms :: Random a => RandomState (a, a)
getTwoRandoms = liftM2 (,) getRandom getRandom
它的工作,但结果不显示。我收到错误信息:
No instance for (Show (RandomState (Int, Int)))
arising from a use of `print' at <interactive>:1:0-38
Possible fix:
add an instance declaration for (Show (RandomState (Int, Int)))
In a stmt of a 'do' expression: print it
我在为Show RandomState添加实例时遇到了一些麻烦。任何人都可以告诉我这是怎么完成的?
谢谢。
要诊断这一点,我们需要您用来尝试打印的代码。我猜你忘了runState? – 2010-06-22 06:18:00
我没有写任何额外的代码打印,我只是跑了:getTwoRandoms ::(RandomState(Int,Int)) 但是RandomState不知道如何显示它自己。听起来像我没有忘记runState。 – Kurt 2010-06-22 08:02:36
也许你想要'runTwoRandoms'代替下面的一个部分? – kennytm 2010-06-22 11:47:29