![]() |
1
161
提升更多的是一种设计模式,而不是一个数学概念(尽管我希望这里的人会通过展示提升是一个类别或什么来反驳我)。 通常,您有一些带有参数的数据类型。类似的东西
假设你发现
换句话说,您有一个接受双参数函数的函数(例如
现在你可以写了
编辑:更多信息
你当然可以
从观察开始
但这和
如果你真的想要完全的规律性,你可以说
如果你能做到
这个
它将wrapped函数应用于wrapped值。所以如果你能实现
同样的还有
这可以让你写:
术语
|
![]() |
2
36
保罗的和亚尔丘的都是很好的解释。 我想补充一点,被提升的函数可以有任意数量的参数,而且它们不必是相同的类型。例如,还可以定义LiftFoo1:
一般来说,获取1个参数的函数的提升是在类型类中捕获的。
注意与
此外,提升到任意数量的参数的泛化被称为 应用风格 . 在掌握带固定参数的函数提升之前,不要费心钻研这个问题。但当你这样做的时候, Learn you a Haskell 在这方面有很好的篇章。这个 Typeclassopedia 是另一个描述 函子 和 应用的 (以及其他类型类;向下滚动到该文档的右侧章节)。 希望这有帮助! |
![]() |
3
22
让我们从一个例子开始:
另一个常见的提升是
通常,将“提升”功能/动作提升为“包裹”类型。 理解这一点、单子等等以及理解它们为什么有用的最好方法可能是编码和使用它。如果您以前编写的代码中有任何您怀疑可以从中受益的地方(例如,这将使代码变短等),只需尝试一下,您就可以很容易地理解这个概念。 |
![]() |
4
11
提升是一个概念,它允许您在另一个(通常更通用)设置中将一个函数转换为相应的函数。 |
![]() |
5
0
根据
this shiny tutorial
函数是一个容器(例如
|
![]() |
trpnd · 如何定义由两个任意单声道变压器组成的单声道变压器? 3 年前 |
![]() |
Fabus1184 · Haskell mapM_不打印 3 年前 |
![]() |
Gotthold · 基于范数约束向量的类型 3 年前 |
![]() |
jian · haskell将另一个函数用作输入参数 3 年前 |
![]() |
Jocafrei · 用Haskell函数实现最大公约数函数 7 年前 |