问题标签 [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 回答
1614 浏览

loops - Haskell 中使用 monad 的 while 循环示例

我想使用 monads 在 haskell 中编写一个循环,但我很难理解这个概念。

有人可以为我提供一个简单的 while 循环示例,同时满足某些涉及 IO 操作的条件吗?我不想要一个抽象的例子,而是一个真正可行的具体例子。

0 投票
1 回答
1476 浏览

haskell - 如何从 Haskell 的标准输入中读取三个连续的整数?

我想12 34 56使用 Haskell 将输入读取为三个整数。

对于单个整数,可以使用myInteger <- readLn. 但是对于这种情况,我没有找到任何解决方案,除了首先读取一行,然后用 , 替换所有空格,(使用类似:

) 然后打电话read '[' ++ str ++ ']'感觉很hackish。此外,它不允许我说我想读取三个整数,它会尝试从标准输入读取任意数量的整数。

一定有更好的方法。

请注意,我想要一个依赖外部包的解决方案。使用例如 Parsec 当然很棒,但是这个简单的示例不需要使用成熟的 Parser Combinator 框架,对吗?

0 投票
1 回答
174 浏览

haskell - 嵌套在其他 monad 中的 IO 操作未执行

我有一个

ParseResult 是此处定义的单子:https ://hackage.haskell.org/package/haskell-src-exts-1.13.5/docs/Language-Haskell-Exts-Parser.html#t:ParseResult

我想将这些字符串写入https://hackage.haskell.org/package/HaTeX-3.17.1.0/docs/Text-LaTeX-Base-Writer.htmlLaTeXT m ()中定义的字符串

运行此函数不会创建任何文件。

但是代码:

将创建一个新文件。

两组代码类型检查。

0 投票
4 回答
325 浏览

haskell - 从 IO a -> a? 写一个函数

获取功能getLine- 它具有以下类型:

我如何String从这个IO动作中提取?


更一般地说,我如何转换它:

对此:

如果这是不可能的,那我为什么不能这样做?

0 投票
0 回答
120 浏览

haskell - 在 forkIO/catch 块内记录

我正在构建一个仆人应用程序,该应用程序使用通过获取 url 开始的摇动生成报告。直到请求记录东西,这就像一个魅力,但现在我遇到了一个问题。

一个处理程序start开始生成报告 - 因为这可能需要相当长的时间 - 我立即返回 200,并生成一个进程来完成实际工作,日志记录由logging-effect.

我的处理程序的简化版本start如下所示

AppMonadLog (WithTimestamp (WithSeverity Doc))- 所以logInfo工作正常。✔</p>

准确地说App是以下新类型:

但是当我尝试logError在部件内部调用时caught- 除了cleanup删除生成/临时文件的操作之外,我得到一个编译器错误。✘</p>

这是正确的,没有这样的实例IO,谢谢 ghc 告诉我这一点并且在运行时没有崩溃!

这些是我正在经历的想法-也许有人看到了错误的假设:

  • 我必须使用forkIOfork 报告生成?
  • 如果有类似的东西,forkIOish :: MonadIO m => m () -> m ThreadIdcatchIsh :: (MonadIO m, Exception e) => m a -> (e -> m a) -> m a 会帮助我吗?- 我认为是的 - 在我的情况下,我可以在内部liftIO调用时进行清理和 mkReport 部分。logErrorApp
  • 有没有办法在提升的部分中“解除”单子变压器堆栈的属性?
0 投票
1 回答
458 浏览

haskell - 从 IO 展开 a (a)

过去两周我一直在学习 Haskell,并决定在 HackerRank 等地方尝试挑战。这需要学习IO。我在 StackExchange 上阅读了很多答案,一般要点是您不要 unwrap ,您只需在函数IO a内操作该数据。IO既然如此,如果不允许我从 main 向它们发送数据,那么所有纯函数的意义何在?这是一些读取多少个测试用例的代码,然后为每个测试用例读取N个有序对。

在这一点上,我有一个IO [(Int, Int)]内部rs。我想将该数据发送到此函数:

但我似乎无法弄清楚如何做到这一点。任何有关如何使用我从用户那里读取的数据调用此函数的帮助或建议将不胜感激。或者,如果我从错误的角度着手,那么我应该做什么的指针也会起作用。


编辑: 通过阅读这里的许多其他问题,我现在有了一个普遍的想法,即一旦你进入IO你就会被困在那里。但我似乎找不到的是用IO数据调用纯函数并取回IO数据的语法。我尝试了以下一些方法:

我能够让它工作:

虽然我仍然不清楚为什么这会让你通过IO [(Int, Int)]to validFunction

0 投票
2 回答
269 浏览

scala - Scala 标准 API 中的 IO Haskell Monad 等价物是什么?

我知道 Scalaz 中的 IO 运算符有一些几乎相同的实现,例如putStrLn :: String -> IO (),getLine :: IO String但我的意思是关于 Scala 标准 API,为什么没有这样的等价物?我知道 Scala 不像 Haskell 那样是一种纯语言,并且有副作用,但我认为这种数据类型非常具有描述性和有用性。我不知道是否TryOption或者Either会做这项工作。

0 投票
1 回答
306 浏览

haskell - 在 Haskell 中写入多个文件

在 Haskell 中,如何写入任意数量的文件?

举个例子,假设我想把这些字母a通过z并将它们放在以它们的内容字母命名的文件中。最初的尝试是执行以下操作:

这产生了以下错误:

无法将预期类型“IO ()”与实际类型“[IO ()]”匹配

我觉得应该有一种方法可以遍历 do 块中的列表,但我还没有找到它。

0 投票
2 回答
855 浏览

scala - IO and Future[Option] monad transformers

I'm trying to figure out how to write this piece of code in an elegant pure-functional style using scalaz7 IO and monad transformers but just can't get my head around it.

Just imagine I have this simple API:

Using this API I can easily write impure function with OptionT transformer like this:

As you have noticed - this function contains findProfile() with a side-effect. I want to isolate this effect inside of the IO monad and interpret outside of the pure function but don't know how to combine it all together.

Any peaces of advice on how it might be done?

0 投票
1 回答
113 浏览

haskell - 实现“m (ta) -> (a -> m (tb)) -> m (tb)”的惯用方式

bind函数 ( )>>=具有签名:

但是,我想要一个带有签名的函数:

具体来说,我有一个给定整数的函数,它返回 IO 中的整数列表:

但我想将它应用到一个IO of list of Integers并且我不能使用常规绑定函数,因为它被包装在两个容器中,即包含在 IO 中的列表。在hoogle上搜索没有帮助。

我正在使用以下方法来实现这一点:

假设函数的实现是:

我正在使用两个辅助函数来获得我想要的东西:

以上工作,但我想知道是否有更好/惯用的方法来实现这个在haskell?