> From: Ketil Malde <[email protected]> > > "S. Doaitse Swierstra" <[email protected]> writes: > >>> then (s1 ++ s2 ++ s3 ++ s4) where >>> s1 = "Golds " >>> s2 = show (gold s g) >>> s3 = ", Silvers " >>> s4 = show (silver s g) > >> If you want to keep the definitions local to the expression you should write > > ..but I think it is better style to avoid this kind of one-off named > values. I much prefer: > > then "Golds "++show (gold s g)++... > > For some reason, this is a style isse that doesn't get much attention, > at least not in the non-functional language tradition, where temporary > variables are scattered all over. So instead of doing: > > let ns y = not (isSpace y) > f x = takeWhile ns x > in map f > > We can use anonymous functions in place of the uninformatively named > ones: > > map (\x -> takeWhile (\y -> not (isSpace y)) x) > > and use partial application toward point-free-ness: > > map (takeWhile (not . isSpace))
I agree, and also tend to this style. Although I sometimes use one-off named values to avoid line wraps. For the particular task of combining strings like this, how about using Text.Printf.printf? then printf "Golds %s, Silvers %s" (show (gold s g)) (show (silver s g)) It can be a little hard to understand the type at first, but IMHO it works as expected. Cheers, John _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
