문제

에서 영감을 받다 이 질문:

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 '(예 :" * -> * ", 예를 들어, 예를 들어'목록 '및'옵션을 취할 수 있기 때문입니다. '인스턴스가 될 수 있습니다. 각 자체는 일반적인 유형 생성자 일 수 있지만 허용되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top