Haskell, Simple Continuation -
i having hard time convert simple cps function
this cps style square function
-- : 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 write '9' out in console now, change function arguments in reverse order
square_cps' :: ((int -> r) -> r) -> int square_cps' = ? is impossible?
first minor correction definition of square_cps:
square_cps :: int -> ((int -> r) -> r) square_cps x = \cont -> cont (square x) ^^^ alternatively can write:
square_cps x cont = cont (square x) note works though type signature makes square_cps function of 1 argument.
now, type signature square_cps' can't work. way written means int out of (int -> r) -> r function returns r.
to flip arguments square_cps, first write equivalent type signature:
square_cps :: int -> (int -> r) -> r ^ ^ ^--- result | \--- second arg \--- first arg and identify arguments shown. swapping first , second arguments results in signature:
square_cps' :: (int -> r) -> int -> r square_cps' cont x = square_cps x cont in general, signature a -> b -> c equivalent a -> (b -> c), i.e. function type constructor associates right.
Comments
Post a Comment