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

Jonathan Cast jonathanccast at fastmail.fm
Wed Nov 12 14:03:59 EST 2008


On Wed, 2008-11-12 at 10:50 -0800, Don Stewart wrote:
> tux_rocker:
> > 2008/11/11 Dave Tapley <dukedave at gmail.com>:
> > > 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?"
> > 
> > Let's say something controversial: I think that Haskell's type system
> > gets in your way when you're writing one-shot scripts that don't need
> > to conform to the highest correctness standards. Imagine typing a
> > command at the shell prompt and getting the sort of abstract error
> > message that Haskell compilers give every now and then, like:
> > 
> > > whyerror.lhs:36:25:
> > >     Ambiguous type variable `a' in the constraint:
> > >       `Arrow a' arising from use of `>>>' at whyerror.lhs:36:25-27
> > >     Possible cause: the monomorphism restriction applied to the
> > > following:
> > >       liftA2' :: forall b a1 b1 c. (a1 -> b1 -> c) -> a b a1 -> a b
> > > b1 -> a b c
> > >         (bound at whyerror.lhs:36:1)
> > >       unsplit' :: forall a1 b c. (a1 -> b -> c) -> a (a1, b) c
> > >         (bound at whyerror.lhs:34:1)
> > >       split' :: forall b. a b (b, b) (bound at whyerror.lhs:33:1)
> > >     Probable fix: give these definition(s) an explicit type signature
> > >                   or use -fno-monomorphism-restriction
> > 
> > You don't want to be bothered by such monstrosities (yes, they are,
> > even though many of you may not see it because of years of
> > conditioning) when you're just hacking up a simple script to make a
> > catalog of your MP3 collection / check for patterns in log files /
> > whatever.
> 
> Why are you using Arrows in your one shot scripts?

Because a generic operator like (>>>) is

a) More likely to exist, and
b) easier to remember

than a special case operator like --- actually, I don't think GHC does
come with a standard version of (>>>) type-specialized to functions,
only a version of (<<<).  Or if it does, I can't remember it.

> Do you use Arrows in
> your shell scripts?

I use pipelines.  Frequently.  I even type them up at the command line.

Beyond that, I was considering the pipeline

uses -l snippet_calculate\\b |
perl -lne 'chomp; print $_ unless qx{svn st | grep $_}'

(`uses' is a recursive grep-like shell function I have).  The use of
perl immediately suggested that it could profitably be re-written in
Haskell (actually, in a similar FP language I've been designing --- not
relevant); my translation included a line something like

interactiveM $ filterM $ comp >>> \ x -> <translation of qx{svn st |
grep $x}>

So yeah, I use arrows in my shell scripts.  Who doesn't?

(On the other hand, I'm actively designing an FP shell-like language...)

jcc




More information about the Haskell-Cafe mailing list