0

FP와 그 주변을 둘러싼 모든 것을 파헤 치고 있습니다. 자세한 내용이나 설명없이 어딘가에서 작성된 종류 프로젝터의 개념을 발견했습니다.친절한 프로젝터 란 무엇입니까

내가 발견 한 유일한 것은이 github project이었고,이 특정 프로젝트 또는 FP의 일반적인 개념을 언급하고 있었다면 생각하기 시작했습니다.

그래서 종류 프로젝터 란 무엇입니까? 왜 그렇게 유용합니까? (가능한 경우 예제, 리소스 등을 제공 할 수 있습니까?)

+1

그게 그들이 플러그인 이름을지었습니다. 그것은 FP 개념이 아닙니다. – 4castle

+2

[종류] (https://en.wikipedia.org/wiki/Kind_ (type_theory)) 및 [계획안] (https://en.wikipedia.org/wiki/Projection_ (mathematics))이 있습니다. 나는 그것이 특정한 것을 의미한다고 생각하지 않는다. – Bergi

답변

4

링크 된 스칼라 컴파일러의 특정 플러그인에 대한 이름이 실제로 약간 어색합니다. 나는 그것이 그 자체에 아무런 의미가 있다고 생각하지 않지만 그 목적에 부합된다.

플러그인이하는 일은 type projections이라는 언어 기능을 사용하는 lambda 유형에 대한 스칼라의 일반적인 해결 방법에 대한 대체 구문을 제공하는 것입니다.

Functor을 구현한다고 가정 해 보겠습니다. 자, Functor은 종류가 * -> *이고, Either은 종류가 * -> * -> *입니다. 따라서 첫 번째 인수를 먼저 수정해야하며 부분적으로 적용된 형식 생성자에 대한 구현을 제공 할 수 있습니다. 당신이 "일반"스칼라에서이 작업을 수행 할 수있는 유일한 방법은 이것이다 :

{type λ[X] = Either[A, X]}은 즉시 λ 우리가 실제로 원하는 유형 "을 프로젝트"하는 데 사용되는 익명의 구조 유형이다
implicit def eitherIsFunctor[A]: Functor[{type λ[X] = Either[A, X]}#λ] = { ... } 

. 하스켈에서, 당신은 단지 (자동 a 이상 정량화) Either이 부분적으로 적용

instance Functor (Either a) where ... 

이 말할 수 있습니다.

플러그인을 사용하면 투영을 스칼라의 일반 부분 응용 프로그램과 비슷하게 보일 수 있습니다. 즉, {type λ[X] = Either[A, X]}#λ 대신 거의 Either[A, ?]으로 이해할 수 있습니다 (일반적인 유형의 람다를 제공합니다. 익명 유형 및 예측에).

+0

[여기] (http://underscore.io/blog/posts/2016/12/05/type-lambdas.html) 주제에 관한 잘 수행 된 소개. – phg