我剛剛從真實世界的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