Reversing a list with continuations

module Main where

import           Prelude hiding (reverse)

reverse :: [a] -> [a]
reverse ls = run kInit ls
  where
    kInit :: ([a] -> [a]) -> [a]
    kInit f = f []

    run :: (([a] -> [a]) -> [a])
        -> [a]
        -> [a]
    run k []        = k id
    run k (x : xs') = run ($ k (x :)) xs'


main :: IO ()
main = print $ reverse ([1..10] :: [Int])