io-monad相关内容

如何从 Haskell 中的 IO 操作中获取正常值

我有以下功能: get :: 字符 ->IO 字符得到 cs = 做char 我想从中得到一个 Chars 值,不是一个 IO 动作.我不不知道如何做到这一点,或者是否有可能. Chars 类型基本上只是一个容器: data Chars = Chars {curData :: [Int],curIndex :: 整数- 等等.} 细节不是那么重要,我只是想知道这个函数是否有办法返 ..
发布时间:2021-12-14 11:33:00 其他开发

我如何使用MVars在我的乒乓haskell游戏中移动球拍?

我已经具有在Haskell的乒乓球游戏中移动2个桨的功能.我要更改,因此现在使用MVars. 我知道我需要将wHeld,sHeld,downHeld和upHeld更改为MVars,但是关于如何更改movePaddle以处理MVars的任何想法? 另外,当我声明将MVars举为MVar时,它在派生show时也会显示错误((Show MVar Bool的非实例) data PongG ..

自定义类型的Monad和MonadIO

我的Logger类型为* -> *,可以采用任何类型并将值记录在文件中.我正在尝试以单例方式实现此目的,以便我登录并保持相同的状态.我的代码看起来像 import Control.Applicative import Control.Monad import System.IO import Control.Monad.IO.Class instance Functor Logger wh ..
发布时间:2020-05-10 21:49:01 其他开发

Haskell中的打印是纯功能吗?

在Haskell中print是纯函数吗?为什么或者为什么不?我认为不是,因为它并不总是返回与纯函数相同的值. 解决方案 类型IO Int的值实际上不是Int.它更像是一张纸,上面写着“嘿,Haskell运行时,请以这种方式产生一个Int值".这张纸是惰性的,即使运行时最终生成的Int是不同的,也保持不变. 您可以通过将纸张分配给main来将其发送到运行时.如果IO动作永远不会妨碍ma ..
发布时间:2020-05-10 21:46:09 其他开发

如何使Scalaz ZIO变得懒惰?

我有一个繁重的副作用函数(认为是数据库调用),我想将其用作惰性值,这样它仅在首次使用时才被调用(如果从未使用过,则不会被调用). 我该如何使用ZIO? 如果我的程序如下所示,则该函数仅被调用一次(但甚至根本不使用结果): import scalaz.zio.IO import scalaz.zio.console._ object Main extends scalaz.zio ..
发布时间:2020-04-30 08:20:43 其他开发

在Haskell IO中组合和拆分赋值做块

我/我/我在两个地方对语言有类似的误解,涉及变量赋值在涉及IO monad的块中的工作方式。你能帮助我理解(1)它是否是同样的误解,(2)如何清除它(在答案中,也许特别是如果你有关于这个问题的最喜欢的参考)? 我发现我可以在所有行都成功执行操作,但当我尝试将其分成2以便可读时,则无法成功执行操作。 第一部分:将1行转换为2 为什么这有效? ipg :: IO() ipg ..
发布时间:2018-06-05 11:56:05 其他开发

IO操作嵌套在其他单元未执行

foobar :: IO(ParseResult [(String,String)]) code> ParseResult是这里定义的monad: https://hackage.haskell.org/package/haskell-src-exts-1.13。 5 / docs / Language-Haskell-Exts-Parser.html#t:ParseResul ..
发布时间:2018-06-05 11:49:45 其他开发

Haskell - 双重人格IO / ST monad?

我有一些目前使用ST monad进行评估的代码。因为 runST 方法产生一个纯粹的结果,所以我不喜欢把IO放在任何地方,并且表明这样的结果可以安全调用(与 unsafePerformIO )。然而,因为我的一些代码已经变得更长了,所以我想把调试打印语句放进去。 是否有任何类提供双重个性monad [或类型类机械],可以是ST或IO(取决于其类型或“isDebug”标志)?我记得SPJ在他的 ..
发布时间:2018-06-04 17:23:43 其他开发

从IO获得价值而不是计算本身

作为Haskell的新手,我正在努力通过编写一个简单的命令式玩具语言的解释器来提高我的技能。 这个表达式之一语言是 input ,它从标准输入中读取一个整数。然而,当我将这个表达式的值赋给一个变量,然后再使用这个变量时,我看起来并不是我实际上存储了读取一个值的计算,而是读取值本身。这意味着例如声明 x =输入; y = x + x; 将导致解释器调用输入过程三次 ..