Elm.Native.Show = {}; Elm.Native.Show.make = function(elm) { elm.Native = elm.Native || {}; elm.Native.Show = elm.Native.Show || {}; if (elm.Native.Show.values) return elm.Native.Show.values; var NList = Elm.Native.List.make(elm); var List = Elm.List.make(elm); var Dict = Elm.Dict.make(elm); var Tuple2 = Elm.Native.Utils.make(elm).Tuple2; var toString = function(v) { var type = typeof v; if (type === "function") { var name = v.func ? v.func.name : v.name; return ''; } else if (type === "boolean") { return v ? "True" : "False"; } else if (type === "number") { return v+""; } else if ((v instanceof String) && v.isChar) { return "'" + addSlashes(v) + "'"; } else if (type === "string") { return '"' + addSlashes(v) + '"'; } else if (type === "object" && '_' in v && probablyPublic(v)) { var output = []; for (var k in v._) { for (var i = v._[k].length; i--; ) { output.push(k + " = " + toString(v._[k][i])); } } for (var k in v) { if (k === '_') continue; output.push(k + " = " + toString(v[k])); } if (output.length === 0) return "{}"; return "{ " + output.join(", ") + " }"; } else if (type === "object" && 'ctor' in v) { if (v.ctor.substring(0,6) === "_Tuple") { var output = []; for (var k in v) { if (k === 'ctor') continue; output.push(toString(v[k])); } return "(" + output.join(",") + ")"; } else if (v.ctor === "::") { var output = '[' + toString(v._0); v = v._1; while (v.ctor === "::") { output += "," + toString(v._0); v = v._1; } return output + ']'; } else if (v.ctor === "[]") { return "[]"; } else if (v.ctor === "RBNode" || v.ctor === "RBEmpty") { var cons = F3(function(k,v,acc){return NList.Cons(Tuple2(k,v),acc)}); var list = A3(Dict.foldr, cons, NList.Nil, v); var name = "Dict"; if (list.ctor === "::" && list._0._1.ctor === "_Tuple0") { name = "Set"; list = A2(List.map, function(x){return x._0}, list); } return name + ".fromList " + toString(list); } else { var output = ""; for (var i in v) { if (i === 'ctor') continue; var str = toString(v[i]); var parenless = str[0] === '{' || str[0] === '<' || str.indexOf(' ') < 0; output += ' ' + (parenless ? str : '(' + str + ')'); } return v.ctor + output; } } if (type === 'object' && 'recv' in v) return ''; return ""; }; function addSlashes(str) { return str.replace(/\\/g, '\\\\') .replace(/\n/g, '\\n') .replace(/\t/g, '\\t') .replace(/\r/g, '\\r') .replace(/\v/g, '\\v') .replace(/\0/g, '\\0') .replace(/\'/g, "\\'") .replace(/\"/g, '\\"'); } function probablyPublic(v) { var keys = Object.keys(v); var len = keys.length; if (len === 3 && 'props' in v && 'element' in v) return false; if (len === 5 && 'horizontal' in v && 'vertical' in v && 'x' in v && 'y' in v) return false; if (len === 7 && 'theta' in v && 'scale' in v && 'x' in v && 'y' in v && 'alpha' in v && 'form' in v) return false; return true; } return elm.Native.Show.values = { show:toString }; };