on master help sign in
Convert the List and Misc modules.
0fe301aevancz
libraries/Native/Function.js−3
@@ -1,6 +1,3 @@
1−/*
2−module Native.Function where
3−*/
4
1
5function F2(fun) {
2function F2(fun) {
6 function wrapper(a) { return function(b) { return fun(a,b) } }
3 function wrapper(a) { return function(b) { return fun(a,b) } }
libraries/Native/List.js+18−10
@@ -1,12 +1,10 @@
1−/**
2−module Native.List where
3
1
4−import Native.Function
5−**/
6−
7−(function() {
2+Elm.Native.List = function(elm) {
8 "use strict";
3 "use strict";
9
4
5+ elm.Native = elm.Native || {};
6+ if (elm.Native.List) return elm.Native.List;
7+
10 var Nil = { ctor:'Nil' };
8 var Nil = { ctor:'Nil' };
11 function Cons(hd,tl) { return { ctor:"Cons", _0:hd, _1:tl }; }
9 function Cons(hd,tl) { return { ctor:"Cons", _0:hd, _1:tl }; }
12
10
@@ -42,11 +40,11 @@ import Native.Function
42 function append(xs,ys) {
40 function append(xs,ys) {
43 if (typeof xs === "string") { return xs.concat(ys); }
41 if (typeof xs === "string") { return xs.concat(ys); }
44 if (xs.ctor === "Nil") { return ys; }
42 if (xs.ctor === "Nil") { return ys; }
45− var root = Elm.Native.List.Cons(xs._0. Elm.Native.List.Nil);
43+ var root = Cons(xs._0. Nil);
46 var curr = root;
44 var curr = root;
47 xs = xs._1;
45 xs = xs._1;
48 while (xs.ctor==="Cons") {
46 while (xs.ctor==="Cons") {
49− curr._1 = Elm.Native.List.Cons(xs._0. Elm.Native.List.Nil);
47+ curr._1 = Cons(xs._0. Nil);
50 xs = xs._1;
48 xs = xs._1;
51 curr = curr._1;
49 curr = curr._1;
52 }
50 }
@@ -140,6 +138,15 @@ import Native.Function
140 return out;
138 return out;
141 }
139 }
142
140
141+ function member(x, xs) {
142+ var out = 0;
143+ while (xs.ctor === "Cons") {
144+ if (Misc.eq(x,xs._0)) return true;
145+ xs = xs._1;
146+ }
147+ return false;
148+ }
149+
143 function reverse(xs) { return fromArray(toArray(xs).reverse()); }
150 function reverse(xs) { return fromArray(toArray(xs).reverse()); }
144
151
145 function all(pred, xs) {
152 function all(pred, xs) {
@@ -200,7 +207,7 @@ import Native.Function
200 return xs;
207 return xs;
201 }
208 }
202
209
203− Elm.Native.List = {
210+ return elm.Native.List = {
204 Nil:Nil,
211 Nil:Nil,
205 Cons:Cons,
212 Cons:Cons,
206 toArray:toArray,
213 toArray:toArray,
@@ -222,6 +229,7 @@ import Native.Function
222 scanl1:F2(scanl1),
229 scanl1:F2(scanl1),
223 filter:F2(filter),
230 filter:F2(filter),
224 length:length,
231 length:length,
232+ member:member,
225 reverse:reverse,
233 reverse:reverse,
226
234
227 all:F2(all),
235 all:F2(all),
@@ -233,4 +241,4 @@ import Native.Function
233 drop:F2(drop)
241 drop:F2(drop)
234 };
242 };
235
243
236−}());
244+};
libraries/Native/Misc.js+16−26
@@ -1,17 +1,14 @@
1
1
2−/*
3−module Native.Misc where
4−
5−import List
6−import Maybe
7−import JavaScript
8−import Dict
9−import JSON
10−*/
11−
12−(function(){
2+Elm.Native.Misc = function(elm) {
13 'use strict';
3 'use strict';
14
4
5+ var NativeList = Elm.Native.List(elm);
6+ var List = Elm.List(elm);
7+ var Maybe = Elm.Maybe(elm);
8+ var JS = Elm.JavaScript(elm);
9+ var Dict = Elm.Dict(elm);
10+ var Json = Elm.Json(elm);
11+
15 function eq(x,y) {
12 function eq(x,y) {
16 if (x === y) return true;
13 if (x === y) return true;
17 if (typeof x === "object") {
14 if (typeof x === "object") {
@@ -86,7 +83,7 @@ import JSON
86
83
87
84
88 function groupForms(forms) {
85 function groupForms(forms) {
89− forms = Elm.JavaScript.castListToJSArray(forms);
86+ forms = JS.fromList(forms);
90 var groups = [];
87 var groups = [];
91 var arr = [];
88 var arr = [];
92 for (var i = forms.length; i--; ) {
89 for (var i = forms.length; i--; ) {
@@ -151,14 +148,14 @@ import JSON
151 } else if (v.ctor === "Nil") {
148 } else if (v.ctor === "Nil") {
152 return "[]";
149 return "[]";
153 } else if (v.ctor === "JSON") {
150 } else if (v.ctor === "JSON") {
154− return "(JSON.fromList " + toString(Elm.JSON.toList(v)) + ")";
151+ return "(JSON.fromList " + toString(Json.toList(v)) + ")";
155 } else if (v.ctor === "RBNode" || v.ctor === "RBEmpty") {
152 } else if (v.ctor === "RBNode" || v.ctor === "RBEmpty") {
156− function cons(k){ return function(v) { return function(acc) { return Elm.Native.List.Cons(Tuple2(k,v),acc); }; }; }
153+ function cons(k){ return function(v) { return function(acc) { return NativeList.Cons(Tuple2(k,v),acc); }; }; }
157− var list = Elm.Dict.foldr(cons)(Elm.Native.List.Nil)(v);
154+ var list = Dict.foldr(cons)(NativeList.Nil)(v);
158 var name = "Dict";
155 var name = "Dict";
159 if (list.ctor === "Cons" && list._0._1.ctor === "Tuple0") {
156 if (list.ctor === "Cons" && list._0._1.ctor === "Tuple0") {
160 name = "Set";
157 name = "Set";
161− list = Elm.List.map(function(x) { return x._0; })(list);
158+ list = A2(List.map, function(x){return x._0}, list);
162 }
159 }
163 return "(" + name + ".fromList " + toString(list) + ")";
160 return "(" + name + ".fromList " + toString(list) + ")";
164 } else {
161 } else {
@@ -170,15 +167,8 @@ import JSON
170 }
167 }
171 return v+"";
168 return v+"";
172 };
169 };
173− var show = function(v) { return Elm.Native.List.fromArray(toString(v)); };
170+ var show = function(v) { return NativeList.fromArray(toString(v)); };
174
171
175− /*
176− function wrap(elem) {
177− var p = Value.getSize(elem);
178− return ['Element', Guid.guid(), ["EHtml",elem],
179− p.ctor, p._0, 1, Elm.Maybe.Nothing, Elm.Maybe.Nothing];
180− }
181− */
182 var addListener = function() {
172 var addListener = function() {
183 if(document.addEventListener) {
173 if(document.addEventListener) {
184 return function(element, event, handler) {
174 return function(element, event, handler) {
@@ -191,7 +181,7 @@ import JSON
191 }
181 }
192 }();
182 }();
193
183
194− Elm.Native.Misc = {
184+ elm.Native.Misc = {
195 eq:eq,
185 eq:eq,
196 show:show,
186 show:show,
197 Tuple0:Tuple0,
187 Tuple0:Tuple0,
@@ -203,4 +193,4 @@ import JSON
203 groupForms : groupForms,
193 groupForms : groupForms,
204 addListener : addListener
194 addListener : addListener
205 };
195 };
206−}());
196+};