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: "
participants (1)
- 
                
Gwern Branwen