It parses a sed script into an AST, then interprets that AST. sed is simple enough that such an interpretor is easy to write. e.g. each input line is only processed once, and in order
Maybe one of the more interesting parts is the testing of the parser using specification-based testing. First, define how to generate an arbitrary sed script (in its AST form). Haskell's QuickCheck will then generate 100 random sed scripts, and check that upon being pretty printed (to a sed script in its usual textual form), and then parsed, produces the original AST.
Specification-based testing is a nice complement to unit-based testing, that I'm beginning to rely more on, to avoid the tedium of writing so many unit tests.
The parser does not yet support nested sed expressions that contain more than one subexpression. The qualifier "suchThat (\xs -> length xs == 1)" at https://github.com/tomfitzhenry/hs-sed/blob/master/tests/Pre... documents this, and as a side-effect serves as a todo list [which I have since ignored for months :)].
I thought it was going to be an implementation of AWK written in Haskell, but it's actually an AWK-like text-processing tool that uses Haskell as the language.
Not sure whether that's better or worse than traditional AWK. Haskell's certainly a well-respected language, but I found the examples in the README kind of confusing. I don't know much about Haskell in detail, so maybe that's just me, but it does suggest that this lacks some of AWK's readability for the uninitiated....
Author here. You're right, "Awk in Haskell" is perhaps a bit misleading. The intention is not to replace Awk for the masses, but mainly to provide an Awk-like tool for programers who are more familiar with Haskell. Similar to pyline: http://code.activestate.com/recipes/437932-pyline-a-grep-lik....
While I am flattered that somebody would post one of my repos on Hacker News, any particular reason why the link is to my fork and not to the original repo? ssadler deserves some credit :)
It parses a sed script into an AST, then interprets that AST. sed is simple enough that such an interpretor is easy to write. e.g. each input line is only processed once, and in order
Maybe one of the more interesting parts is the testing of the parser using specification-based testing. First, define how to generate an arbitrary sed script (in its AST form). Haskell's QuickCheck will then generate 100 random sed scripts, and check that upon being pretty printed (to a sed script in its usual textual form), and then parsed, produces the original AST.
Specification-based testing is a nice complement to unit-based testing, that I'm beginning to rely more on, to avoid the tedium of writing so many unit tests.
The parser does not yet support nested sed expressions that contain more than one subexpression. The qualifier "suchThat (\xs -> length xs == 1)" at https://github.com/tomfitzhenry/hs-sed/blob/master/tests/Pre... documents this, and as a side-effect serves as a todo list [which I have since ignored for months :)].