- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经定义了我自己的 WriterT 版本以及一个解包函数:
newtype WT w m a = WT (m a, w)
unWT :: (Monoid w, Monad m) => WT w m a -> (m a, w)
unWT (WT cmaw) = cmaw
现在我尝试定义 monad (WT w m)
,但没有成功:
instance (Monoid w, Monad m) => Monad (WT w m) where
return x = WT (return x, mempty)
wtwma >>= fawtwmb = WT $ let (ma, w1) = unWT wtwma
(mb, w2) = unWT $ do a <- ma
fawtwmb a
in (mb, mappend w1 w2)
错误位于 do 表达式中,即我尝试从 ma
中提取 a
的位置:
Expected type: WT w m a, Actual type: m a
我尝试了一些变化,总是得到相似的结果。我无法为此 monad 定义 bind
。
我的主要问题是:如果单子(monad)位于一对内,我如何提取它的值?
最佳答案
想象一下以下计算:
tellLine :: WT String IO ()
tellLine = do
input <- WT (getLine, "")
WT (return (), input)
impossible :: String
impossible = snd (unWT tellLine)
如果这按“预期”工作,我们应该得到 impossible
是用户输入的字符串。但是,我们无法在 IO 之外执行此操作;这样的impossible
不可能是一个纯粹的String
,因为它在这里。因此不可能产生作为 monad 中的计算结果接收的 w
。
另一种可能性是简单地返回第一次绑定(bind)之前发生的w
,因此我们不必依赖于任何单子(monad)操作。唉,其中一项身份法阻碍了我们。
return x >>= f = f x
在这里我们可以看到“在第一个绑定(bind)之前”不可能是一个有意义的概念,因为左边有一个绑定(bind),但右边没有。因此返回第一次绑定(bind)之前发生的 w
肯定会违反这个 monad 定律。
唯一剩下的可能性是w
始终为mempty
。但这也不起作用,因为有其他身份法则。
m >>= return = m
因此,如果 m
具有非 mempty
值 w
,则绑定(bind)将消除它并违反此定律。
这个WT
不能是一个monad转换器。有一个WriterT
转换器,但它被定义为m (a,w)
,这避免了这些问题。
关于haskell - 定义自制 monad 变压器的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31392378/
streaming套餐优惠a zipsWith function zipsWith :: (Monad m, Functor h) => (forall x y. f x -> g y ->
我正在尝试制作也可以在程序包上运行的 Dart 转换器,但是我无法弄清楚当前的状态 class MyTransformer extends Transformer implements LazyTra
我的pubspec.yaml文件中包含以下行 transformers: - di - polymer: entry_points: web/index.html di软件包作为依赖导
我正在尝试从 attoparsec 解构 IResult monad分成几 block 。这是IResult data IResult t r = Fail t [String] String
我正在阅读现实世界 Haskell 中的 monad 转换器。在以下示例中,堆栈为 Writer在顶部State在Reader之上在IO之上。 {-# Language GeneralizedNewt
我已经编写了单元测试用例来在我的 Mule 流程中单独测试消息处理器。 但是单元测试失败并出现错误 org.mule.api.transformer.TransformerMessagingExcep
“Monads 允许程序员使用顺序构建 block 来构建计算”,因此它允许我们组合一些计算。如果是这样,那为什么下面的代码不能运行呢? import Control.Monad.Trans.Stat
这个问题与其他地方已经涵盖的问题很接近,但我还没有找到任何专门解决这个问题的内容(至少不是以我能够理解的方式)。 我想以取决于各种随机选择的方式更新状态。由于我正在使用 RandomSource 类型
我是 Spring 集成新手,正在从事 SI 项目。我正在做一项简单的工作,从 channel (fromAdapter)获取消息,调用转换器并将输出发送到另一个 channel (toQueue)。
我最近安装了 OrientDB 并尝试使用 ETL 模块创建导入。 在 OS X 上运行,我使用自制软件安装了 orientDB。 我创建了以下 ETL 脚本: { "config": {
我有两个变压器,平移和旋转如下: namespace bg = boost::geometry; namespace trans = bg::strategy::transform; trans::t
我指的是来自 stackoverflow 的这个答案,但我找不到关于我的问题的任何线索:[https://stackoverflow.com/questions/63141267/importerro
我正在寻找一个 monad 转换器,我可以用它来发出 HTTP(等)类型的请求/响应。用途与 cURL 命令行工具类似。 [已编辑] 最佳答案 嗯,有 curl包,它使用 IO monad。 关于ha
向哈斯凯勒同胞们问好。 这是一个更大的约束满足问题的玩具版本,我是目前正在努力。 下面的代码使用列表 monad 转换器来表示给定的正整数n作为不同小偶数的总和方法。 import Control.M
我正在寻找一个让我很困扰的场景的解决方案。 我正在开发 mule 3.3。 我有一些传入的 XML 和来自丰富器的第二个 XML。 现在,来自丰富器的 xml 将被添加到我的输入 XML 中。 我的流
我指的是来自 stackoverflow 的这个答案,但我找不到关于我的问题的任何线索:[https://stackoverflow.com/questions/63141267/importerro
我想将 SXSSF 转换器与 JXLS 一起使用。我试图以这样一种方式编写我的模板,即我不会得到“试图在已经写入磁盘的范围内写入一行”异常。该模板捕获已知列(例如“HEADER 0”)和未知列(以“_
早上好,我正在尝试复制此内容:http://jxls.sourceforge.net/getting_started.html 使用我自己的集体诉讼而不是员工。但我有一些问题。 这是我的代码: pac
我们在 ASP.NET MVC 元素中使用 BundleTransformer 来 bundle 我们的样式文件。 这很好用,但是我们注意到当我们使用 @import CSS at 规则在 LESS
我正在微调来自 huggingface 的 bert 模型.有没有办法手动设置某个词块的初始嵌入?例如使单词“dog”的初始嵌入等于 torch.ones(768) .谢谢! 最佳答案 您可以设置 B
我是一名优秀的程序员,十分优秀!