- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
>= \_ -> getLine >>= putStr 它做了合理的事情,两次请求一个字符串,然后打印最后一个输入。因为编译器无法知道外部影响是什么getLine有,它-6ren">
考虑片段 -
getLine >>= \_ -> getLine >>= putStr
getLine
有,它必须执行它们,即使我们丢弃了第一个的结果。
runM $ lift getLine >>= \_ -> lift getLine >>= lift putStr
runM :: M a -> IO a
lift :: IO a -> M a
最佳答案
延迟 IO 通常使用 unsafeInterleaveIO :: IO a -> IO a
来实现,它会延迟 IO 操作的副作用,直到需要它的结果,所以我们可能不得不使用它,但让我们先解决一些小问题。
首先,lift putStr
不会输入检查,如 putStr
有类型 String -> IO ()
, 和 lift
有类型 IO a -> M a
.我们将不得不使用像 lift . putStr
这样的东西。反而。
其次,我们必须区分应该惰性的 IO Action 和不应该惰性的 IO Action 。否则 putStr
永远不会被执行,因为我们没有使用它的返回值 ()
任何地方。
考虑到这一点,这似乎至少适用于您的简单示例。
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
import System.IO.Unsafe
newtype M a = M { runM :: IO a }
deriving (Monad)
lazy :: IO a -> M a
lazy = M . unsafeInterleaveIO
lift :: IO a -> M a
lift = M
main = runM $ lazy getLine >> lazy getLine >>= lift . putStr
main = runM $ do
foo <- lazy readLn
bar <- lazy readLn
return $ foo / bar
unsafeInterleaveIO
又长又丑有一个很好的理由:提醒你使用它的危险。让人们知道它何时被使用而不是将其隐藏在 monad 中是个好主意。
关于haskell - Haskell中的"Truly"惰性IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7191058/
考虑片段 - getLine >>= \_ -> getLine >>= putStr 它做了合理的事情,两次请求一个字符串,然后打印最后一个输入。因为编译器无法知道外部影响是什么getLine有,它
我已经为这个问题奋斗了几个小时,并且一直在努力使用正确的 MySQL 语法。任何关于我正在寻找的 SQL 类型的指示都将不胜感激。 请考虑这两个简单的表格: purchase: id email
假设我有一个复合数据类型 - data M o = M (String,o) 现在,我可以定义一个适用于 ALL M 的函数不管o .例如 - f :: M o -> M o f (M (s,o))
我想使用 Bootstrap 将 4 张图像放入 4 个堆叠列中。这是我的代码: Bootstrap Example
我想使用 Bootstrap 将 4 张图像放入 4 个堆叠列中。这是我的代码: Bootstrap Example
2个异步函数可以同时执行吗?例如在下面的代码中,是否有可能执行第一个 setTimeout 中的命令 let xEquals2 = x === 2;,然后是第二个 setTimeout 中的相同命令,
这个问题在这里已经有了答案: Is there any reason to continue using IntentService for handling GCM messages? (1 个回
我的应用程序需要将文件写入文件系统上的受限位置。 为此,我使用了一个以 root 身份运行的辅助工具。 一切正常,遵循 this example ,我的帮助工具已正确安装并运行。我使用此解决方案能够“
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我有三个 inline-block div,具有明确定义的宽度。 (它们分别是导航栏、工具栏和应用程序的横幅。) 当页面很宽时,我们需要它们去: [a][b][c] 很简单。但是当页面变窄(移动)时,
事实上,私有(private)方法是在C#中实现的,仍然可以通过Reflection进行搜索。 我要做的是编写public string Encrypt(string data)和private st
是否可以找到在匿名函数 (IIFE) 中声明的随机生成值,如果可以,如何找到? (function () { // assuming an epic, obscured, random funct
我有两个 html 文档,我希望它们共享一个变量及其值。 我尝试使用 Web API 存储来代替 JavaScript 中的“真正全局”变量: var number = parseIn
例如,我可以定义一个递归 Python lambda 函数来计算斐波那契数列,如下所示: fn = lambda z: fn(z-1)+fn(z-2) if z > 1 else z 但是,如果我尝试
我有一个相当简单的 API,用于添加,然后在 SQL Server 中更新一个小表。当我在调试器中进入我的数据访问代码时,它将插入(或更新,表现出相同的奇怪行为),但当我跨过相同的代码时则不会。当然,
在此线程中 https://stackoverflow.com/a/66163971/6514559据解释, 如果 Azure 决定您的应用程序需要扩展并创建新的主机,并假设有两个主机,那么这些参数的
标题确实说明了一切。我似乎无法在文档中找到“安全”关键字的正确答案,但是 w:1 = 等待独立服务器(可以是replicaSet env 中的主服务器),这似乎符合我对“安全”的理解。 此外,我们在
我对 PostgreSQL BDR 感到困惑,我有几个问题: 问题 1:BDR 真的是 PostgreSQL 的多主机吗? 根据 the docs here ,它说: The BDR (Bi-Dire
我是一名优秀的程序员,十分优秀!