packages feed

nemesis-2009.6.13: src/Nemesis/Runner.hs

{-# LANGUAGE QuasiQuotes #-}

import Prelude hiding ((.), (>), (^))
import System.Cmd
import Nemesis.Util

start, end :: String
start = "\n\n\n\nmodule Main where\n" ++ "import System.Nemesis"
end = "\n\n\nmain = run nemesis\n"

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 -O1 " ++ tmp_name ++ " -o " ++ bin
  system $ "rm " ++ tmp_name
  return ()
  
  where
    get_name [] = error "Nemesis does not exists"
    get_name xs = xs.first
    possible_source = ["Nemesis", "nemesis", "nemesis.hs", "Nemesis.hs"]
    sep = "-- nem"
    output = writeFile tmp_name
    tmp_name = "nemesis-tmp.hs"
    bin = "nem"
 
-- helper from mps