问题标签 [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 投票
2 回答
929 浏览

scala - Scala 从 List[A] 提升到 List[Option[A]]

在 scala 中,我如何创建一个通用函数来执行以下操作:

f: List[A] ==> List[Option[A]]

0 投票
1 回答
165 浏览

scala - Scala:在这种情况下 _ 代表什么

我正在阅读有关 Scala 中提升方法的演示教程。这是基本类的代码:

下面是提升方法:

我的问题是:下划线(“_”)在上述函数中代表什么。

谢谢

0 投票
2 回答
354 浏览

haskell - 在 Haskell monad / left-lifting 中使用纯函数?

考虑以下函数:

为了更好的可读性和逻辑性,我想将我的纯函数移动(*2)(+1)返回的左侧。我可以这样实现:

但是,我不喜欢(<.).

让我们介绍一个函数leftLift

我很喜欢这个。另一种可能性是定义 的变体bind

我不确定这是否是一个好主意,因为如果我想要的话,它不允许我使用do符号。leftLift我可以使用do

我没有在 Hoogle 上找到签名为leftLift. 这样的函数是否存在,如果存在,它叫什么?如果不是,我应该怎么称呼它?做我想做的事情最惯用的方式是什么?


编辑:以下是受@dunlop 回答启发的版本:

我还应该补充一点,我在使用bind-variant,因为我想以无点风格编写我的代码。对于do-notation,我想我不需要“假装”我正在做任何单子的事情,所以我可以使用lets。

0 投票
1 回答
95 浏览

haskell - 在 monad 实例声明中使用 monad 超类?

我正在使用以下数据类型实现一个非常简单的穷人并发结构:

我为此创建了一个 monad 实例:

Q1。我是否正确地说Atomic $ (liftM (>>= f) m)正在创建一个新的Atomicmonad,其中包含f( * -> *) 的结果应用于 内部的值m

Q2。我是否说在Monad m这里使用超类来启用liftM? 如果是这样,因为这是Monad类的一个实例,为什么不能liftM直接访问?

0 投票
2 回答
88 浏览

haskell - 应用 fmap 转换时,仿函数是否总是在 haskell 中返回提升的类型?

假设我有一个Int并且我fmap使用作为函子应用转换Maybe,我得到一个包装类型,即Maybe Int. 那么我可以认为这是提升吗?如果是这样,仿函数是否总是返回提升的类型?

0 投票
1 回答
99 浏览

haskell - ghci 中的 liftM:为什么会有这样的差异?

当我在 ghci 中定义这样的函数时:

他们运作良好:

但是当我在文件(probl.hs)中定义相同的函数时:

然后通过 ghci 运行这个文件:

我收到这样的消息:

为什么会有这样的区别?以及如何解决第二种情况的问题(我想要与第一种情况相同的行为)?

0 投票
1 回答
2377 浏览

functional-programming - 提升和高阶函数之间的区别

当人们谈论 , 或 时,我通常会听到提升这个词mapfoldbind基本上每个高阶函数不都是某种提升吗?

为什么不能filtera -> Boolto提升[a] -> [a],甚至bool函数(模拟 if 语句)也可以被认为是从a -> ato提升Bool -> a。如果不是,那么为什么apApplicative 类型的类被认为是电梯?

如果重要的是从... a ...to ... f a ...,那么ap也不适合这种情况:f (a -> b) -> f a -> f b

0 投票
1 回答
339 浏览

scala - 函数式编程中的“提升”是否遵循严格的规则?

我已经研究过“提升”q/a 的例子,在我看来提升函数就像任何改变形状的转换函数(如单子转换)。

我是否遗漏了任何点或提升功能(“提升概念”)是否有任何规则?

如果不是,它只是功能转换中的概念吗?

0 投票
2 回答
553 浏览

haskell - monad 变压器何时需要提升?

我正在学习单子变换器,我对何时需要使用电梯感到困惑。假设我有以下代码(它没有做任何有趣的事情,只是我可以用来演示的最简单的代码)。

所以有一个单子堆栈,其中主要的 do 块有类型ContT Int (StateT Int Identity) Int

现在,在第三个when带递归的 do 块中,程序编译需要一个提升。在第二个街区,不需要电梯,但我不知何故认为这是因为它的存在以exit某种方式迫使线上方的线被提升到ContT. 但在第一个街区,不需要电梯。(但如果明确添加,也没有问题。)这真的让我很困惑。我觉得所有的whendo 块都是等效的,无论在任何地方都应该需要电梯。但这显然不是真的。需要/不需要电梯的关键区别在哪里?

0 投票
0 回答
448 浏览

haskell - 如何将 fold|map|both 提升到 Either monad 中?

类型的“地图”

将是一个开始。(Hayo 没有找到。)或者类型的“折叠”

最重要的是(就我而言)是这样的:

这可能就是您需要阅读的全部内容。但是,如果您需要更多详细信息,这里有一个具体示例:

想象一个树状结构来 mapAccum 。每个分支在评估其子代后,都会被其子代和累加器的某些功能所转换。

下面是一些工作代码,将每棵树的值添加到累加器中,并将其子标签的乘积添加到每个分支的标签中:

这是返回的内容:

但是,如果我们在 foldl 中使用 evenMult 而不是使用 (*) 会怎样?