Following the "release early, release often" motto, I am happy to announce version 0.1.0 of HSH, the Haskell shell.
You may obtain it with:
darcs get --tag 0.1.0 http://darcs.complete.org/hsh
Things are still very rough in many ways, but this version already lets you:
- Run commands
- Pipe things between commands
- Pipe command input/output into and out of pure Haskell functions
- Pure Haskell functions are as much a first-class citizen as is grep or cat
Here is an example session: (some lines wrapped for readability)
$ ghci -fglasgow-exts HSH
*HSH> run $ ("ls", ["."])
COPYING HSH HSH.hs TODO announcements testsrc
COPYRIGHT HSH.cabal Makefile _darcs test.hs
*HSH> run $ ("ls", ["-l"]) -|- ("wc", ["-l"])
12
*HSH> :m +Text.Printf
*HSH Text.Printf> let countLines = (zipWith (\i line -> printf "%-5d %s" i line)
[(1::Int)..])::([String] -> [String])
*HSH Text.Printf> run $ ("ls", ["-l"]) -|- countLines -|- ("grep", ["hs$"])
6 -rw-r--r-- 1 jgoerzen jgoerzen 1285 Jun 6 09:43 HSH.hs
11 -rw-r--r-- 1 jgoerzen jgoerzen 565 Jun 6 09:43 test.hs
*HSH Text.Printf> :m +Data.List
*HSH Text.Printf Data.List> run $ ("ls", ["-l"]) -|- countLines -|-
filter (isSuffixOf "hs")
6 -rw-r--r-- 1 jgoerzen jgoerzen 1285 Jun 6 09:43 HSH.hs
11 -rw-r--r-- 1 jgoerzen jgoerzen 565 Jun 6 09:43 test.hs
*HSH Text.Printf Data.List> run $ ("ls", ["-l"]) -|- countLines -|- filter (isSuffixOf "hs")
-|- ("tr", ["a-z", "A-Z"])
6 -RW-R--R-- 1 JGOERZEN JGOERZEN 1285 JUN 6 09:43 HSH.HS
11 -RW-R--R-- 1 JGOERZEN JGOERZEN 565 JUN 6 09:43 TEST.HS
*HSH Text.Printf Data.List> let generator = \(_::String) -> unlines . map show $ [1..20]
*HSH Text.Printf Data.List> generator ""
"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n"
*HSH Text.Printf Data.List> run $ generator -|- ("grep", ["1"])
1
10
11
12
13
14
15
16
17
18
19
Future versions will likely simplify syntax to make it easier to write scripts and introduce a sh to hsh converter. I also plan to add pure Haskell tools for some common shell-ish things that one could do in Haskell.
Comments
Thu, 21.08.2008 02:22
He could recycle it, but first ly, it's much more efficient i n the long term for it not to be sent in the first pla [...]
Thu, 21.08.2008 00:48
Nice one! You've inspired me to do something about these an noying PennySaver catalogues - like you, I hate junk m [...]
Wed, 20.08.2008 22:00
"I will never understand why p eople like yourself like to ma ke mountains out of (making mo untains out of)^n mole h [...]
Wed, 20.08.2008 21:54
I'm not subverting the law; th is usage of it has been explic itly approved and encouraged b y the Supreme Court, and [...]
Wed, 20.08.2008 20:47
How proud you must be, subvert ing an obscure law for your ow n, unrelated ends. I can only guess you're one to ran [...]
Wed, 20.08.2008 20:17
Good on you for sticking it ou t; I must admit I tend to just follow the 'straight to recyc ling' because I tend to [...]
Wed, 20.08.2008 19:29
I will never understand why pe ople like yourself like to mak e mountains out of making moun tains out of mole hills. [...]
Wed, 20.08.2008 19:03
I will never understand why pe ople like yourself like to mak e mountains out of mole hills. Put the paper in the r [...]