Convert the List and Misc modules.

This commit is contained in:
evancz 2013-03-08 23:31:19 -08:00
parent 8e6dbf8000
commit 0fe301aaba
3 changed files with 34 additions and 39 deletions

View file

@ -1,6 +1,3 @@
/*
module Native.Function where
*/
function F2(fun) {
function wrapper(a) { return function(b) { return fun(a,b) } }

View file

@ -1,12 +1,10 @@
/**
module Native.List where
import Native.Function
**/
(function() {
Elm.Native.List = function(elm) {
"use strict";
elm.Native = elm.Native || {};
if (elm.Native.List) return elm.Native.List;
var Nil = { ctor:'Nil' };
function Cons(hd,tl) { return { ctor:"Cons", _0:hd, _1:tl }; }
@ -42,11 +40,11 @@ import Native.Function
function append(xs,ys) {
if (typeof xs === "string") { return xs.concat(ys); }
if (xs.ctor === "Nil") { return ys; }
var root = Elm.Native.List.Cons(xs._0. Elm.Native.List.Nil);
var root = Cons(xs._0. Nil);
var curr = root;
xs = xs._1;
while (xs.ctor==="Cons") {
curr._1 = Elm.Native.List.Cons(xs._0. Elm.Native.List.Nil);
curr._1 = Cons(xs._0. Nil);
xs = xs._1;
curr = curr._1;
}
@ -140,6 +138,15 @@ import Native.Function
return out;
}
function member(x, xs) {
var out = 0;
while (xs.ctor === "Cons") {
if (Misc.eq(x,xs._0)) return true;
xs = xs._1;
}
return false;
}
function reverse(xs) { return fromArray(toArray(xs).reverse()); }
function all(pred, xs) {
@ -200,7 +207,7 @@ import Native.Function
return xs;
}
Elm.Native.List = {
return elm.Native.List = {
Nil:Nil,
Cons:Cons,
toArray:toArray,
@ -222,6 +229,7 @@ import Native.Function
scanl1:F2(scanl1),
filter:F2(filter),
length:length,
member:member,
reverse:reverse,
all:F2(all),
@ -233,4 +241,4 @@ import Native.Function
drop:F2(drop)
};
}());
};

View file

@ -1,17 +1,14 @@
/*
module Native.Misc where
import List
import Maybe
import JavaScript
import Dict
import JSON
*/
(function(){
Elm.Native.Misc = function(elm) {
'use strict';
var NativeList = Elm.Native.List(elm);
var List = Elm.List(elm);
var Maybe = Elm.Maybe(elm);
var JS = Elm.JavaScript(elm);
var Dict = Elm.Dict(elm);
var Json = Elm.Json(elm);
function eq(x,y) {
if (x === y) return true;
if (typeof x === "object") {
@ -86,7 +83,7 @@ import JSON
function groupForms(forms) {
forms = Elm.JavaScript.castListToJSArray(forms);
forms = JS.fromList(forms);
var groups = [];
var arr = [];
for (var i = forms.length; i--; ) {
@ -151,14 +148,14 @@ import JSON
} else if (v.ctor === "Nil") {
return "[]";
} else if (v.ctor === "JSON") {
return "(JSON.fromList " + toString(Elm.JSON.toList(v)) + ")";
return "(JSON.fromList " + toString(Json.toList(v)) + ")";
} else if (v.ctor === "RBNode" || v.ctor === "RBEmpty") {
function cons(k){ return function(v) { return function(acc) { return Elm.Native.List.Cons(Tuple2(k,v),acc); }; }; }
var list = Elm.Dict.foldr(cons)(Elm.Native.List.Nil)(v);
function cons(k){ return function(v) { return function(acc) { return NativeList.Cons(Tuple2(k,v),acc); }; }; }
var list = Dict.foldr(cons)(NativeList.Nil)(v);
var name = "Dict";
if (list.ctor === "Cons" && list._0._1.ctor === "Tuple0") {
name = "Set";
list = Elm.List.map(function(x) { return x._0; })(list);
list = A2(List.map, function(x){return x._0}, list);
}
return "(" + name + ".fromList " + toString(list) + ")";
} else {
@ -170,15 +167,8 @@ import JSON
}
return v+"";
};
var show = function(v) { return Elm.Native.List.fromArray(toString(v)); };
var show = function(v) { return NativeList.fromArray(toString(v)); };
/*
function wrap(elem) {
var p = Value.getSize(elem);
return ['Element', Guid.guid(), ["EHtml",elem],
p.ctor, p._0, 1, Elm.Maybe.Nothing, Elm.Maybe.Nothing];
}
*/
var addListener = function() {
if(document.addEventListener) {
return function(element, event, handler) {
@ -191,7 +181,7 @@ import JSON
}
}();
Elm.Native.Misc = {
elm.Native.Misc = {
eq:eq,
show:show,
Tuple0:Tuple0,
@ -203,4 +193,4 @@ import JSON
groupForms : groupForms,
addListener : addListener
};
}());
};