46 lines
1.5 KiB
Haskell
46 lines
1.5 KiB
Haskell
--
|
|
-- Copyright (c) 2004 Don Stewart - http://www.cse.unsw.edu.au/~dons
|
|
-- GPL version 2 or later (see http://www.gnu.org/copyleft/gpl.html)
|
|
--
|
|
|
|
--
|
|
-- | Runplugs: use hs-plugins to run a Haskell expression under
|
|
-- controlled conditions.
|
|
--
|
|
import System.Eval.Haskell (unsafeEval)
|
|
|
|
import Data.Maybe (isJust, fromJust)
|
|
import Control.Monad (when)
|
|
|
|
import System.Exit (exitWith, ExitCode(ExitSuccess))
|
|
import System.IO (getContents, putStrLn)
|
|
import System.Posix.Resource (setResourceLimit,
|
|
Resource(ResourceCPUTime),
|
|
ResourceLimits(ResourceLimits),
|
|
ResourceLimit(ResourceLimit))
|
|
|
|
rlimit = ResourceLimit 3
|
|
|
|
context = prehier ++ datas ++ qualifieds ++ controls
|
|
|
|
prehier = ["Char", "List", "Maybe", "Numeric", "Random" ]
|
|
|
|
qualifieds = ["qualified Data.Map as M", "qualified Data.Set as S"]
|
|
|
|
datas = map ("Data." ++) [
|
|
"Bits", "Bool", "Char", "Dynamic", "Either",
|
|
"Graph", "Int", "Ix", "List",
|
|
"Maybe", "Ratio", "Tree", "Tuple", "Typeable", "Word"
|
|
]
|
|
|
|
controls = map ("Control." ++) ["Monad", "Monad.Reader", "Monad.Fix", "Arrow"]
|
|
|
|
main = do
|
|
setResourceLimit ResourceCPUTime (ResourceLimits rlimit rlimit)
|
|
s <- getContents
|
|
when (not . null $ s) $ do
|
|
s <- unsafeEval ("(take 2048 (show ("++s++")))") context
|
|
when (isJust s) (putStrLn (fromJust s))
|
|
exitWith ExitSuccess
|
|
|