什么是一台投影机

问题描述 投票:2回答:1

我一直在深入研究FP及其周围的一切,我发现了某种类型的投影仪的概念,没有细节也没有解释。

我发现的唯一一件事是这个github project,我开始考虑它是指这个特定项目,还是FP中的一些通用概念?

那么,什么是投影仪?为什么有用? (如果可能的话,你能提供例子,资源等吗?)

scala functional-programming lambda-calculus higher-kinded-types kind-projector
1个回答
10
投票

这确实只是您链接到的Scala编译器的特定插件的一个稍微尴尬的名称。我认为它对自己没有任何意义,但它符合它的目的。

该插件的作用是为Scala通常的lambda类型解决方法提供一种替代语法,它使用一种名为type projections的语言特性。

假设您想为Functor实施Either。现在,Functor需要善良的* -> *,而Either有善良的* -> * -> *。所以我们需要先修复第一个参数,然后才能为部分应用的类型构造函数提供实现。你可以在“常规”Scala中执行此操作的唯一方法是:

implicit def eitherIsFunctor[A]: Functor[{type λ[X] = Either[A, X]}#λ] = { ... }

其中{type λ[X] = Either[A, X]}是一个匿名结构类型,它只是立即用于“突出”λ,我们实际想要的类型。在Haskell中,你可以说

instance Functor (Either a) where ...

其中Either部分应用(并且a自动量化)。

该插件允许用一个看起来更像Scala中常见的部分应用程序的东西替换投影,即Either[A, ?],而不是难以理解的{type λ[X] = Either[A, X]}#λ(并且还提供一般类型的lambda,我认为,总是通过将它们转换为匿名类型和突起)。

© www.soinside.com 2019 - 2024. All rights reserved.