-rectypes에 해당하는 Haskell

ThePiercingPrince

재귀 유형을 허용하는 OCaml의 -rectypes에 해당하는 GHC는 무엇입니까? 문서에 하나도 없습니다. 숨겨진 기능입니까?

다니엘 그라 처

불행히도 모든 재귀는 데이터 유형을 거쳐야합니다. 그러나 약간의 골칫거리를 기꺼이 참아 내고 싶다면 재귀 유형을 꽤 쉽게 작성할 수 있습니다.

 newtype RecArr b a = RecArr {unArr :: RecArr b a -> b}

 unfold = unArr
 fold   = RecArr

이제 우리는 할 수 foldunfold우리의 RecArr우리의 마음의 콘텐츠에 우리의 재귀를 전개합니다. 이것은 수동이기 때문에 약간 고통 스럽지만 완전히 실행 가능합니다. 데모로, 여기에 사용하여 작성된 Y 콤비의 foldunfold.

 y f = (\x -> f (unfold x x)) $ fold (\x -> f (unfold x x))

 factorial f n = if n == 0 then 1 else n * f (n-1)

 main = print (y factorial 5) -- prints 120

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Haskell 전주곡의 '오류'에 해당하는 PureScript

분류에서Dev

Haskell의 시퀀스에 해당하는 Scala

분류에서Dev

Ruby의 slice_when에 해당하는 Haskell

분류에서Dev

OOP의 클래스 전문화에 해당하는 Haskell

분류에서Dev

이 Haskell 함수에 해당하는 꼬리 재귀 함수 정의

분류에서Dev

Rust의 Read 특성에 해당하는 Haskell은 무엇입니까?

분류에서Dev

C #에서 haskell의 반복 함수에 해당하는 것은 무엇입니까?

분류에서Dev

Haskell에서 .NET의 "InternalsVisibleTo"에 해당

분류에서Dev

bashrc에 해당하는 Busybox

분류에서Dev

"==="자바에 해당하는

분류에서Dev

switchmap에 해당하는 RxSwift

분류에서Dev

Typescript에 해당하는 typedef

분류에서Dev

$ .each에 해당하는 Mootools

분류에서Dev

C #에 해당하는 jQuery

분류에서Dev

Windows에 해당하는 chmod

분류에서Dev

HAVING에 해당하는 EXISTING

분류에서Dev

Python에 해당하는 JRE

분류에서Dev

dd에 해당하는 창

분류에서Dev

Swift에 해당하는 "? :"

분류에서Dev

curl에 해당하는 PowerShell

분류에서Dev

DATEVALUE에 해당하는 VBA?

분류에서Dev

SSH에 해당하는 Ping

분류에서Dev

current ()에 해당하는 XPath

분류에서Dev

bashrc에 해당하는 Busybox

분류에서Dev

$ @에 해당하는 Windows

분류에서Dev

Guice에 해당하는 ExceptionHandler

분류에서Dev

가변 벡터 이해 및 Haskell에서 수정하는 방법

분류에서Dev

Haskell에서 스트림을 이해하는 방법

분류에서Dev

C 또는 Python에 해당하는 NSScanner