【发布时间】:2012-04-18 13:29:34
【问题描述】:
考虑以下应该打印出随机数的代码:
import System.Random.Mersenne
main =
do g <- (newMTGen Nothing)
xs <- (randoms g) :: IO [Double]
mapM_ print xs
运行时,我收到分段错误错误。这并不奇怪,因为函数“randoms”会产生一个无限列表。假设我只想打印 xs 的前十个值。我怎么能那样做? xs 的类型为 IO [Double],我想我想要一个 [IO Double] 类型的变量。存在哪些运算符可以在两者之间进行转换。
【问题讨论】:
-
顺便说一下,IO [Double] -> [IO Double] 本质上是“序列”的反向类型签名。
-
听起来像是某种错误编译或硬件问题,那么...您可能需要运行memtest86+ 检查。
-
你可以做一个
IO [Double] -> IO [IO Double]...除非你unsafePerformIO。 -
那个流浪的
-}很不寻常。 -
Daniel,您的代码是否正常工作?并且 } 是一个错字