aboutsummaryrefslogtreecommitdiff
path: root/CleanC.dcl
blob: 1a830565665e085554bcba774bb303024c820043 (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
definition module CleanC

from StdClass import class toInt, class toString, class toReal,
                     class fromInt, class fromString, class fromReal

:: State

:: CType = Int | String | Real
:: CParam = CI Int | CS String | CR Real

cNewState :: *State

instance toInt CParam
instance toString CParam
instance toReal CParam

class fromCParam a :: CParam -> a
instance fromCParam Int
instance fromCParam String
instance fromCParam Real

instance fromInt CParam
instance fromString CParam
instance fromReal CParam

class toCParam a :: a -> CParam
instance toCParam Int
instance toCParam String
instance toCParam Real

class toCParamList a :: a -> [CParam]
instance toCParamList [CParam]
instance toCParamList Int
instance toCParamList String
instance toCParamList Real
instance toCParamList (a,b) | toCParam a & toCParam b
instance toCParamList (a,b,c) | toCParam a & toCParam b & toCParam c
instance toCParamList (a,b,c,d) | toCParam a & toCParam b & toCParam c & toCParam d
instance toCParamList (a,b,c,d,e) | toCParam a & toCParam b & toCParam c & toCParam d & toCParam e
instance toCParamList (a,b,c,d,e,f) | toCParam a & toCParam b & toCParam c & toCParam d & toCParam e & toCParam f
instance toCParamList (a,b,c,d,e,f,g) | toCParam a & toCParam b & toCParam c & toCParam d & toCParam e & toCParam f & toCParam g

cInit :: !*State -> *State

cPuti :: !Int !*State -> *State
cPuts :: !String !*State -> *State
cPutr :: !Real !*State -> *State

cPutParam :: !CParam -> *State -> *State

cSetReturnType :: !CType -> *State -> *State

cCall_ :: !String !*State -> *State

cGeti :: !*State -> (!Int, !*State)
cGets :: !*State -> (!String, !*State)
cGetr :: !*State -> (!Real, !*State)

cCall :: !CType !String !a !*State -> (!CParam, !*State) | toCParamList a