blob: d0b089d4b98d76841408ed87c4ae3406f7356ed2 (
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
|
implementation module CLPM.Repository
import StdBool
import StdClass
from StdFunc import flip, o
import StdOverloaded
import Control.Applicative
import Control.Monad
import Data.Error
from Data.Func import $
import Data.Functor
import Data.Maybe
import Data.Tuple
import Internet.HTTP
from Text import instance + String
import Text.JSON
import CLPM.Package
import CLPM.Util
derive JSONDecode RepositoryItem, RepositoryItemVersion
getRepository :: Url *World -> *(MaybeErrorString Repository, *World)
getRepository repo w
# (resp,w) = doRequest req w
| isError resp
= (Error $ fromError resp, w)
# repo = fromJSON $ fromString (fromOk resp).rsp_data
| isNothing repo
= (Error $ "Server did not return a repository.", w)
= (Ok $ fromJust repo, w)
where
req =
{ newHTTPRequest
& req_path = "/list.php"
, server_name = REPOSITORY
, server_port = PORT
}
getVersions :: (PackageName Repository -> [RepositoryItemVersion])
getVersions = flip (getvs [])
where
getvs :: [RepositoryItemVersion] Repository PackageName -> [RepositoryItemVersion]
getvs vs [] p = vs
getvs vs [i:r] p
| i.RepositoryItem.name == p = getvs (vs ++ i.RepositoryItem.versions) r p
| otherwise = getvs vs r p
resolve :: PackageName VersionRequirement Repository -> [RepositoryItemVersion]
resolve p req rep = [v \\ ri <- rep, v <- ri.versions
| ri.RepositoryItem.name == p && satisfies req v.RepositoryItemVersion.version]
|