2
나는이 나는 역순
에서 함수 인수를 변경하려면, 이제 CPS 스타일의 스퀘어 기능
-- from : http://en.wikibooks.org/wiki/Haskell/Continuation_passing_style
square :: Int -> Int
square x = x * x
square_cps :: Int -> ((Int -> r) -> r)
square_cps = \cont -> cont (square x)
-- square_cps 3 print will write '9' out in console
입니다 간단한 CPS 기능
을 변환하는 힘든 시간을 보내고 있어요
square_cps' :: ((Int -> r) -> r) -> Int
square_cps' = ?
불가능합니까? square_cps
의 당신의 정의에 약간의 보정
감사! 이제 왜 작동하지 않는지 이해합니다. 그러나 'square_cps x cont = cont (square x)'는 여전히 나에게 모호합니다. 서명에 기술 된 모든 타입을 취하고'r'을 반환합니다. 즉, foo :: Int -> Int는 foo x y = x + y와 같이 구현 될 수 있습니다. foo는 모든 인수를 취하여 Int를 반환하기 때문입니다. 하지만 그건 내가 컴파일러 오류를 제공합니다. – 1ambda
'foo x y = x + y'를 정의하면'foo'는'Int -> Int'가 아닌'Int -> Int -> Int' 타입을가집니다. ghci를 사용하여 표현식의 유형을 인쇄하는 방법은 [이러한 답변] (http://stackoverflow.com/questions/12659927/using-ghci-to-find-type)을 참조하십시오. – ErikR