ped*_*o91 4 functional-programming scala lambda-calculus higher-kinded-types kind-projector
我一直在深入研究FP及其周围的一切,我发现了某种类型的投影仪的概念,没有细节也没有解释.
我发现的唯一一件事是这个github项目,我开始考虑它是指这个特定项目,还是FP中的一些通用概念?
那么,什么是投影仪?为什么有用?(如果可能的话,你能提供例子,资源等吗?)
phi*_*ler 10
这确实只是您链接到的Scala编译器的特定插件的一个稍微尴尬的名称.我认为它对自己没有任何意义,但它符合它的目的.
该插件的作用是为Scala通常的lambda类型解决方法提供一种替代语法,它使用一种称为类型投影的语言特性.
假设你想要实现Functor
的Either
.现在,Functor
需要善良* -> *
,而Either
有善意* -> * -> *
.所以我们需要先修复第一个参数,然后才能为部分应用的类型构造函数提供实现.你可以在"常规"Scala中执行此操作的唯一方法是:
implicit def eitherIsFunctor[A]: Functor[{type ?[X] = Either[A, X]}#?] = { ... }
Run Code Online (Sandbox Code Playgroud)
where {type ?[X] = Either[A, X]}
是一个匿名结构类型,它只是立即用于"突出" ?
,我们实际想要的类型.在Haskell中,你可以说
instance Functor (Either a) where ...
Run Code Online (Sandbox Code Playgroud)
其中Either
被部分地施加(和a
自动定量以上).
该插件允许用Scala替换投影,看起来更像是Scala中常见的部分应用程序,即Either[A, ?]
代替难以理解的{type ?[X] = Either[A, X]}#?
(并且还提供一般类型的lambdas,我认为,总是通过将它们转换为匿名类型和投影) .
归档时间: |
|
查看次数: |
501 次 |
最近记录: |