aboutsummaryrefslogtreecommitdiff
path: root/clpm.icl
blob: 195b135ec6fb04382addc4800f630603a3e35406 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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