는 접이식 종료가 아닌 우리가 달리의 돌발 생각해 보자 :번역 제도 호출 하스켈 callCC/참조
이(call/cc (lambda (folded)
(stream-fold
(lambda (acc v)
(if (< v 5)
(cons v acc)
(folded acc)))
'()
(in-naturals 0))))
; returns '(4 3 2 1 0)
위의 코드의 하스켈 해당하는이 코드가하는
callCC $ \folded -> foldl (\acc v -> if v < 5 then v:acc else folded acc) [] [0..]
것 컴파일되지 않고 접힌 식에 무한한 타입을 만들 수 없다는 것에 대해 불평한다. 나는 이미 Y 결합 자와 같은 경우 이런 종류의 오류를 제거하는 방법에 대한 아이디어를 갖고 있지만, 같은 접근법이 여기서는 효과가없는 것으로 보인다. 이런 상황에 올바른 접근 방법은 무엇입니까?
'foldl' 대신'foldM'을 사용하십시오. 여기서'v : acc'와'folded acc'는 같은 타입을 반환하지 않습니다. –