将IO输出带到另一个纯Haskell函数

我是 Haskell 的新手,英语也不是我的第一语言,所以请不要因为一些错字或因为问题表述不当而对这篇文章进行评分:对我来说,这是一场真正的斗争。

无论如何:我正在尝试生成随机坐标(Int,Int),然后在另一个 Haskell 函数中使用它。但是我在将 IO 函数结果“导出”到第二个纯类型 Haskell 函数时遇到了一些问题。

这是我认为并希望正确说明我的问题的一个例子:

genRandomPair = genRandNr

genRandNr :: IO (Int,Int)
genRandNr = do
    firstRandom <- randomRIO (1,10)
    secondRandom <- randomRIO (1,10)
    return (firstRandom,secondRandom)

如果它不明显genRandNrgenRandomPair那是我的问题。

我将非常感谢所有友好的投入。

请注意:非常高级的代码解释不会真正帮助我,因为我处于初学者水平,直到一周前从未在 Haskell 中使用过 monad 或 IO。

回答

如果您有 amIO (Int,Int)值和一个函数,例如,(Int,Int),您可以使用fmap通过纯函数映射不纯结果:

fmap myPureFunction anImpureTuple

但是,一般而言,您可能希望排除代码的非确定性部分。

我意识到您是 Haskell 的新手,但不幸的是,Haskell 中的随机性可能不是一个好的初学者主题。Haskell 明确区分纯函数和不纯动作,随机性本质上是不纯的。

对依赖于随机性的函数进行优雅的分解需要了解一些 Haskell 的中间抽象,例如函子(在 的情况下fmap)或类型类(以了解RandomGen)。


以上是将IO输出带到另一个纯Haskell函数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>