
jinjing
Any way here's the code:
module Dot where import Prelude hiding ( (.) )
(.) :: a -> (a -> b) -> b a . f = f a
infixl 9 .
Isn't this (roughly?) the same as flip ($)? As a side note, may I advise you to use another symbol, and leave the poor dot alone? Overloading it as a module separator is bad enough. If you have a keyboard that allows greater-than-ascii input, there are plenty of options: « » ¡ £ ¥ ł € ® ª...
comparing:
encode xs = map (\x -> (length x,head x)) (group xs)
encode xs = xs.group.map token where token x = (x.length, x.head)
To be fair, you could write the first line as: encode xs = map token (group xs) where token x = (length x, head x) I'm not normally too enthusiastic about point-free style, but when the left and right side of the = both end with the same term, there's really no need to name them, so: encode = map token . group where token x = (length x, head x) -- using function composition (.), not your definition I'm not sure that would work with left-to-right composition.
I found starting with data and working my way to a solution seems to be easier to think with, or maybe it's just me ...
For monadic code, there "default" is >>= and >> which pass things forward. There's also =<< which goes the other way - so I guess opinions differ. -k -- If I haven't seen further, it is by standing in the footprints of giants