生成随机数Haskell

生成随机数Haskell,haskell,Haskell,我正在尝试生成28个随机数,但不断出现错误 错误 无法将类型“Int”与“(Int,Int)”匹配 预期类型:[(Int,Int)] 实际类型:[Int] 在表达式中:take 28$randoms g:[Int] 在“洗牌”的方程式中: 洗牌g=随机抽取28美元g::[Int] 您明确表示正在生成Int类型的列表: module Meth where import System.Random gen :: StdGen gen = mkStdGen 42 shuffles:: StdG

我正在尝试生成28个随机数,但不断出现错误 错误

无法将类型“Int”与“(Int,Int)”匹配 预期类型:[(Int,Int)] 实际类型:[Int] 在表达式中:take 28$randoms g:[Int] 在“洗牌”的方程式中: 洗牌g=随机抽取28美元g::[Int]


您明确表示正在生成
Int
类型的列表:

module Meth where
import System.Random



gen :: StdGen
gen = mkStdGen 42

shuffles:: StdGen->[(Int,Int)]
shuffles g = take 28(randoms g :: [Int])
然后你还说你实际上想要一个
Int
s对的列表:

... (randoms g :: [Int])
你想要哪个?如果需要配对,请拆分生成器,并将两个单独的调用压缩到
randoms

... -> [ (Int, Int) ]
如果您只需要
Int
s列表,请修复不正确的类型签名:

shuffles:: StdGen->[(Int,Int)]
shuffles g =
    let (g1,g2) = split g
    in take 28 $ zip (randoms g1) (randoms g2) 

最后一行的括号不匹配。投票以打字错误结束。
接受28$randoms g::[Int]
您正在生成一个
Int
列表,并试图返回一个
(Int,Int)
列表。我放了括号,但仍然给我一个错误
shuffles:: StdGen -> [Int]
shuffles g = take 28 (randoms g)