问题标签 [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.

0 投票
3 回答
265 浏览

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)的原因:

0 投票
1 回答
428 浏览

haskell - 提升以固定单子变压器堆栈的*内部*

假设我有一个IO Int包裹在 a 中StateT MyState,那么我有一个State MyState Int我想在堆叠的 monad 中使用的值。在这种内在的意义上,我如何举起它?我已经知道要使用lift或者liftIO如果我得到与内部兼容的东西,我只需要提升到外部 monad,但现在我遇到了相反的问题:值已经在外部 monad 但不在内部。

例如:

我是否必须“获取”状态,手动将其推过 runState 并再次将其全部装箱,还是有一些通用的方法可以做到这一点?

顺便说一句,那个 sim 参数是一大堆与 IO 无关的有状态函数,所以StateT MyState IO a如果可以避免的话,我有点不愿意让它们全部返回。

0 投票
1 回答
443 浏览

haskell - 在 Haskell 中,是否有 (liftM .liftM)、(liftM .liftM .liftM) 等的别名?

在 Haskell 中,(liftM .liftM)、(liftM .liftM .liftM) 等有别名吗?

这样我就不必那么冗长了,例如:

0 投票
2 回答
755 浏览

matlab - 哈尔吊装方案

我正在尝试将提升方案版本 haar 应用于图像。我开始使用互联网上发布的代码应用它:

事实上,上面的代码应用了 LEVEL1 的提升 Haar 小波。如何修改此代码以应用 2 或 3 级提升 Haar 小波?

任何帮助将不胜感激!

克里斯蒂娜

0 投票
2 回答
868 浏览

haskell - 展平单子堆栈

所以我在我的第一个严肃的haskell项目中都有这种代码:

我如何尝试实现我的目标肯定可能有问题(可能有更简单的方法来做到这一点)但目前我有兴趣学习如何以更好的方式处理一堆 monad 转换器,如果有的话。这是我弄清楚如何进入r上下文B并将其提升到堆栈中更高的单子的唯一方法。举起整个块而不是最初的陈述是我自己能做到的。

我还经常得到的是我发现如果深层单子是lift可以避免的链。不过,我不知道其他单子的通用方式。liftIOIO

当他最终处理这样的堆栈时,是否有一种模式可以遵循,并且必须在某个级别提取一个值,在不同级别提取一个不同的值,结合这些并影响两个级别中的任何一个级别,或者可能还有另一个级别?

是否可以以某种方式操纵堆栈而无需提升整个块(这导致let和绑定变量的范围和限制到内部块),也不必lift . lift . ... lift单独操作?

0 投票
1 回答
825 浏览

haskell - 整理 Monads - 将 monad 转换器的应用程序转变为新型 monad

我正在尝试采用例如ExceptT a (StateT A M)某些具体类型A和 monad M,并将它们包装到我的新自定义 monad 中。

首先,我发现它StateT A M经常出现在其他上下文中,因此我决定最好将它单独包装在 monad 中M1,然后包装ExceptT a M1M2.

所需的属性是创建M1M2实例MonadState和类M(假设它被称为MyMonadClass)。也M2应该是MonadError.

首先,我从简单的类型同义词开始:

然后我想我会先画出实例声明(不实现实例),这就是我第一次陷入困境的地方。instance MonadState A (MyState)似乎不是正确的语法。我想我必须创建newtype MyState' a = StateT a M然后type MyState = MyState A(让我们不要在不必要的地方使用语言扩展)。

但是,一旦我开始将同义词转换为newtype声明,我就开始失去与StateT A MandExceptT ...类型的联系。

现在已经实现的转换器消失了,我想我正在尝试做一些没有多大意义的事情。所以我的问题是:如何将这种行为正确地包装到新的复合 monad 中,以便可以访问下面的层,从而避免不必要的提升,并使事情保持清晰和井井有条。

0 投票
1 回答
76 浏览

haskell - 多态函数的类型约束,如提升

所以我有这个代码

我让编译器抱怨它无法证明mfrom 签名lift是类型的,MonadA或者这就是我阅读这些神秘错误消息的方式。

有没有办法解决这个问题?我认为我需要约束才能实例化如下:

还会有这样的执行f工作吗?(由于上述错误,我没有走那么远)。我希望f在右侧解决f内部单子a


编辑:它确实有助于删除类型约束newtype MonadA a => MyStateT ...以避免我提到的确切错误。但是,我之前将另一个错误归因于同一件事,请考虑上面示例代码的延续(重复某些部分,现在没有类型限制):

错误是

在实施中fB。早些时候我试过class MonadA m => MonadB m没有用。a与匹配甚至没有意义StateT A m。因为MyStateT它的一个实例MonadState A应该可以工作,不是吗?

编辑

好的,让它工作:

愚蠢的我。

0 投票
1 回答
91 浏览

haskell - Haskell:编写一个可以提升到列表上的函数

我有以下两个功能:

是否可以编写一个函数来 1) 完成什么noneOnEmptyA,以及 2) 可以提升它以完成什么noneOnEmptyB?问题的症结似乎在于noneOnEmptyA检查空文本,同时noneOnEmptyB检查空列表;但是,noneOnEmptyA提升以便对列表进行操作(如在fmap noneOnEmptyA返回 type中[T.Text])检查列表中的空文本,而不是检查列表本身是否为空。

0 投票
3 回答
1608 浏览

haskell - 自动将 Either 提升到 exceptT

假设我有这段(可以说是误导)代码:

ghc给我以下错误:

Either将 a 提升为的最标准方法是ExceptT什么?我觉得必须有某种方式,因为Either StringMonadError.

我写了自己的提升函数:

但对我来说,这仍然感觉不对,因为我已经在 ExceptT单子变压器内部工作了。

我在这里做错了什么?我应该以不同的方式构建我的代码吗?

0 投票
1 回答
48 浏览

haskell - 提升的“if”-函数行为异常

在我的程序中,我使用if'在其中一个模块中定义的函数而不是内置if-then-else构造。它的定义很简单,而且工作得很好。

但是,在代码中有一个地方我需要将它应用到 monad 值(IO在我的例子中),即类型签名应该看起来有点像IO Bool -> IO a -> IO a -> IO a. 自然地,我试图抬起它。

但是当我尝试评估表达式时,我没有得到我期望的结果。

我知道<*>描述是“顺序应用”,所以也许就是这样。但是这里发生了什么?我可以在不编写全新的专用函数的情况下修复它吗?