[Haskell-cafe] What *not* to use Haskell for

wren ng thornton wren at freegeek.org
Tue Nov 11 21:02:59 EST 2008


Dave Tapley wrote:
> Hi everyone
> 
> So I should clarify I'm not a troll and do "see the Haskell light". But
> one thing I can never answer when preaching to others is "what does
> Haskell not do well?"
> 
> Usually I'll avoid then question and explain that it is a 'complete'
> language and we do have more than enough libraries to make it useful and
> productive. But I'd be keen to know if people have any anecdotes,
> ideally ones which can subsequently be twisted into an argument for
> Haskell ;)

With the appropriate caveats about particular subdomains (see final 
paragraph), I wouldn't use Haskell for scripting. That is, (1) for 
Bash-style programming where 95% of the code is just invoking *nix jobs, 
or (2) for very simple yet regex-heavy scripts where Perl/Awk/Sed is 
often used.

Re #1: Honestly, I don't see anything other than a dedicated competitor 
being able to unseat Bourne/Bash at this task. Certainly a competitor 
would have much room for improvement-- what with being able to replace 
string-rewriting semantics with term-rewriting semantics, vastly 
improving type safety and catching innumerable bugs. However, with 
unsavory frequency, it is exactly those type-unsafe substitutions which 
can make shell scripting cleaner and more direct than a type-safe 
alternative. Having type safety as well as this sort of 
non-compositional structure would take a good deal of work to get right.

Re #2: People often complain about spooky Perl that uses things like 
implicit $_ or other hidden variables. While these constructs can make 
any sizable project unmaintainable, for the quick and dirty jobs they're 
just what's needed to get things done with clarity. While ByteString 
code using regexes is just as fast in Haskell, it's often more than 
twice as long as the Perl, Sed, or Awk equivalents because many of the 
basic control structures (like Perl's -n, -p, -l,... flags) aren't 
already provided.


That said, this isn't necessarily a bad thing for Haskell. "Real" 
programming languages often don't do so well in these areas (Perl being 
the exception), and they don't feel too bad about it. Both varieties of 
shell scripting are very much of the DSL nature; for programs with a 
significant amount of "actual logic" instead of mere plumbing or 
regexing, Haskell can certainly outshine these competitors. On the one 
hand, C and friends fight dirty and much work has been done so Haskell 
can join in on the bit-bashing glory. However, shell scripting is a 
whole different kind of imperative muck and very little work (that I've 
seen) has tried to get Haskell to jump down in the sewers with them.

-- 
Live well,
~wren


More information about the Haskell-Cafe mailing list