[Haskell-cafe] Re: First time haskell - parse error!

John Lato jwlato at gmail.com
Wed Mar 10 06:11:00 EST 2010


> From: Ketil Malde <ketil at malde.org>
>
> "S. Doaitse Swierstra" <doaitse at cs.uu.nl> 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


More information about the Haskell-Cafe mailing list