- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要一个 monad,它将在计算过程中报告错误数据类型(而不是字符串)。我探索了几种不同的实现:
State [Error] a
monad,其中使用 cons (:
) 添加错误,最后我在该单子(monad)上调用 reverse
错误列表以获取实际订单。Writer (Endo [Error]) 一个
monad,我可以在其中使用 Endo (e :)
添加错误。不过,我担心身份函数的所有无用串联。如果我从不添加任何错误,那么我的 Endo
仍然是一个由许多串联的 id 组成的大型数据结构。 id
组合。Reader (MVector s Error) (ST s a)
monad,在添加新错误时我会在其中增长错误向量。矢量包中没有预定义的“推送”函数,因此我必须编写自己的函数。此外,它还需要我在一些计算中添加一个 ST
monad。在命令式语言中,我会使用向量并调用“push”方法或等效方法,这将为我提供摊销 O(1) 追加,并且结果列表将按正确的顺序排列。
对于此任务,Haskell monad 的最有效实现(相对于命令式语言的效率)是什么?
我的一些代码位于 ST
monad 中,而我的一些代码是纯代码。我可以针对这些不同的用例使用不同的 monad。我应该为我的 ST
代码使用与纯代码不同的东西吗?
最佳答案
您应该将日志记录单子(monad)基于 StateT
Seq
。使用 StateT
你将拥有一个 monad 转换器,它可以将你的日志记录功能覆盖在任何其他 monad 上。
Some of my code is in an
ST
monad and some of my code is pure. I can use different monads for these different use cases. Should I use something different for myST
code than for my pure code?
对于 ST
monad 中的内容,您可以使用如上所述的 monad 转换器。对于纯代码,事情更加棘手:您必须将纯代码重写为单子(monad),或者至少 applicative 。此时它不再是纯粹的,因为日志记录是一个副作用。很难进一步提供建议,因为我不知道你想要实现什么目标;从结果类型内的纯代码返回日志数据可能更有意义。
关于haskell - 错误日志 monad 的高效实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54315023/
monad 被定义为类别 C 上的内仿函数。假设 C 具有类型 int 和 bool 以及其他构造类型作为对象。现在让我们考虑在这个类别上定义的列表 monad。 根据它的定义,list 是一个内仿函
我试图采取例如ExceptT a (StateT A M) , 对于某些具体类型 A和单子(monad)M ,并将它们包装到我的新自定义单子(monad)中。 首先我确定StateT A M经常出现在
我读到(例如 here 和 here )所有基本单子(monad)(Mabye, Error, ...) 源自其相应的 monad 转换器(MaybeT, ErrorT, ...) 使用身份 mona
Haskell 的状态单子(monad) State s a迫使我保持相同类型的 s在整个做 block 期间。但是由于 state monad 实际上只是一个函数,如果我将它定义为 State
我一直在阅读some materials on free monads而且我真的不认为我离实现更近了,但我认为我更接近于理解它们是什么! 鉴于上述大量资源,我的理解是自由单子(monad)从“计算”工
假设我有一个由两个 monad 操作组成的函数: co::Monad m => m a -> m a -> m a 您可以将 co 视为一个高阶函数,它描述两个单子(monad)操作如何相互协作来完成
在 SO解释了为什么像 scalaz、cats (Scala) 或 Arrow (Kotlin) 中的 Validation 不能是 monad。 据我所知,这是因为他们已经根据应用仿函数对 mona
我对 Haskell 还很陌生,并且慢慢地意识到 Monad fail 的存在有问题。真实世界的 Haskell warns against its use (“再一次,我们建议您几乎总是避免使用失败
我正在阅读现实世界 Haskell 中的 monad 转换器。在以下示例中,堆栈为 Writer在顶部State在Reader之上在IO之上。 {-# Language GeneralizedNewt
我看到的典型 Pause monad 实现如下所示(基于 Giulia Costantini 和 Giuseppe Maggiore 编写的 Friendly F# 的第 5 章)。 open Sys
“Monads 允许程序员使用顺序构建 block 来构建计算”,因此它允许我们组合一些计算。如果是这样,那为什么下面的代码不能运行呢? import Control.Monad.Trans.Stat
这是我第一次认识 Monad Transformers,所以答案可能很明显。 假设我在 StateT MyMonad MyType 类型的 do 块中,我想让另一个相同类型的函数修改状态并返回 MyM
人们通常说类型是单子(monad)。 在某些函数式语言和库(如 Scala/Scalaz)中,您有一个类型构造函数,如 List 或 Option,您可以定义一个与原始类型分离的 Monad 实现。所
我的目标是创建一个函数,该函数在 ReaderT WriterT 堆栈或 RWS 堆栈中使用 list monad。更一般地说,我如何在 mtl 类型类(如 MonadReader、MonadWrit
我只是想知道是否有一个简洁的术语来表示既是单子(monad)又是单子(monad)的东西。我做了一些搜索,我知道these structures exist ,但我还没有找到他们的名字。 最佳答案 在
我正在玩写一个网络应用程序。在这种情况下,我使用 scotty和 redis ,但是这个问题出现在任何 web/db 组合中。在此之前我使用了 happstack,所以我也喜欢那里的一个例子。 Sco
是 x >>= f相当于 retract (liftF x >>= liftF . f) ? 也就是说,从同样是 Monad 的 Functor 构建的自由 monad 的 monad 实例是否将具有
我正在尝试编写一个只能包含 Num 的新 monad。当它失败时,它返回 0,就像 Maybe monad 在失败时返回 Nothing 一样。 这是我到目前为止所拥有的: data (Num a)
我正在使用 operational monad作者:海因里希·阿普菲尔姆斯。 我想用结果类型的 monad 参数化解释器。 我的代码的以下版本编译: {-# LANGUAGE GADTs #-} im
假设所有的 monad 都可以用 Free 来表示。 (如果这不是真的,什么是反例,为什么)?怎么可能the continuation monad或其对应的变压器用 Free 表示或 FreeT -
我是一名优秀的程序员,十分优秀!