implementation module IterableClass import StdEnv stepn :: Int !a -> a | step a stepn 0 a = a stepn n a = stepn (n-1) (step a) rewindn :: Int !a -> a | rewind a rewindn 0 a = a rewindn n a = rewindn (n-1) (rewind a) stepOrRewindn :: Int !a -> a | step, rewind a stepOrRewindn 0 a = a stepOrRewindn n a | n < 0 = rewindn (0-n) a | n > 0 = stepn n a