Монада Haskell: IO [Double] to [IO Double]

Рассмотрим следующий код, который должен распечатать случайные числа:

import System.Random.Mersenne

main =
 do g <- (newMTGen Nothing)
    xs <- (randoms g) :: IO [Double]
    mapM_ print xs  

При запуске я получаю ошибку сегментации. Это неудивительно, поскольку функция randoms создает бесконечный список. Предположим, я хочу вывести только первые десять значений xs. Как я мог это сделать? xs имеет тип IO [Double], и ​​я думаю, что мне нужна переменная типа [IO Double]. Какие операторы существуют для преобразования между ними.

9
задан Philip JF 5 April 2012 в 01:54
поделиться