问题标签 [io-monad]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
84 浏览

io - 使用 takeWhile 方法将 Scalaz IO monad 与 Stream 结合用于简单的 echo 程序

我正在使用 Scalaz IO Monad 和 Stream 在 spoj.com 上寻找“生命、宇宙和一切”问题的解决方案。问题是从输入到输出重写小数字,并在读入数字 42 后停止处理输入。我创建了以下类:

永无止境的循环按预期工作:

但是,当我希望它在数字 42 上完成时,它也没有完成:

我知道这段代码毕竟应该打印 42(与问题陈述相反),但我想简化示例代码。

我在哪里犯错?

0 投票
1 回答
364 浏览

unit-testing - 从文件系统动态生成 Tasty `TestTree`

我已经使用该Parsec库编写了一个文件解析器。我想使用Tasty测试框架编写一个高级单元测试,以确保解析器正确解析一些给定的文件。

我在以下目录结构中有三个格式正确的文件:

我想:

  1. 获取所有文件path/to/files
  2. 读取每个文件的内容
  3. 为每个文件创建一个testCase,以确保成功解析文件的内容
  4. 是否动态完成此操作,以便我以后可以添加更多文件而永远不会更改代码

我设法构建了以下内容:

这种结构有效,但并不理想。这是因为testSuite运行时生成的输出描述性不是很强。

成功时:

失败时:

这个输出并不理想,因为它只会输出第一个解析失败的文件,而不是所有失败的文件。此外,无论是否有任何失败,它也不会告诉您哪些文件被成功解析。

我希望测试树看起来像这样:

成功时:

失败时:

这是我尝试TestTree从文件系统动态生成格式良好的尝试:

如您所见,unsafePerformIO此代码中有一个难看的调用来提取TestTreevia unsafePerformIO :: IO [TestTree] -> [TestTree]。我觉得有必要使用这个不安全的函数调用,因为我不知道如何在testCase结构中使用从文件系统(文件名)派生的信息。结果被困[TestTree] IOmonad中。

使用这个不安全的函数不仅不理想,而且它甚至不起作用,因为这个IO动作实际上是不安全的。测试套件永远不会运行,因为引发了以下异常:

给定 的类型签名withResource

我发现不可能IO a -> TestTree 为最后一个参数构造一个类型的函数,withResource该函数不使用或调用的参数中的IO a输入。尽管查看了框架作者的详细解释,但也许我想念应该如何使用 to。也许 Tasty 框架内有更好的功能来实现预期?TestNametestCasetestGroupTastywithResourcesTestTree

问题:

如何TestTree从具有所需描述性输出的文件系统动态创建一个?

0 投票
3 回答
246 浏览

haskell - IO monad haskell 中的阶乘函数

我在 IO monad haskell 中做阶乘函数。我按照示例 mod3 使用 IO monad 执行阶乘函数。我不明白为什么我的代码是错误的。我想看看n>=1,然后对n做阶乘。最后添加到 (n,r2) 并返回。任何人都可以帮助理解吗?

0 投票
1 回答
294 浏览

f# - 在 F# 中读/写另一个进程内存单子

我致力于单人游戏的作弊。我喜欢函数组合、不变性和没有样板的代码,所以这就是我决定用 F# 编写作弊代码的原因。我完成了一些工作正常的事情。我知道代码远非完美,但今天我开始使用 F#。

我想知道是否有办法以某种方式从我的代码中消除副作用。你能给我一些提示如何实现吗?

谢谢,

拉法尔

0 投票
2 回答
276 浏览

haskell - 哈斯克尔。为什么它在工作?(对 Monad 的迭代)

我跑:

我得到了输出:

我看不到这个函数是如何映射所有列表的值的?没有任何递归或迭代,只需将 monad 内部 m 值传递给函数 f。我在这里缺少什么?

0 投票
1 回答
66 浏览

haskell - 使用状态和随机性的概念运行此一元计算

我描述了以下计算:

而且我想知道如何运行bar,以便在预期中bar评估到True一半的时间。

0 投票
1 回答
52 浏览

xml - Parse other XML files whilst parsing tree with HXT

I am parsing XML files that describe User Interface for a game and try to learn HXT at the same time. I can successfully parse a single XML file. But could not figure what would be the best way to open and parse other XML files whilst inside getWindow function.

Each XML consists of number of Windows. Each Window has name and libraryName. The latter being the name of the XML file that describes the window. For instance, the root looks like this:

And then there is a separate XML file for each window. E.g. "window_home":

I parse root DOMDocument.xml with this code:

Since the getWindow function is not wrapped inside IO what would be the best way to achieve a desired behaviour?

0 投票
1 回答
1820 浏览

haskell - Haskell:无法将预期类型“IO b”与实际类型 bool 匹配

我收到以下错误:

定义为gameFunc

和功能upCheck

所以基本上这里发生的upCheck是一个检查某些条件是否匹配的函数,当我从 ghci 调用它的方式与我从函数调用它的方式相同时gameFunc,我会得到一个结果True。但是,如果我从函数中调用它,则会gameFunc收到上述错误。任何想法出了什么问题?

0 投票
1 回答
669 浏览

haskell - Haskell 安全 IO

我正在尝试编写一个简单的函数来安全地读取文件(如果它存在)并且如果文件不存在则什么都不做:

这在编译时失败

这是有道理的,因为:t readFileis readFile :: FilePath -> IO String。例如返回的函数IO String(并且IO String与 不同IO ()

将签名更改为String -> IO String

这也是有道理的,因为 handleExists 有类型IO ()

为了节省大家的查找,catch 被导入: import Control.Exception catch 的签名是: catch :: Exception e => IO a -> (e -> IO a) -> IO a

我真正的问题是,如何在 Haskell 中编写这种错误安全、灵活的代码?更具体地说,我必须对这个函数做出什么改变才能让它同时处理成功案例和失败案例?

0 投票
1 回答
317 浏览

haskell - 如何在 Spock 请求处理程序中使用“IO 字符串”?

我有以下函数可以生成 1024 的倍数的随机字符串:

我想使用 Spock 将其公开给网络,例如:

但这是不正确的,因为最里面的do-block 产生一个IO b0,而不是 Spock 的预期类型:

如何在 Spock 获取请求处理程序中使用我的IO-driven 随机字符串函数?