[Haskell-beginners] How would you improve this program?
Ovidiu Deac
ovidiudeac at gmail.com
Tue Oct 11 13:04:23 CEST 2011
You have your main function which calls printTokens which calls again
printToken. Both of the print* functions are IO (). I see that as
being bad style.
It would be cleaner if you would build the string to be printed in
some nice pure functions and then print that string in main directly.
That way you isolate the IO actions in the main function only.
I'm thinking something like this:
tokenToString :: Int -> Int -> Token -> String
tokenToString maxLength maxCount (Token w c) =
...
tokenListToString :: [Token] -> String
tokenListToString tokens =
join "\n" result -- from Data.List.Utils
where
result = map (tokenToString maxLength maxCount) sortedTokens
...
main = do
words <- getContents
let output = tokenListToString $ countTokens words
putStr output
This way your function types actually mean something instead of just
having functions IO () which could do whatever they like
ovidiu
On Sun, Oct 9, 2011 at 11:11 PM, Lorenzo Bolla <lbolla at gmail.com> wrote:
> Hi all,
> I'm new to Haskell and I'd like you to take a look at one of my programs and
> tell me how you would improve it (in terms of efficiency, style, and so
> on!).
> The source code is
> here: https://github.com/lbolla/stanford-cs240h/blob/master/lab1/lab1.hs
> The program is an implementation of this
> problem: http://www.scs.stanford.edu/11au-cs240h/labs/lab1.html (basically,
> counting how many times a word appear in a text.)
> (I'm not a Stanford student, so by helping me out you won't help me to cheat
> my exam, don't worry!)
> I've implemented 3 versions of the algorithm:
>
> a Haskell version using the standard "sort": read all the words from stdin,
> sort them and group them.
> a Haskell version using map: read all the words from stdin, stick each word
> in a Data.Map incrementing a counter if the word is already present in the
> map.
> a Python version using defaultdict.
>
> I timed the different versions and the results are
> here: https://github.com/lbolla/stanford-cs240h/blob/master/lab1/times.png.
> The python version is the quickest (I stripped out the fancy formatting
> before benchmarking, so IO is not responsible for the time difference).
> Any comments on the graph, too?
> Thanks a lot!
> L.
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
>
More information about the Beginners
mailing list