首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell monad: IO [Double] to [IO Double]

Haskell monad: IO [Double] to [IO Double]
EN

Stack Overflow用户
提问于 2012-04-04 19:25:06
回答 1查看 948关注 0票数 9

考虑下面的代码,它应该打印出随机数:

代码语言:javascript
复制
import System.Random.Mersenne

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

运行时,我会得到一个分割错误。这并不令人惊讶,因为“随机”函数产生了一个无限的列表。假设我只想打印出xs的前十个值。我怎么能这么做?xs有variable类型,我想我想要一个variable类型的变量。有什么运算符可以在两者之间进行转换。

EN

回答 1

Stack Overflow用户

发布于 2012-04-05 02:43:35

假设我只想打印出xs的前十个值。我怎么能这么做?

只需使用take

代码语言:javascript
复制
main =
 do g <- (newMTGen Nothing)
    xs <- (randoms g) :: IO [Double]
    mapM_ print $ take 10 xs  

你写的

xs具有IO双重类型。

但是实际上,randoms gIO [Double]类型,但是由于do表示法,xs有类型[Double],您只需将take 10应用到它。

您还可以使用liftM跳过绑定。

代码语言:javascript
复制
main =
  do g <- newMTGen Nothing
     ys <- liftM (take 10) $ randoms g :: IO [Double]
     mapM_ print ys
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10017915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档