]> gerrit.simantics Code Review - simantics/r.git/blob - org.simantics.r.scl/scl/R/RExp.scl
Fixed warnings.
[simantics/r.git] / org.simantics.r.scl / scl / R / RExp.scl
1 import "Vector"\r
2 \r
3 @JavaType "org.rosuda.REngine.REXP"\r
4 data RExp = \r
5     @JavaType "org.rosuda.REngine.REXPDouble"\r
6     @FieldNames [payload]\r
7     RExpDouble (Vector Double)\r
8   | @JavaType "org.rosuda.REngine.REXPInteger"\r
9     @FieldNames [payload]\r
10     RExpInteger (Vector Integer)\r
11   | @JavaType "org.rosuda.REngine.REXPString"\r
12     @FieldNames [payload]\r
13     RExpString (Vector String)\r
14   | @JavaType "org.rosuda.REngine.REXPGenericVector"\r
15     @FieldNames [payload]\r
16     RExpGenericVector (Vector RExp)\r
17   | @JavaType "org.rosuda.REngine.REXPNull"\r
18     RExpNull\r
19 \r
20 instance Show RExp where\r
21     sb <+ RExpDouble v = do \r
22         for [0..length v-1] $ \i ->\r
23             ignore $ (if i > 0 then sb << " " else sb) <+ v!i\r
24         sb\r
25     sb <+ RExpInteger v = do \r
26         for [0..length v-1] $ \i ->\r
27             ignore $ (if i > 0 then sb << " " else sb) <+ v!i\r
28         sb   \r
29     sb <+ RExpGenericVector v = do \r
30         for [0..length v-1] $ \i ->\r
31             ignore $ (if i > 0 then sb << " " else sb) <+ v!i\r
32         sb               \r
33     sb <+ RExpNull = sb << "NULL"\r
34     sb <+ _ = sb << "unknown"\r
35     \r
36 importJava "org.rosuda.REngine.REXP" where\r
37     @JavaName dim\r
38     dimR :: RExp -> Maybe (Vector Integer)\r
39     \r
40     @JavaName getAttribute\r
41     attributeRExp :: RExp -> String -> Maybe RExp \r
42     \r
43     @private\r
44     @JavaName asDouble\r
45     convertRExpToDouble :: RExp -> Double\r
46     \r
47     @private\r
48     @JavaName asDoubles\r
49     convertRExpToVectorDouble :: RExp -> Vector Double\r
50 \r
51     @private\r
52     @JavaName asInteger\r
53     convertRExpToInteger :: RExp -> Integer\r
54     \r
55     @private\r
56     @JavaName asIntegers\r
57     convertRExpToVectorInteger :: RExp -> Vector Integer\r
58 \r
59     @private\r
60     @JavaName asString\r
61     convertRExpToString :: RExp -> String\r
62     \r
63     @private\r
64     @JavaName asStrings\r
65     convertRExpToVectorString :: RExp -> Vector String\r
66     \r
67     @private\r
68     @JavaName createDoubleMatrix\r
69     convertDoubleMatrixToRExp :: Vector (Vector Double) -> RExp \r
70 \r
71     @private\r
72     @JavaName asDoubleMatrix\r
73     convertRExpToDoubleMatrix :: RExp -> Vector (Vector Double) \r
74         \r
75     @private\r
76     @JavaName asList\r
77     convertRExpToList :: RExp -> [RExp]\r
78 \r
79 attributeR :: RCompatible a => RExp -> String -> Maybe a\r
80 attributeR exp = map fromRExp . attributeRExp exp \r
81     \r
82 @private\r
83 importJava "org.rosuda.REngine.REXPDouble" where\r
84     @JavaName "<init>"\r
85     convertDoubleToRExp :: Double -> RExp\r
86     \r
87     @JavaName "<init>"\r
88     convertVectorDoubleToRExp :: Vector Double -> RExp\r
89 \r
90 @private\r
91 importJava "org.rosuda.REngine.REXPInteger" where\r
92     @JavaName "<init>"\r
93     convertIntegerToRExp :: Integer -> RExp\r
94     \r
95     @JavaName "<init>"\r
96     convertVectorIntegerToRExp :: Vector Integer -> RExp\r
97 \r
98 @private\r
99 importJava "org.rosuda.REngine.REXPString" where\r
100     @JavaName "<init>"\r
101     convertStringToRExp :: String -> RExp\r
102     \r
103     @JavaName "<init>"\r
104     convertVectorStringToRExp :: Vector String -> RExp\r
105 \r
106 @private\r
107 importJava "org.rosuda.REngine.REXPGenericVector" where\r
108     @JavaName "<init>"\r
109     convertRListToRExp :: RList -> RExp\r
110 \r
111 @private\r
112 importJava "org.rosuda.REngine.RList" where\r
113     data RList\r
114 \r
115     @JavaName "<init>"\r
116     createRList :: [RExp] -> RList\r
117 \r
118 class RCompatible a where\r
119     fromRExp :: RExp -> a\r
120     toRExp :: a -> RExp\r
121 \r
122 instance RCompatible RExp where\r
123     fromRExp = id\r
124     toRExp = id\r
125 \r
126 instance RCompatible Double where\r
127     fromRExp = convertRExpToDouble\r
128     toRExp = convertDoubleToRExp\r
129 \r
130 instance RCompatible (Vector Double) where\r
131     fromRExp = convertRExpToVectorDouble\r
132     toRExp = convertVectorDoubleToRExp\r
133 \r
134 instance RCompatible Integer where\r
135     fromRExp = convertRExpToInteger\r
136     toRExp = convertIntegerToRExp\r
137 \r
138 instance RCompatible (Vector Integer) where\r
139     fromRExp = convertRExpToVectorInteger\r
140     toRExp = convertVectorIntegerToRExp\r
141 \r
142 instance RCompatible String where\r
143     fromRExp = convertRExpToString\r
144     toRExp = convertStringToRExp\r
145 \r
146 instance RCompatible (Vector String) where\r
147     fromRExp = convertRExpToVectorString\r
148     toRExp = convertVectorStringToRExp\r
149 \r
150 instance RCompatible (Vector (Vector Double)) where\r
151     fromRExp = convertRExpToDoubleMatrix\r
152     toRExp = convertDoubleMatrixToRExp\r
153 \r
154 instance (RCompatible a) => RCompatible [a] where\r
155     fromRExp = map fromRExp . convertRExpToList\r
156     toRExp = convertRListToRExp . createRList . map toRExp