什么是一台投影机

ped*_*o91 4 functional-programming scala lambda-calculus higher-kinded-types kind-projector

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

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

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

phi*_*ler 10

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

该插件的作用是为Scala通常的lambda类型解决方法提供一种替代语法,它使用一种称为类型投影的语言特性.

假设你想要实现FunctorEither.现在,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,我认为,总是通过将它们转换为匿名类型和投影) .