packages feed

nemesis-2009.6.12: src/Runner.hs

{-# LANGUAGE QuasiQuotes #-}

import MPS
import Prelude hiding ((.), (>), (^))
import System.Cmd


start, end :: String
start = [$here|
module Main where
import System.Nemesis


|]

end = [$here|


main = run nemesis
|]

main :: IO ()
main = do
  dir <- ls "."
  src <- readFile $ dir.filter (belongs_to possible_source) .get_name
  let h = src.lines.takeWhile (lower > starts_with sep > not) .unlines
      t = src.lines.dropWhile (lower > starts_with sep > not) .unlines
  if t.null
    then output $ start ++ h ++ end
    else output $ h ++ start ++ t ++ end
  
  system $ "ghc --make " ++ tmp_name ++ " -o " ++ bin
  system $ "rm " ++ tmp_name
  return ()
  
  where
    get_name [] = error "nem.hs does not exists"
    get_name xs = xs.first
    possible_source = ["Nem.hs", "nem.hs", "nemesis.hs", "Nemesis.hs"]
    sep = "-- nem"
    output = writeFile tmp_name
    tmp_name = "nemesis-tmp.hs"
    bin = "nem"