我有一个使用Haskell,OpenGL和GLUT显示一堆随机三角形的程序。但是我希望每次点击时随机三角形都会改变,或者那种性质的东西(当它们改变时不重要)。
目前我的工作代码如下:
main :: IO ()
main = do
(pname, _) <- getArgsAndInitialize
createWindow $ "Haskellisa"
-- TODO set based on command line args
windowSize $= (Size 640 480)
blend $= Enabled
blendFunc $= (SrcAlpha, OneMinusSrcAlpha)
displayCallback $= display
keyboardMouseCallback $= Just (keyboardMouse)
mainLoop
display :: IO ()
display = do
clear [ ColorBuffer ]
gen0 <- getStdGen
let (tris,gen1) = randomTris 10 gen0
let (cols,gen2) = randomColor4s 10 gen1
let triColPairs = zip tris cols
mapM_ (\(tri, col) -> drawTri tri col) triColPairs
flush
但是,每次调用getStdGen都会显示相同的StdGen。我想要的是将let (cols,gen2)...
行中的gen2用作下一次的生成器,但显然需要某种可变状态或某种性质的东西。
什么是我要问的最佳方式,这样每次显示运行时我都会得到不同的随机性?