문제
에서 영감을 받다 이 질문:
F#에서 명시 적 유형 재귀가 가능합니까?
type 'a Mu = In of 'a Mu 'a
let unIn (In x) = x
이 코드는 불행히도 "유형 매개 변수는 유형 생성자로 사용할 수 없습니다.
비고 :이 구성은 논문에 사용됩니다 과부하 및 고차 다형성을 가진 기능적 프로그래밍, 예를 들어.
사용의 예 (가져온 여기):
type ('a, 'b) ListX =
| Nil
| Cons of 'a * 'b
type 'a List = ListX Mu
해결책
아니요, 이것은 불가능합니다. 특히 F#의 제네릭은 CLR과 동일한 제한을 가지고 있습니다.u003CT> 또는 < 'a>는 친절해야합니다 " *". 이 동일한 제한은 F#에서 직접 "유형 클래스"를 작성할 수 없다는 의미입니다. 예를 들어 "Monad M"은 "M '(예 :" * -> * ", 예를 들어, 예를 들어'목록 '및'옵션을 취할 수 있기 때문입니다. '인스턴스가 될 수 있습니다. 각 자체는 일반적인 유형 생성자 일 수 있지만 허용되지 않습니다.
제휴하지 않습니다 StackOverflow