@@ -33,13 +33,14 @@ Elm.Native.Show = function(elm) {
3333
3434 var toString = function(v) {
3535 if (typeof v === "function") {
36− return "<function>";
36+ var name = v.func ? v.func.name : v.name;
37+ return '<function' + (name === '' ? '' : ': ') + name + '>';
3738 } else if (typeof v === "boolean") {
3839 return v ? "True" : "False";
3940 } else if (typeof v === "number") {
4041 return v+"";
4142 } else if (typeof v === "string" && v.length < 2) {
42− return "'"+v+"'";
43+ return "'" + showChar(v) + "'";
4344 } else if (typeof v === "object" && '_' in v) {
4445 var output = [];
4546 for (var k in v._) {
@@ -67,9 +68,7 @@ Elm.Native.Show = function(elm) {
6768 start = isStr ? '"' : "[",
6869 end = isStr ? '"' : "]",
6970 sep = isStr ? "" : ",",
70− f = !isStr ? toString : function(x){
71− return x === '\n' ? '\\n' : x;
72− };
71+ f = !isStr ? toString : showChar;
7372 var output = start + f(v._0);
7473 v = v._1;
7574 while (v.ctor === "Cons") {
@@ -103,5 +102,17 @@ Elm.Native.Show = function(elm) {
103102 };
104103 function show(v) { return NList.fromArray(toString(v)); }
105104
105+ function showChar (c) {
106+ return c === '\n' ? '\\n' :
107+ c === '\t' ? '\\t' :
108+ c === '\b' ? '\\b' :
109+ c === '\r' ? '\\r' :
110+ c === '\v' ? '\\v' :
111+ c === '\0' ? '\\0' :
112+ c === '\'' ? "\\'" :
113+ c === '\"' ? '\\"' :
114+ c === '\\' ? '\\\\' : c;
115+ }
116+
106117 return elm.Native.Show = { show:show };
107118};