On 11/18/05, Bulat Ziganshin <[EMAIL PROTECTED]> wrote: > Hello Sebastian, > > Thursday, November 17, 2005, 11:02:09 PM, you wrote: > > SS> IMO it really only works well for simple "chains" like "foo . bar . > SS> oof . rab" but as soon as you start working with functions that take > SS> more parameters it starts looking very unreadable and you'd be better > SS> off to just use $ or write out paranthesis and apply arguments > SS> explicitly, or better yet, introduce some temporary descriptive > SS> variables in a let or where clause. > > "are you don't like cats? you just don't know how to cook them right!" :) > > -- |Returns length of initial segment of list, conforming to combined > condition > -- F.e. "groupLen (fiSize) (+) (<16*mb) files" returns length of > -- initial segment of list, containing files with TOTAL size not exceeding 16 > mb > groupLen mapper combinator tester = length . takeWhile tester . scanl1 > combinator . map mapper >
This is a border line example of what I would consider being abuse of the (.) operator. First of all, that line is 96 characters long. A bit much if you ask me. But still, assuming you're fine with having functions > 80 chars, it could be written fairly clearly as: groupLen mapper combinator tester = length <> takeWhile tester <> scanl1 combinator <> map mapper where <> = . Or how about: groupLen' mapper combinator tester xs = length $ takeWhile tester $ scanl1 combinator $ map mapper xs The difference is minimal, if anything I think that writing out the list argument is actually clearer in this case (although there are cases when you want to work on functions, and writing out the parameters makes things less clear). I'm not saying it's impossible to make good use of (.), I'm saying that it's not crucial enough to warrant giving it the dot, which in my opinion is one of the best symbols (and I'd hand it over to record selection any day of the week!). I'm also saying that people tend to abuse the (.) operator when they start out because they think that "less verbose == better", whereas most people, in my experience, tend to stop using (.) for all but the simplest cases (such as "filte (not . null)") after a while to promote readability. I prefer adding a few lines with named sub-expressions to make things clearer. /S -- Sebastian Sylvan +46(0)736-818655 UIN: 44640862 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe