
15 Mar
2006
15 Mar
'06
1:06 a.m.
Chris Kuklewicz wrote:
Neil Mitchell wrote:
How's this? What about ++, in Haskell thats just an ordinary function, yet you are using the library one in this case.
(++) a b = foldr (:) b a
or
(++) = flip (foldr (:))
so
concat = foldr (flip (foldr (:))) []
also
map = (\f -> foldr ((:).f) [])
thus
concatMap = (\f -> (foldr (flip (foldr (:))) []) . (foldr ((:).f) []))
No recursive definitions in sight...all built with foldr
Of course, I should only need one [] in the optimal definition: concatMap = (\f -> (foldr (flip (foldr (:)).f) [])) Which lambdabot can make "pointless" by eliminating the \f-> concatMap = flip foldr [] . (flip (foldr (:)) .) -- Chris