- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的目标是创建一个函数,该函数在 ReaderT WriterT 堆栈或 RWS 堆栈中使用 list monad。更一般地说,我如何在 mtl 类型类(如 MonadReader、MonadWriter)中使用列表 monad?
我为什么要这样做?这个问题是 Beginning Haskell 中的一个练习.它要求我“使用 MonadReader 和 MonadWriter 包装基本列表 monad 的功能。要检查该功能是否通用,请使用两个不同的 monad 来 [测试] 请求的功能:ReaderT r (WriterT w []) a
和 RWST r w s m a
”所以这本书暗示这个有可能。
我不知道如何“告诉”编译器使用列表单子(monad)。如果我使用 ask >>= lift
或 ask >>= lift . lift
我可以让 2 级堆栈 ( RWST []
) 或 3 级堆栈 ( ReaderT WriterT []
) 工作,但不能同时工作。
我的问题的重点:
pathImplicitStack' start end | start == end = tell [end]
pathImplicitStack' start end =
do (s0, e0) <- ask >>= lift
guard $ s0 == start
tell [start]
pathImplicitStack' e0 end
pathImplicitStack' :: (MonadReader [(Int, Int)] m, MonadWriter [Int] m, MonadPlus m) => Int -> Int -> m ()
我知道这是不对的,可能缺少列表单子(monad)。另外,我认为 MonadPlus 可能在类型签名中很有用,但我不太确定。
do (s0, e0) <- ask >>= lift
是给我带来麻烦的人。我尝试了 0、1 和 2 次升降机,但均未成功。我想
ask
对于
[(Int, Int)]
然后使用 list monad 只处理
(Int, Int)
(让列表单子(monad)为我尝试所有可能性)。
pathImplicitStack'
具有这两个功能(或非常相似的功能):
pathImplicitRW :: [(Int, Int)] -> Int -> Int -> [[Int]]
pathImplicitRW edges start end = execWriterT rdr
where rdr = runReaderT (pathImplicitStack' start end) edges :: WriterT [Int] [] ()
pathImplicitRWS :: [(Int, Int)] -> Int -> Int -> [[Int]]
pathImplicitRWS edges start end = map snd exec
where exec = execRWST (pathImplicitStack' start end) edges ()
{-# LANGUAGE FlexibleContexts #-}
module Foo where
import Control.Monad.Reader
import Control.Monad.Writer
import Control.Monad.RWS
graph1 :: [(Int, Int)]
graph1 = [(2013,501),(2013,1004),(501,2558),(1004,2558)]
pathImplicitRW :: [(Int, Int)] -> Int -> Int -> [[Int]]
pathImplicitRW edges start end = execWriterT rdr
where rdr = runReaderT (pathImplicitStack' start end) edges :: WriterT [Int] [] ()
pathImplicitRWS :: [(Int, Int)] -> Int -> Int -> [[Int]]
pathImplicitRWS edges start end = map snd exec
where exec = execRWST (pathImplicitStack' start end) edges ()
pathImplicitStack' :: (MonadReader [(Int, Int)] m, MonadWriter [Int] m, MonadPlus m) => Int -> Int -> [m ()]
pathImplicitStack' start end | start == end = tell [end]
pathImplicitStack' start end =
do (s0, e0) <- ask >>= lift
guard $ s0 == start
tell [start]
pathImplicitStack' e0 end
pathImplicitStack' :: (MonadReader [(Int, Int)] (t []), MonadWriter [Int] (t []), MonadPlus (t []), MonadTrans t) => Int -> Int -> t [] ()
pathImplicitStack' start end | start == end = tell [end]
pathImplicitStack' start end =
do (s0, e0) <- ask >>= lift
guard $ s0 == start
tell [start]
pathImplicitStack' e0 end
最佳答案
因此,在问题的要求范围内这样做的基本问题是没有 MTL 库函数可以从可能是任意级别的列表 monad 中提升。但是,您可以“作弊”:MonadPlus
组合 Monad
的实例无论深度如何,都从底层列表 monad 继承,您可以使用它来生成所需的操作:
do (s0, e0) <- ask >>= msum . map return
pathImplicitStack' :: (MonadReader [(Int, Int)] m, MonadWriter [Int] m, MonadPlus m) => Int -> Int -> m ()
MonadPlus
用于链接替代操作的 API,而不是直接使用底层列表 monad。
关于haskell - 在单子(monad)变压器类型类中使用列表单子(monad)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24195617/
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
我是一名优秀的程序员,十分优秀!