일부 언어는 유형 매개 변수가있는 클래스 및 함수 (예 : 임의 유형일 수있는 List<T>
위치 T
)를 허용합니다. 예를 들어 다음과 같은 기능을 가질 수 있습니다.
List<S> Function<S, T>(List<T> list)
그러나 일부 언어에서는이 개념을 한 단계 위로 확장하여 서명 기능을 가질 수 있습니다.
K<S> Function<K<_>, S, T>(K<T> arg)
어디 K<_>
그 자체 것은 같은 유형의 List<_>
그 유형 매개 변수가 있습니다. 이 "부분 유형"은 유형 생성자로 알려져 있습니다.
제 질문은 왜이 능력이 필요한가요? List<T>
모든 List<T>
것이 거의 동일 하기 때문에 같은 유형을 갖는 것이 합리적 이지만 모든 K<_>
것은 완전히 다를 수 있습니다. 당신은 할 수 있습니다 Option<_>
와 List<_>
전혀 공통 기능이없는 것을.
Functor
Luis Casillas의 대답은 매우 직관적입니다. 무엇 List<T>
과 Option<T>
공통점? 당신이 나에게 하나 하나 기능을주는 경우에 T -> S
나는 당신 줄 수있는 List<S>
나에게 Option<S>
. 그들이 공통적으로 갖는 또 다른 것은 당신 T
이 둘 다 에서 가치 를 얻으려고 노력할 수 있다는 것 입니다.
IReadableHolder<T>
.
IMappable<K<_>, T>
하는 방법과 K<S> Map(Func<T, S> f)
같이 구현, IMappable<Option<_>, T>
, IMappable<List<_>, T>
. 따라서 사용하지 않으려면 제한 K<T> : IMappable<K<_>, T>
해야합니다.