I found defining the following
(%) = flip fmap
I can write code like the following:
readFile "/etc/passwd" % lines % filter (not . null)
to me it makes more sense then the alternative
filter (not . null) <$> lines <$> readFile "/etc/passwd"
Obviously its just a matter of order, does anyone else do this? is there a valid reason not to write code like this?
Your operator
(%)
is exactly the operator(<&>)
from the lens package.It can be imported with:
I usually define (&) = flip (.) and it's just like your example, you can apply function composition backwords. Allows for easier to understand points-free code in my opinion.
There is a similar function for the
Applicative
typeclass called<**>
; it's a perfectly reasonable thing to want or use for Functor as well. Unfortunately, the semantics are a bit different for<**>
, so it can't be directly widened to apply toFunctor
as well.Personally I wouldn't use such an operators because then I have to learn two orders in which to read programs.