[Haskell-cafe] filter using foldr point-free?
Svein Ove Aas
svein.ove at aas.no
Tue Nov 10 06:56:56 EST 2009
On Tue, Nov 10, 2009 at 12:47 PM, damodar kulkarni
<kdamodar2000 at gmail.com> wrote:
> Hi,
> We can define filter using foldr as under:
>
> filter1 p = foldr (\x xs -> (if (p x) then (x:xs) else xs)) []
>
> Can we define filter using foldr but in pointfree style?
>
Pointfree code is (nearly) always possible, but sometimes not very
desirable. The first thing to do is to ask lambdabot for help; in this
case, the answer is.. this:
filter1 = flip foldr [] . flip flip id . (ap .) . (`ap` (:)) . (((.) . if') .)
if' p a b = if p then a else b
Now, there may be a better way to go about this, but I don't think I'd
bother trying. The pointful variant seems quite readable as-is. :P
--
Svein Ove Aas
More information about the Haskell-Cafe
mailing list