- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我第一次认识 Monad Transformers,所以答案可能很明显。
假设我在 StateT MyMonad MyType 类型的 do 块中,我想让另一个相同类型的函数修改状态并返回 MyMonad MyType 类型的值。我怎样才能做到这一点?我想的例子here在 guessSession 中显示它,但我似乎无法理解如何应用它!
最佳答案
如果要在 monad 转换器中使用底层 monad,可以使用 lift
:
lift :: (MonadTrans t, Monad m) => m a -> t m a
t
是
StateT MyState
, 和
m
是
MyMonad
.因此,例如:
foo :: StateT MyState MyMonad MyType
foo = do
modify $ \s -> s+1
lift $ doSomethingInMyMonad 42
MyMonad MyType
的值。从内部;这是一种更直接的转换:他们将一个 monad 变成一个新的,能够在转换后的 monad 中运行操作。所以,你可以想到
StateT s m
和普通的一样
State s
monad,除了你也可以使用
lift
在
m
中运行转弯 Action 进入行动
StateT s m
.
StateT
,
ReaderT
等,您实际上不必使用
lift
;诸如
modify
和
ask
在堆栈中的某处使用正确的转换器在任何 monad 中工作。 (堆栈只是转换后的 monad 的塔,例如
StateT s (ReaderT r IO)
。)
IO
在底部,有一个提升
IO
的便利功能。操作任意数量的层:
liftIO :: (MonadIO m) => IO a -> m a
liftIO (putStrLn "Hello, world!")
工作于
IO
,
StateT Int IO
,
ContT r (WriterT [String] IO)
, 等等。
foo
这里实际上不是函数;更准确的术语是 Action 或计算。)
关于haskell - monad 变压器内 monad 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8943743/
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
我是一名优秀的程序员,十分优秀!