我一直在深入研究FP及其周围的一切,我发现了某种类型的投影仪的概念,没有细节也没有解释。
我发现的唯一一件事是这个github project,我开始考虑它是指这个特定项目,还是FP中的一些通用概念?
那么,什么是投影仪?为什么有用? (如果可能的话,你能提供例子,资源等吗?)
这确实只是您链接到的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,我认为,总是通过将它们转换为匿名类型和突起)。