0

我一直在深入研究FP及其周圍的一切,並且我發現在某處沒有任何細節和解釋的情況下,寫下類似投影機的概念。什麼是一種投影機

我發現的唯一的東西是這個github project,我開始考慮它是指這個特定的項目,還是指FP中的一些通用概念?

那麼,什麼是一種投影儀?爲什麼它有用? (如果可能,你能否提供例子,資源等?)

+1

這就是他們的插件。這不是一個FP概念。 – 4castle

+2

有[種](https://en.wikipedia.org/wiki/Kind_(type_theory)),有[預測](https://en.wikipedia.org/wiki/Projection_(數學))。我不認爲這意味着某種特定的東西。 – Bergi

回答

4

這實際上只是你鏈接到的Scala編譯器的特定插件的一個稍微尷尬的名字。我認爲它對它本身沒有任何意義,但它適合它的目的。

該插件的作用是爲Scala的常規解決方法提供一種替代語法,用於類型lambdas,該語言使用稱爲type projections的語言功能。

假設你想實施FunctorEither。現在,Functor需要種類* -> *,而Either有種類* -> * -> *。所以我們需要首先修復第一個參數,然後可以爲部分應用的類型構造函數提供實現。您可以在「常規」斯卡拉做到這一點的唯一方法是這樣的:

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

其中{type λ[X] = Either[A, X]}是一個匿名的結構類型,這是隻有立即使用「伸出」 λ,我們真正想要的類型。在Haskell中,你可以只說

instance Functor (Either a) where ... 

其中Either是部分應用(和a被量化了自動)。

該插件允許一個替換的東西看起來代替很難理解{type λ[X] = Either[A, X]}#λ(並提供通用型的lambda更像Scala中,即Either[A, ?]通常局部應用,投影,我想,總是將他們失望到匿名類型和預測)。

+0

[這裏是](http://underscore.io/blog/posts/2016/12/05/type-lambdas.html)一個關於這個話題的完整介紹。 – phg