[Haskell-beginners] My Continuation doesn't typecheck

martin martin.drautzburg at web.de
Sat Aug 6 08:03:17 UTC 2016


Hello all,

in order to gain some intuition about continuations, I tried the following:

-- two functions accepting a continuation

	f1 :: Int -> (Integer->r) -> r
	f1 a c = c $ fromIntegral (a+1)

	f2 :: Integer -> (String -> r) -> r
	f2 b c = c $ show b

	-- combine the two functions into a single one

	run1 :: Int -> (String -> r) -> r
	run1 a = f1 a f2


	-- *Main> run1 9 id
	-- "10"

So far so good.


Then I tried to write a general combinator, which does not have f1 and f2 hardcoded:

	combine a f g = f a g

	-- This also works

	-- *Main> combine 9 f1 f2 id
	-- "10"


What confuses me is the the type of combine. I thought it should be

	combine :: Int ->
	(Int -> (Integer->r) -> r) ->        -- f1
	(Integer -> (String -> r) -> r) ->   -- f2
	((String -> r) -> r)


but that doesn't typecheck:

	Couldn't match expected type ‘(String -> r) -> r’
	with actual type ‘r’


Can you tell me where I am making a mistake?



More information about the Beginners mailing list