问题标签 [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 回答
108 浏览

haskell - Monads的部分提升?

有没有像单子部分提升的东西?我需要类型签名是这样的:

而不是这个:

用于>=>和其他原因。我正在寻找执行上述操作的规范方法。

0 投票
2 回答
98 浏览

scala - directly applying lift function not give expected function

Below are the two partial function that are expected to perform sme tasks but defined in diffrent ways.


Why passing null to lift2 gives MatchError, when the definition of both lift1 and lift2 is same?

0 投票
3 回答
5076 浏览

javascript - 无法在 Ramda.js 中“提升”我的头

查看 Ramda.js 的源代码,特别是“lift”函数。

电梯

电梯N

这是给定的示例:

所以结果的第一个数字很简单,a, b, 和c, 都是每个数组的第一个元素。第二个对我来说并不容易理解。参数是每个数组的第二个值(2、2、未定义)还是第一个数组的第二个值和第二个和第三个数组的第一个值?

即使不考虑这里发生的事情的顺序,我也没有真正看到价值。如果我在没有lift先执行它的情况下执行它,我最终会concat得到作为字符串生成的数组。这似乎有点像flatMap,但我似乎无法遵循它背后的逻辑。

0 投票
0 回答
160 浏览

haskell - Haskell:将数据类型“提升”到函数

不知何故,我仍在尝试建立一种直觉,即我可以在 Haskell 中表达什么,什么不能表达。

我有自己的(简单)矩阵类型,我想知道是否有可能以某种方式将其“提升”到一个函数中,以便理解应用于向量的矩阵的常用数学符号。

让我更详细地解释这个问题。

显然,该函数mv实现了矩阵M m对类型“向量”的作用[a]

(M' m) v但是,有没有办法用这样的语法来实现相同的操作

然后它应该允许写类似的东西

我怀疑我定义的矩阵数据类型不足以进行这样的提升。不知何故,我想我正在尝试从自定义矩阵类型到 some 找到一个函子hom([a],[a]),即向量空间类别中的态射集Vec,但我的数据类型缺乏必要的结构。

是否有根本原因可能无法进行这种“提升”?

0 投票
1 回答
219 浏览

equality - Agda 中的平等 - 不相关的论点

我有一个依赖类型,它由一个值加上一些关于它的属性的证明组成。自然,我希望我对这种类型的平等概念等同于值组件的平等。这一切都很好,除了我在证明这种平等的提升概念的属性时遇到问题(例如这种类型的列表上的平等)。

例如:

在最后一行中,Agda 抱怨它无法解决对中的第二个投影。有趣的是,将最后一行更改为以下等价的 eta 表达式意味着它可以解决它们:

现在我很自然地知道,有时 Agda 无法解决所有隐含的论点,需要一些额外的帮助,但我不明白我通过这样做提供了哪些新信息......

我做了很多提升平等的工作,我宁愿避免在我的代码中到处添加这些丑陋的 eta 扩展。我想知道是否有人有任何建议允许类似于原始代码的内容通过?

我研究了不相关性,但第二个投影在其他地方使用,即使它在计算上与相等性无关。

0 投票
1 回答
184 浏览

haskell - (a -> IO b) 到 IO (a -> b) 的转换

我在 IO 上下文中有几种数据类型,例如:

我想将它们全部放在一个数据对象中,例如:

所以我不必从 IO 上下文中获取每个值,而只需从IO Configdata.

我没有解决方案的关键点是如何转换String -> IO StringIO (String -> String). Hoogle 没有给我任何能够做到这一点的功能。

我不确定这是否可能,因为函数的输入可能是无限的。

有人有解决方案或解释为什么不可能吗?我知道使用列表而不是函数是一种选择,但如果可能的话,我更喜欢使用函数。

0 投票
2 回答
246 浏览

javascript - 为什么我可以将函数传递给提升的 R.divide?

鉴于以下情况:

为什么这可以作为 的无点实现average?我不明白为什么我可以通过R.sum以及R.length它们何时是函数,因此,我无法将提升R.divide的函数映射到函数上R.sumR.length这与以下示例不同:

在上述情况下xsys和中的值在zs非确定性上下文中求和,在这种情况下,提升函数应用于给定计算上下文中的值。

进一步阐述,我理解应用提升函数就像R.ap连续使用每个参数。两条线都评估为相同的输出:

检查它说的文档:

“提升” arity > 1 的函数,以便它可以“映射”满足 FantasyLand Apply 规范的列表、函数或其他对象。

至少对我来说,这似乎不是一个非常有用的描述。我正在尝试建立关于lift. 我希望有人可以提供。

0 投票
1 回答
391 浏览

haskell - Monad 变形金刚升降机

我只是在研究现实世界 Haskell 中的 monad 转换器。书上说,要使某个东西成为 monad 转换器,您需要使其成为 MonadTrans 类型类的实例。

于是书中定义了一个新的Transformer,即MaybeT m atransformer。

他们为这个新的转换器定义了 monadTrans 类型类:

然后他们为这个转换器创建了一个 MonadState 实例:

据我了解,lift 函数正在获取底层 monad 并将其包装在正确的构造函数中。但是,我没有在 MonadState 类型类中得到 get 或 put 的实现,我希望能帮助我理解 lift 在这里实际做了什么。我还听说在 mtl 包中,由于类型类的定义方式,您可以拥有一堆带有 WriterT、StateT 等的 monad 转换器,但您可以使用 get、put、tell 等函数而无需实际进行任何提升。我想知道这是如何工作的,我强烈怀疑它与这些类型类有关,但我不确定?

0 投票
4 回答
938 浏览

haskell - 在 Haskell 中将提升函数应用于元组(任意长度)

是否有任何解释为什么提升函数在应用于 2 元组时仅适用于第二个条目:

另一方面,任何长度不是 2的元组都会返回错误。还

返回错误。作用于元组时是否可以看到类型f <$>

这种行为有什么解释吗?

Data.Tuple 文档非常简短,没有提到函数是如何提升到元组的。有没有解释它的来源?


更新。关于 2-tuples 的问题的一部分与这个答案有关,但是,上面关于多长度元组的问题没有得到解决。

0 投票
2 回答
150 浏览

scala - 以集合为参数的 scala 提升函数

我有一个接受函数的类f: Option[Seq[Option[A]]] => Option[A]]

我希望这个类的用户能够不必担心Option框架。所以用户会传递一个函数g: Seq[A] => A,并且在后台我会提升该函数。起重部分是我无法做到的。

这就是我所拥有的(使用optionInstance.liftscalaz):

但是,这不会编译,因为电梯操作员正在返回Option[Seq[A]]而不是Option[Seq[Option[A]]]. 如何才能做到这一点?