
On Thu, Feb 28, 2008 at 4:28 AM, Aaron Altman
runActionAndIterate :: [a -> a] -> a -> (a, [a -> a]) runActionAndIterate (currentAction:actionList) actionInput = (currentAction actionInput, concat [actionList, [currentAction]])
shiftActionList :: [a -> a] -> [a -> a] shiftActionList (currentHead:rest) = concat [rest, [currentHead]]
As a side note, it's not good to recreate the list (using 'concat') for every item as it is an O(n) operation. Bas van Dijk's 'always' (also called 'forever'[1]) is an option, but you can also create a circular list using the simple function 'cycle'[2] and your functions above would become runActionAndIterate (currentAction:actionList) actionInput = (currentAction actionInput, actionList) shiftActionList = tail [1] http://haskell.org/ghc/docs/latest/html/libraries/base/Control-Monad.html#v%... [2] http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v%3Acycl... -- Felipe.