我正在修改以下代码作为任务的一部分:
rand :: Random a => State StdGen a
rand = do
gen <- get
let (x, gen') = random gen
put gen'
return x
Run Code Online (Sandbox Code Playgroud)
我被要求编写一个函数randR来完成与函数相同的任务,rand但允许指定范围.所需的类型是Random a => (a, a) -> State StdGen a.我写了以下代码:
randR :: Random a => (a, a) -> State StdGen b
randR (lo, hi) = do
gen <- get
let (x, gen') = randomR (lo, hi) gen
put gen'
return x
Run Code Online (Sandbox Code Playgroud)
这看起来正确; 它几乎就像模型一样.但是我收到以下错误:
Could not deduce (a ~ b)
from …Run Code Online (Sandbox Code Playgroud)