packages feed

shaker-0.4.3: prog/Shaker.hs

module Main
 where

import Shaker.Type
import Shaker.Conductor
import Shaker.Parser
import Shaker.Cabal.CabalInfo
import Control.Monad.Reader
import System.Environment

main :: IO()
main = do
  args <- getArgs
  cab <- defaultCabalInput 
  if null args 
    then runReaderT initThread cab
    else 
         runReaderT ( runArgumentAction $ concat args) cab >> return ()
  
runArgumentAction :: String -> Shaker IO ()
runArgumentAction args = do 
  shIn <- ask 
  let either_command = parseCommand args shIn
  lift $ either errAction (okAction shIn) either_command 
  return () 
  where 
        errAction = putStrLn . show 
        okAction :: ShakerInput -> Command -> IO()
        okAction shIn command = do
           putStrLn ("Executing " ++ show command) 
           withArgs [] (runReaderT (executeCommand (Just command)) shIn )
           return ()