@@ -96,17 +96,29 @@ Elm.JSON = function() {
9696 };
9797 };
9898 }
99+
99100 function lookup(key) { return function(obj) {
100101 var k = JS.castStringToJSString(key);
101102 return obj[1].hasOwnProperty(k) ? Just(obj[1][k]) : Nothing ;
102103 };
103104 }
105+ function find(tipe,base) { return function (key) { return function(obj) {
106+ var k = JS.castStringToJSString(key);
107+ if (obj[1].hasOwnProperty(k)) {
108+ var v = obj[1][k];
109+ if (v[0] === tipe) { return v[1]; }
110+ }
111+ return base;
112+ };
113+ }
114+ }
104115 function lookupWithDefault(base) { return function(key) { return function(obj) {
105116 var k = JS.castStringToJSString(key);
106117 return obj[1].hasOwnProperty(k) ? obj[1][k] : base ;
107118 };
108119 };
109120 }
121+
110122 function remove(k) { return function(inObj) {
111123 var obj = inObj[1];
112124 var outObj = {};
@@ -192,6 +204,9 @@ Elm.JSON = function() {
192204 singleton : singleton,
193205 insert : insert,
194206 lookup : lookup,
207+ findString : find("JsonString",["Nil"]),
208+ findObject : find("JsonObject", empty ),
209+ findArray : find("JsonArray" ,["Nil"]),
195210 findWithDefault : lookupWithDefault,
196211 remove : remove,
197212 toPrettyJSString : toPrettyJSString,
@@ -264,7 +279,11 @@ var Value = function(){
264279 arr[i] = spaces.join('');
265280 }
266281 }
267− return arr.join('');
282+ arr = arr.join('');
283+ if (arr[arr.length-1] === " ") {
284+ return arr.slice(0,-1) + ' ';
285+ }
286+ return arr;
268287 }
269288
270289 function properEscape(str) {
@@ -400,7 +419,7 @@ var Value = function(){
400419 } else if (v[0] === "Nil") {
401420 return "[]";
402421 } else if (v[0] === "JSON") {
403− return "(JSON.fromList " + toString(ElmJSON.toList(v)) + ")";
422+ return "(JSON.fromList " + toString(Elm.JSON.toList(v)) + ")";
404423 } else if (v[0] === "RBNode" || v[0] === "RBEmpty") {
405424 function cons(k){ return function(v) { return function(acc) { return ["Cons",["Tuple2",k,v],acc]; }; }; }
406425 return "(Map.fromList " + toString(Elm.Dict.fold(cons)(["Nil"])(v)) + ")";
@@ -1035,26 +1054,6 @@ Elm.Dict=function(){
10351054 throw "Non-exhaustive pattern match in case";}();
10361055 }
10371056 throw "Non-exhaustive pattern match in case";}();};};};
1038− function find_9(k_60){
1039− return function(t_61){
1040− return function(){
1041− switch(t_61[0]){
1042− case "RBEmpty":
1043− return raise_5(Value.str("Key was not found in dictionary!"));
1044− case "RBNode":
1045− return function(){
1046− var case6=compare(k_60)(t_61[2]);
1047− switch(case6[0]){
1048− case "EQ":
1049− return t_61[3];
1050− case "GT":
1051− return find_9(k_60)(t_61[5]);
1052− case "LT":
1053− return find_9(k_60)(t_61[4]);
1054− }
1055− throw "Non-exhaustive pattern match in case";}();
1056− }
1057− throw "Non-exhaustive pattern match in case";}();};};
10581057 function member_10(k_66){
10591058 return function(t_67){
10601059 return isJust(lookup_7(k_66)(t_67));};};
@@ -1456,7 +1455,7 @@ Elm.Dict=function(){
14561455 return ["Cons",["Tuple2",k_232,v_233],acc_234];};};})(["Nil"])(t_231);};
14571456 function fromList_42(assocs_235){
14581457 return List.foldl(uncurry(insert_20))(empty_4)(assocs_235);};
1459− return {empty:empty_4,lookup:lookup_7,findWithDefault:findWithDefault_8,find:find_9,member:member_10,insert:insert_20,singleton:singleton_21,remove:remove_32,map:map_33,foldl:foldl_34,foldr:foldr_35,union:union_36,intersect:intersect_37,diff:diff_38,keys:keys_39,values:values_40,toList:toList_41,fromList:fromList_42};}();
1458+ return {empty:empty_4,lookup:lookup_7,findWithDefault:findWithDefault_8,member:member_10,insert:insert_20,singleton:singleton_21,remove:remove_32,map:map_33,foldl:foldl_34,foldr:foldr_35,union:union_36,intersect:intersect_37,diff:diff_38,keys:keys_39,values:values_40,toList:toList_41,fromList:fromList_42};}();
14601459Elm.main=function(){
14611460 return Elm.Dict.main;};
14621461} catch (e) {Elm.main=function() {var msg = ('<br/><h2>Your browser may not be supported. Are you using a modern browser?</h2>' + '<br/><span style="color:grey">Runtime Error in Dict module:<br/>' + e + '</span>');document.body.innerHTML = Text.monospace(msg);throw e;};}
@@ -3379,6 +3378,42 @@ Elm.Prelude = function() {
33793378 };
33803379
33813380 var logBase=function(b){return function(x){return Math.log(x)/Math.log(b);};};
3381+
3382+ function readInt(str) {
3383+ var s = JavaScript.castStringToJSString(str);
3384+ var len = s.length;
3385+ if (len === 0) { return Nothing; }
3386+ var start = 0;
3387+ if (s[0] == '-') {
3388+ if (len === 1) { return Nothing; }
3389+ start = 1;
3390+ }
3391+ for (var i = start; i < len; ++i) {
3392+ if (!Char.isDigit(s[i])) { return Nothing; }
3393+ }
3394+ return Just(parseInt(s));
3395+ }
3396+
3397+ function readFloat(str) {
3398+ var s = JavaScript.castStringToJSString(str);
3399+ var len = s.length;
3400+ if (len === 0) { return Nothing; }
3401+ var start = 0;
3402+ if (s[0] == '-') {
3403+ if (len === 1) { return Nothing; }
3404+ start = 1;
3405+ }
3406+ var dotCount = 0;
3407+ for (var i = start; i < len; ++i) {
3408+ if (Char.isDigit(s[i])) { continue; }
3409+ if (s[i] === '.') {
3410+ dotCount += 1;
3411+ if (dotCount <= 1) { continue; }
3412+ }
3413+ return Nothing;
3414+ }
3415+ return Just(parseFloat(s));
3416+ }
33823417
33833418 return {eq : Value.eq,
33843419 id : function(x) { return x; },
@@ -3398,6 +3433,8 @@ Elm.Prelude = function() {
33983433 floor : function(n) { return Math.floor(n); },
33993434 ceiling : function(n) { return Math.ceil(n); },
34003435 truncate : function(n) { return ~~n; },
3436+ readInt : readInt,
3437+ readFloat : readFloat,
34013438 sqrt : Math.sqrt,
34023439 abs : Math.abs,
34033440 pi : Math.PI,