[Haskell-cafe] Shootout rankings
Donald Bruce Stewart
dons at cse.unsw.edu.au
Sun Jan 15 18:24:03 EST 2006
sebastian.sylvan:
> On 1/15/06, Donald Bruce Stewart <dons at cse.unsw.edu.au> wrote:
> > sebastian.sylvan:
> > > On 1/15/06, Isaac Gouy <igouy at yahoo.com> wrote:
> > > > > Haskell now ranked 2nd overall, only a point or so
> > > > > behind C:
> > > >
> > > > It was always obvious that the "Write the program
> > > > as-if lines of code were not being measured" clause
> > > > relied too heavily on contributors willingness to
> > > > co-operate.
> > > >
> > > > http://shootout.alioth.debian.org/gp4/faq.php#implementlist
> > > >
> > > > Maybe we finally have enough motivation to move to
> > > > some other measurement of program volume :-)
> > > >
> > >
> > > I was just thinking about that. Some code is very obfuscated due to
> >
> > No Sebastian, this is very obfuscated: http://www.cse.unsw.edu.au/~dons/pretty.html
> >
> > ;)
> >
> > I think saying obfuscated is very unfair. We took advantage of some strengths
> > of Haskell, such as type inference, to reduce the number of lines. No
> > worse than, say, the SML MLton entries do -- and why not leverage this advantage,
> > since our language can do it?
> >
> > In fact, we have 1 line entries for some of the problems that are just
> > not competitive, though very instructive. It would be nice to be able to
> > publish those.
>
> I wasn't talking specifically about Haskell, but all languages (don't
> like browsing around other languages only to see highly compact and
> ugly solutions, which really don't give me a good taste for the
> langugae).
> Still, some Haskell implementations are clearly obfuscated to save
> lines in certain circumstances (like: "thread im om = do (x::Int) <-
> takeMVar im; putMVar om $! x+1; thread im om" int he cheap
> concurrencybenchmark, most people don't write Haskell code with
> semi-colons, and when they do they usually sequence them vertically,
> not horizontally).
Though often the case, using ; is not without precedent. A quick grep in the
ghc source reveals many:
get bh = do a <- get bh; b <- get bh; return (a :% b)
mappM f (x:xs) = do { r <- f x; rs <- mappM f xs; return (r:rs) }
sequenceM (x:xs) = do { r <- x; rs <- sequenceM xs; return (r:rs) }
do { bty1' <- kc_larg_ty bty1; bty2' <- kc_larg_ty bty2; return (InfixCon bty1' bty2') }
repE (HsApp x y) = do {a <- repLE x; b <- repLE y; repApp a b}
....
So for one liners, it's often better than plugging it together with >> and >>=
-- Don
More information about the Haskell-Cafe
mailing list