All pastes #278637 Raw Edit

Mine

public text v1 · immutable
·published 2006-12-14 07:12 UTC
rendered paste body
import Control.Monad.Cont
import Control.Monad

fromEnd :: Int -> [a] -> Maybe a
fromEnd n l = flip runCont id (callCC $ (\cc -> fromEnd' n l cc >> return Nothing))
    where
        fromEnd' :: Int -> [a] -> (Maybe a -> Cont (Maybe a) ()) -> Cont (Maybe a) Int
        fromEnd' n [] retCC = return n
        fromEnd' n l  retCC = do
            n' <- fromEnd' n (tail l) retCC
            when (n' == 0) $ retCC (Just $ head l)
            return $ pred n'