
Hiya everyone. I'd like to announce the release of a little CLI program I whipped up. It's called mueval http://hackage.haskell.org/cgi-bin/hackage-scripts/package/mueval.
WHAT:
Mueval grew out of my discontent with Lambdabot: it's really neat to be able to run expressions like this:
07:53 < ivanm> > filter (\ x -> isLetter x || x == '\t') "asdf$#$ dfs"
07:55 < lambdabot> "asdfdfs"
But lambdabot is crufty and very difficult to install or run. IMO, we need a replacement or rewrite, but one of the things that make this difficult is that lambdabot uses hs-plugins to get that sort of evaluation functionality, and hs-plugins is half the problem. We want some sort of standalone executable which provides that functionality. Now, 'ghc -e' is obviously unsuited because there is no sandboxing, so what I've done is basically marry the GHC API (as rendered less sharp-edged by Hint) with a bunch of resource limits and sandboxing (as largely stolen from lambdabot).
EXAMPLES:
The end result is an adorable little program, which you can use like this:
bash-3.2$ mueval --expression '1*100+1'
Expression type: (Num t) => t
result: "101"
bash-3.2$ mueval --expression "filter (\`notElem\` ['A'..'Z']) \"abcXsdzWEE\""
Expression type: [Char]
result: "\"abcsdz\""
Note that mueval will avoid all the attacks I've been able to test on it:
bash-3.2$ mueval --expression 'let x = x in x'
Expression type: t
result: "mueval: Time limit exceeded
bash-3.2$ mueval --expression "let foo = readFile \"/etc/passwd\" >>= print in foo"
Expression type: IO ()
result: "