
Stephen Tetley schrieb:
On 2 March 2010 19:20, Sean Leather
wrote: My question is simple:
How do you rewrite your code to improve it?
Hi Sean - excellent question!
Some things I do...
Quite often I do a 'worker-wrapper-lite' rewrite i.e. change a function to perform its recursive work in a step rather than calling the function again with all the arguments, e.g.
para :: (a -> ([a], b) -> b) -> b -> [a] -> b para phi b = step where step [] = b step (x:xs) = phi x (xs, step xs)
rather than...
para_ :: (a -> ([a], b) -> b) -> b -> [a] -> b para_ phi b [] = b para_ phi b (x:xs) = phi x (xs, para_ phi b xs)
I'm doing no type changing to improve efficiency so it isn't a real worker-wrapper, but I usually find the 'step' style more pleasing, especially when the code is somewhat more complicated than the paramorphism above.
Me too. http://haskell.org/haskellwiki/Top-level_vs._local_recursion I have written some articles in Category:Style on that topic.