On Tue, 2009-03-24 at 19:42 +0100, Manlio Perillo wrote: > Tim Newsham ha scritto: > >> These friends are very interested in Haskell, but it seems that the > >> main reason why they don't start to seriously learning it, is that > >> when they start reading some code, they feel the "Perl syndrome". > >> > >> That is, code written to be "too smart", and that end up being totally > >> illegible by Haskell novice. > >> > >> I too have this feeling, from time to time. > >> > >> Since someone is starting to write the Haskell coding style, I really > >> suggest him to take this "problem" into strong consideration. > > > > When you think about it, what you are saying is that Haskell programmers > > shouldn't take advantage of the extra tools that Haskell provides. > > No, I'm not saying this. > > But, as an example, when you read a function like: > > buildPartitions xs ns = zipWith take ns . init $ scanl (flip drop) xs ns > > that can be rewritten (argument reversed) as: > > takeList :: [Int] -> [a] -> [[a]] > takeList [] _ = [] > takeList _ [] = [] > takeList (n : ns) xs = head : takeList ns tail > where (head, tail) = splitAt n xs
Huh? This is ugly and un-readable. Seriously. > I think that there is a problem. Damn straight. It should be: > buildPartitions xs ns = > zipWith take ns $ init $ scanl (flip drop) xs ns Or, if you're really worried about blocks/line, you can increase the line count a bit (I do this regularly): > buildPartitions xs ns = > zipWith take ns $ -- Select just the indicated prefix of each element > init $ -- Skip the last (empty) element > scanl (flip drop) xs $ -- Cumulatively remove prefixes of indicated length > ns > The buildPartition contains too many "blocks". > And I have read code with even more "blocks" in one line. > > It may not be a problem for a "seasoned" Haskell programmer, but when > you write some code, you should never forget that your code will be read > by programmers that can not be at your same level. Not if I can help it. More seriously, beginner code belongs in the first two-three chapters of Haskell programming textbooks, not anywhere else. It's like putting Fun with Dick & Jane-speak in an adult novel.[1] > I think that many Haskell programmers forget this detail, and IMHO this > is wrong. > > > Haskell provides the ability to abstract code beyond what many other > > programming systems allow. This abstraction gives you the ability to > > express things much more tersely. This makes the code a lot harder to > > read for people who are not familiar with the abstractions being used. > > The problem is that I have still problems at reading and understanding > code that is too much terse... > Because I have to assemble in my mind each block, and if there are too > many blocks I have problems. jcc [1] Well, not that bad. Beginner-level code is useful for teaching the basics of the language; Fun with Dick & Jane is child abuse. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe