Convert the List and Misc modules.
This commit is contained in:
parent
8e6dbf8000
commit
0fe301aaba
3 changed files with 34 additions and 39 deletions
|
@ -1,6 +1,3 @@
|
|||
/*
|
||||
module Native.Function where
|
||||
*/
|
||||
|
||||
function F2(fun) {
|
||||
function wrapper(a) { return function(b) { return fun(a,b) } }
|
||||
|
|
|
@ -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)
|
||||
};
|
||||
|
||||
}());
|
||||
};
|
|
@ -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
|
||||
};
|
||||
}());
|
||||
};
|
Loading…
Reference in a new issue