[Haskell-beginners] [OT] Haskell-inspired functions for BASH

Marc Weber marco-oweber at gmx.de
Thu Feb 18 22:31:47 EST 2010


Your project is nice.

I never thougt about how much effort it is to write

cmd | while read f; do basename $f; done

cmd | map basename

*is* much easier.

For now I just put
map(){ while read l; do $@ "$l"; done; }

into my .bashrc. Having a simple parser which parses the "lambda"
funtion to split cols could be interesting. Example

ecoh -e "a b\nb c" | map "\1 2 ->  echo $2"
should output the second col or such. (separating values by spaces or
tabs. There are at least two tools which can do this as well:

| awk '{ print $2}': or such or man col. Probably there are more tools.

The Windows-Powershell even let's you pass objects. However it's command
line interface is horrible compared to bash / zsh. But I think they're
working on this. Also you could use some Vim tools to workaround this.

There was another attempt to create many tools using Haskell. I don't
recall the name. Just open hackage and search for "Shell".

On the other hand let me tell you what my experience is. I do shell
scripting once in a while. However bash/sh sucks if you have to do more
complicated things.
It can be done but you start fighting with the language or learning
details about it you don't want to know.
Eg the difference 

echo "foo" | while ... done
in contrast to
while ... done <<< "foo"

The first one opens a subshell which means if you assign local vars you
can't use the results outside of the loop.

So additionally to your attempt I highly recommend you learning a
scripting language such as Ruby or Python to get some things done.
Why do I *not* recommend haskell here? Because compiling scripts will
use much disk space (Haskell applications tend to be big) and ghci
startup time is bad compared to either Python or Ruby. So you can image
than you have to wait 5secs using a pipe like this:
echa | app1 | app2 | app3 | app4
just because ghci has to startup and load some libraries.


Anyway there are many projects which could server your needs. Eg
http://www.focusresearch.com/gregor/sw/psh/ yet another.

Before spending much effort on your library I'd spend some time
searching the net to see what is available.. Also make sure to search
the haskell-cafe mailinglist. I think you'll find some pointers there as
well. Whil searching the web don't miss autopager (FireFox plugin).

Good luck and thank you for your map shortcut idea!

Marc Weber


More information about the Beginners mailing list