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

scala - 这种提升功能有名称吗?

我写了一个Scala函数:

这种模式有名字吗?由于案例 1 和 2,它不是一个适用的函子。请随意使用 Haskell 或 Scala 代码回答。

0 投票
1 回答
901 浏览

scala - 对 Scala 中的“提升”功能感到困惑

在Scala 中的函数式编程一书中,有一个“提升”的例子,其中一个类型的函数A => B被提升为Option[A] => Option[B].

这是电梯的实现方式:

我对此有一些困惑:

第一个是,这里的“_”是什么?其次,当我从 def 中删除返回类型时,期望类型推断发挥其魔力,我得到以下异常:

有人可以解释这里发生了什么吗?

谢谢

0 投票
4 回答
43584 浏览

function - Scala 中的“提升”是什么?

有时当我阅读 Scala 生态系统中的文章时,我会阅读术语“提升”/“提升”。不幸的是,没有解释这究竟意味着什么。我做了一些研究,似乎提升与功能价值或类似的东西有关,但我无法找到以初学者友好的方式解释提升实际上是什么的文本。

名称中带有提升功能的Lift框架存在额外的混淆,但它无助于回答问题。

Scala 中的“提升”是什么?

0 投票
1 回答
392 浏览

monads - Monad 转换器 – 显式提升

我正在阅读Real World Haskell中的单子变换器。在下面的示例中,堆栈位于Writer顶部StateReader顶部IO

我(想我)了解我如何简单地调用askget并且put由于这些是在 , 和类型类中定义的MonadReaderMonadWriter并且MonadState存在诸如MonadWriter (StateT s m)等等之类的实例。

明白的是为什么我不能lift从下面的层到当前的 monad 转换器显式地执行一个动作。如果constrainedCount我理解正确,我在 Reader monad 中,我认为两者都st <- get应该st <- lift get工作。(那tell还有lift .lift .tell should be the same). If I changest <- get tost <- lift get`我得到了错误

这告诉我很少......我对此的理解完全错误吗?

0 投票
1 回答
131 浏览

haskell - 从新创建的 monad 执行 monadic 代码

我目前有两个共享相同类型的 monad,实现类似于Statemonad:

它们之间的区别在于,第一个只允许读取上下文(bind 不会改变它),而第二个也允许编辑上下文。

然后有一些函数使用上下文FooRead来计算一些值而不改变上下文的状态:

现在我想从 writer monad 的代码中执行这些读取函数之一:

whereliftVal :: FooRead a -> FooWrite a是一个函数,它提取函数返回的值并将其FooRead滚动到FooWritemonad 中。这一切都很好。

但是,我想不出一种方法将getVal上面的执行从我的FooWritemonad 滚动到上下文中。通过上面的实现,getVal将运行在一个空的 monad 实例中。

我可以弄清楚如何FooRead使用FooWrite上下文构造一个实例

本质上,我想将我的作者降级为读者,在阅读器中执行代码,然后将其重新提升为作者。

但不是如何在这个 monad 中实际执行代码?

0 投票
1 回答
241 浏览

haskell - 用于广义多参数函数提升的类型类技巧

我想将 Haskell 函数提升为高阶 lambda 演算编码。这几乎是从 Oleg 的 Typed Tagless Final encoding 中逐字记录的。

我可以将任意 Haskell 类型嵌入到Lamusing 中emb,但那时我不能(^)用于应用程序。此外,提升的功能会表现得很懒惰。相反,我必须逐个应用程序来提升它们。

不过,这是很多样板文件。我想创建一个适用于任何 arity 函数的通用提升函数。我觉得可以使用类似于Printf'sPrintfTypefixed-vector'Cont类型的东西。我可以使用类型函数指定我想要的内容

但是我通过这种方法非常卡住,通常是由于注入问题。我能够通过新类型包装器和作用域类型变量的真正可怕组合来解决注入性问题,但它从未真正进行过类型检查。

这可以用 Haskell 表达吗?

0 投票
1 回答
204 浏览

haskell - 提升为数据类型(Haskell)

给定一个函数 f,我如何编写一个将其提升为 PolyType 的函数?(只是想了解起重)

0 投票
1 回答
125 浏览

haskell - Pipes.Safe - 如何使用 mapM

我有以下带有管道的代码,没有第二个管道(>-> P.mapM ( fillMD5))就可以了。fillMD5是一个操作a -> IO a

错误是:

我知道类型mapM

但我看不出这个怎么解除Safe.SafeT

0 投票
1 回答
157 浏览

scala - “电梯与地图几乎相同”是什么意思?

Leonardo Borges 写了一篇很棒的文章,名为“Functional Composition With Monads, Kleislis and Functors”

他在其中评论道:

Mark 向我指出 lift 与 map 几乎相同,但参数相反。

这意味着:

可以重构为:

我的问题是,“电梯与地图几乎相同”是什么意思?

0 投票
1 回答
116 浏览

function - 在 Haskell 中用另一个函数作为参数提升一个函数

所以我在 Haskell 中有一个函数,为了问这个问题,我已经简化了它:

我希望将myFn' 的依赖项helper放入 aReader中,因为控制反转允许我在测试中切换实现:

这很好用,除了我特别不喜欢这三行:

我觉得应该有一种方法来提升foldMap,就像通过它的组合mapM的提升版本一样。理想情况下,我希望将这三行合并为一行:mapsequence

假如说:helper'' :: Int -> MyReader (Set Int)

这当然需要具有foldMapM类似于以下签名的函数:

我已经尝试了很多东西,但我似乎无法实现这个功能!任何人都可以帮忙吗?