问题标签 [lifting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 推导出这个无点代码的步骤是什么?
我正在查看一些代码并遇到以下 gem,我敢打赌它是pointfree
输出的复制粘贴:
(我认为对于这个特定问题,以下内容比通常foo
/更合适bar
:P)
有人会好心解释从:
(i)coordinates b = (x b, y b)
到:
(ii)简化所需的步骤coordinates = liftM2 (,) x y
吗?
特别是,我对使用 有点困惑,liftM2
因为我什至不知道 monad 潜伏在背景中。
我知道(i)也可以表示为:coordinates s = (,) (x s) (y s)
但我不确定在哪里/如何进行。
PS以下是我怀疑它来自pointfree
(输出来自GHCI
并:pl
别名为pointfree
)的原因:
haskell - 提升以固定单子变压器堆栈的*内部*
假设我有一个IO Int
包裹在 a 中StateT MyState
,那么我有一个State MyState Int
我想在堆叠的 monad 中使用的值。在这种内在的意义上,我如何举起它?我已经知道要使用lift
或者liftIO
如果我得到与内部兼容的东西,我只需要提升到外部 monad,但现在我遇到了相反的问题:值已经在外部 monad 但不在内部。
例如:
我是否必须“获取”状态,手动将其推过 runState 并再次将其全部装箱,还是有一些通用的方法可以做到这一点?
顺便说一句,那个 sim 参数是一大堆与 IO 无关的有状态函数,所以StateT MyState IO a
如果可以避免的话,我有点不愿意让它们全部返回。
haskell - 在 Haskell 中,是否有 (liftM .liftM)、(liftM .liftM .liftM) 等的别名?
在 Haskell 中,(liftM .liftM)、(liftM .liftM .liftM) 等有别名吗?
这样我就不必那么冗长了,例如:
matlab - 哈尔吊装方案
我正在尝试将提升方案版本 haar 应用于图像。我开始使用互联网上发布的代码应用它:
事实上,上面的代码应用了 LEVEL1 的提升 Haar 小波。如何修改此代码以应用 2 或 3 级提升 Haar 小波?
任何帮助将不胜感激!
克里斯蒂娜
haskell - 展平单子堆栈
所以我在我的第一个严肃的haskell项目中都有这种代码:
我如何尝试实现我的目标肯定可能有问题(可能有更简单的方法来做到这一点)但目前我有兴趣学习如何以更好的方式处理一堆 monad 转换器,如果有的话。这是我弄清楚如何进入r
上下文B
并将其提升到堆栈中更高的单子的唯一方法。举起整个块而不是最初的陈述是我自己能做到的。
我还经常得到的是我发现如果深层单子是lift
可以避免的链。不过,我不知道其他单子的通用方式。liftIO
IO
当他最终处理这样的堆栈时,是否有一种模式可以遵循,并且必须在某个级别提取一个值,在不同级别提取一个不同的值,结合这些并影响两个级别中的任何一个级别,或者可能还有另一个级别?
是否可以以某种方式操纵堆栈而无需提升整个块(这导致let
和绑定变量的范围和限制到内部块),也不必lift . lift . ... lift
单独操作?
haskell - 整理 Monads - 将 monad 转换器的应用程序转变为新型 monad
我正在尝试采用例如ExceptT a (StateT A M)
某些具体类型A
和 monad M
,并将它们包装到我的新自定义 monad 中。
首先,我发现它StateT A M
经常出现在其他上下文中,因此我决定最好将它单独包装在 monad 中M1
,然后包装ExceptT a M1
到M2
.
所需的属性是创建M1
和M2
实例MonadState
和类M
(假设它被称为MyMonadClass
)。也M2
应该是MonadError
.
首先,我从简单的类型同义词开始:
然后我想我会先画出实例声明(不实现实例),这就是我第一次陷入困境的地方。instance MonadState A (MyState)
似乎不是正确的语法。我想我必须创建newtype MyState' a = StateT a M
然后type MyState = MyState A
(让我们不要在不必要的地方使用语言扩展)。
但是,一旦我开始将同义词转换为newtype
声明,我就开始失去与StateT A M
andExceptT ...
类型的联系。
现在已经实现的转换器消失了,我想我正在尝试做一些没有多大意义的事情。所以我的问题是:如何将这种行为正确地包装到新的复合 monad 中,以便可以访问下面的层,从而避免不必要的提升,并使事情保持清晰和井井有条。
haskell - 多态函数的类型约束,如提升
所以我有这个代码
我让编译器抱怨它无法证明m
from 签名lift
是类型的,MonadA
或者这就是我阅读这些神秘错误消息的方式。
有没有办法解决这个问题?我认为我需要约束才能实例化如下:
还会有这样的执行f
工作吗?(由于上述错误,我没有走那么远)。我希望f
在右侧解决f
内部单子a
。
编辑:它确实有助于删除类型约束newtype MonadA a => MyStateT ...
以避免我提到的确切错误。但是,我之前将另一个错误归因于同一件事,请考虑上面示例代码的延续(重复某些部分,现在没有类型限制):
错误是
在实施中fB
。早些时候我试过class MonadA m => MonadB m
没有用。a
与匹配甚至没有意义StateT A m
。因为MyStateT
它的一个实例MonadState A
应该可以工作,不是吗?
编辑:
好的,让它工作:
愚蠢的我。
haskell - Haskell:编写一个可以提升到列表上的函数
我有以下两个功能:
是否可以编写一个函数来 1) 完成什么noneOnEmptyA
,以及 2) 可以提升它以完成什么noneOnEmptyB
?问题的症结似乎在于noneOnEmptyA
检查空文本,同时noneOnEmptyB
检查空列表;但是,noneOnEmptyA
提升以便对列表进行操作(如在fmap noneOnEmptyA
返回 type中[T.Text]
)检查列表中的空文本,而不是检查列表本身是否为空。
haskell - 自动将 Either 提升到 exceptT
假设我有这段(可以说是误导)代码:
ghc
给我以下错误:
Either
将 a 提升为的最标准方法是ExceptT
什么?我觉得必须有某种方式,因为Either String
是MonadError
.
我写了自己的提升函数:
但对我来说,这仍然感觉不对,因为我已经在
ExceptT
单子变压器内部工作了。
我在这里做错了什么?我应该以不同的方式构建我的代码吗?
haskell - 提升的“if”-函数行为异常
在我的程序中,我使用if'
在其中一个模块中定义的函数而不是内置if-then-else
构造。它的定义很简单,而且工作得很好。
但是,在代码中有一个地方我需要将它应用到 monad 值(IO
在我的例子中),即类型签名应该看起来有点像IO Bool -> IO a -> IO a -> IO a
. 自然地,我试图抬起它。
但是当我尝试评估表达式时,我没有得到我期望的结果。
我知道<*>
描述是“顺序应用”,所以也许就是这样。但是这里发生了什么?我可以在不编写全新的专用函数的情况下修复它吗?