import System.Plugins

import System.Directory

a    = "Foo.hs" -- uesr code
b    = "Bar.hs" -- trusted code. Result is "Bar.o"

main = do
        status <- makeWith a b []
        s <- case status of
                MakeFailure   e -> mapM_ putStrLn e >> error "failed"
                MakeSuccess n s -> print n >> return s

        status <- makeWith a b []
        s' <- case status of
                MakeFailure   e -> mapM_ putStrLn e >> error "failed"
                MakeSuccess n s -> print n >> return s

        status <- makeWith a b []
        s'' <- case status of
                MakeFailure   e -> mapM_ putStrLn e >> error "failed"
                MakeSuccess n s -> print n >> return s

        print $ (s == s') && (s' == s'')

        m_v   <- load s [] [] "resource"
        v <- case m_v of
            LoadSuccess _ v -> return v
            _               -> error "load failed"
        putStrLn $ show $ (v :: Int)

        makeCleaner s''