我是haskell的新手,特别是Random类型,当我遇到这个时,我正在查看learnyouahaskell教程
import System.Random
main = do
gen <- getStdGen
putStr $ take 20 (randomRs ('a','z') gen)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在函数中使用它时,这会失败(即)
genrandTF:: Int -> StdGen -> [Bool]
genrandTF number gen = take number (randomRs (True, False) gen)
Run Code Online (Sandbox Code Playgroud)
并通过它来调用它
genrandTF 20 getStdGen
Run Code Online (Sandbox Code Playgroud)
这是为什么?
-update-
我得到的错误是
<interactive>:116:15:
Couldn't match expected type `StdGen' with actual type `IO StdGen'
In the second argument of `genrandTF', namely `(getStdGen)'
In the expression: genrandTF 20 (getStdGen)
Run Code Online (Sandbox Code Playgroud)
当我将其更改为输入IO StdGen时,我无法编译,因为我收到此消息:
No instance for (RandomGen (IO StdGen))
arising from a use of `randomRs'
In …Run Code Online (Sandbox Code Playgroud)