module clpm from StdFunc import flip, o import StdFile import StdList import StdOverloaded import StdString import Control.Applicative import Control.Monad import Data.Error from Data.Func import $ import Data.Functor import Data.Maybe import Data.Tuple from Text import instance + String import Text.JSON import System.CommandLine import System.File import CLPM.Package FILENAME :== "clpm.json" :: Arguments = { package_file :: String } instance zero Arguments where zero = { package_file = FILENAME } Start w # (io,w) = stdio w # ((missed, args), w) = appFst (parseArgs [] zero o tl) $ getCommandLine w | not (isEmpty missed) # io = foldr (flip (<<<)) io ["Unknown option: " + m + "\n" \\ m <- missed] # (_,w) = fclose io w = w # (pkg,w) = readPackage args.package_file w | isNothing pkg # io = io <<< "Could not parse " <<< args.package_file <<< '\n' # (_,w) = fclose io w = w # pkg = fromJust pkg # io = io <<< pkg <<< '\n' # (_,w) = fclose io w = w parseArgs :: [String] Arguments [String] -> ([String], Arguments) parseArgs miss args [] = (miss, args) parseArgs miss args ["-p":name:rest] = parseArgs miss {args & package_file = name} rest parseArgs miss args [a:rest] = parseArgs [a:miss] args rest readPackage :: String -> *World -> *(Maybe Package, *World) readPackage f = appFst parse o readFile f where parse = join o fmap (fmap toPackage o fromJSON o fromString) o error2mb