applyAll :: [ a -> a ] -> a -> a
applyAll = flip (foldr id)
applyAll' :: [ a -> a ] -> a -> a
applyAll' [] x = x
applyAll' (f:fs) x = f (applyAll' fs x)
----- test -----
main = do
putStrLn $ show $ applyAll [simple 2 2, (+3)] 5
putStrLn $ show $ applyAll' [simple 2 2, (+3)] 5
{-
applyAll fs x = foldr g x fs
g f x = f x ====> g == id
so,
applyAll fs x = foldr id x fs
= (flip (foldr id)) fs x
so,
applyAll = flip (foldr id) -- eta reduction
-}
simple :: Int -> Int -> Int -> Int
simple x y z = x * (y+z)
This entry was posted
on Tuesday, June 5th, 2007 at 5:06 pm and is filed under Haskell - SOE.
You can follow any responses to this entry through the RSS 2.0 feed.
You can leave a response, or trackback from your own site.