hermit-0.1.4.0: examples/last/Last.hs
module Main where
import Data.Function(fix)
import Prelude hiding (last)
unwrap :: ([a] -> a) -> a -> [a] -> a
unwrap f a as = f (a:as)
wrap :: (a -> [a] -> a) -> [a] -> a
wrap f [] = error "wrap _ []"
wrap f (a:as) = f a as
{-# RULES "ww" forall f . fix f = wrap (fix (unwrap . f . wrap)) #-}
-- last :: [a] -> a
last [] = error "last []"
last [a] = a
last (_:a:as) = last (a:as)
main :: IO ()
main = print (last "hello")