给定一个类型列表IO [Double],我希望能够检查列表是否具有所需的长度.
我猜我需要在这里使用仿函数,但我不明白如何定义它.我是否编写了长度函数的仿函数实例?或者我编写一个使用长度函数的数据类型的仿函数实例fmap?
Monads,仿函数等对我来说都是新手.
我正在修改以下代码作为任务的一部分:
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)