packages feed

fay 0.4.0.1 → 0.4.0.4

raw patch · 53 files changed

+211/−179 lines, 53 filesPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

API changes (from Hackage documentation)

+ Language.Fay: compilePAsPat :: JsExp -> Name -> Pat -> [JsStmt] -> Compile [JsStmt]

Files

docs/home.hs view
@@ -1,12 +1,12 @@-{-# LANGUAGE EmptyDataDecls #-}+{-# LANGUAGE EmptyDataDecls    #-} {-# LANGUAGE NoImplicitPrelude #-}  -- | The home page script:--- +-- --  1) Make sure that the language samples are highlighted. --  2) Add a show/hide button for the JS output on all samples. --  3) For code samples that are too large, hide them.--- +-- -- Because dogfood. This is not necessarily a good example, indeed, it -- may very well be a very bad example of how to write client -- code. But that's the point, really. Even the quick scripts that@@ -15,26 +15,35 @@  module Home (main) where -import Language.Fay.FFI-import Language.Fay.Prelude+import           Language.Fay.FFI+import           Language.Fay.Prelude  -- | Main entry point. main :: Fay () main = do-  ready (wrap [thedocument]) $ do+  ready (wrap thedocument) $ do     indentAndHighlight     setupExpanders     setupTableOfContents+    body <- query ".subheadline"+    addClassWith (\i f -> do alert (show i)+                             alert f+                             return f)+                 body+    return () +addClassWith :: (Double -> String -> Fay String) -> JQuery -> Fay JQuery+addClassWith = ffi "%2.addClass(function(x,i){ return %1(x,Fay$$list(i)); })" FayNone++ -- | Setup highlighting/code re-indenting. indentAndHighlight :: Fay () indentAndHighlight = do   samples <- query ".language-javascript"   each samples $ \i this ->-    let sample = wrap [this]+    let sample = wrap this     in do text <- getText sample-          setText sample-                  (beautify text 2)+          setText sample (beautify text 2)   setTabReplace hljs "    "   initHighlightingOnLoad hljs @@ -44,7 +53,7 @@   wrapwidth <- query ".wrap" >>= getWidth   examples <- query ".example"   each examples $ \i this -> do-    tr <- getFind (wrap [this]) "tr"+    tr <- getFind (wrap this) "tr"     left <- getFind tr "td" >>= getFirst     addClass left "left"     right <- getNext left@@ -68,17 +77,17 @@ setupTableOfContents :: Fay () setupTableOfContents = do   toc <- makeElement "<div class='table-of-contents'><p>Table of Contents</p></div>"-  query ".subheadline" >>= flip after toc-  ul <- makeElement "<ul></ul>" >>= flip appendTo toc+  query ".subheadline" >>= after toc+  ul <- makeElement "<ul></ul>" >>= appendTo toc   headings <- query "h2"   each headings $ \i heading ->     let anchor = ("section-" ++ show i)-        h = wrap [heading]+        h = wrap heading     in do -- Make sure the anchor exists at the heading point.           attr h "id" anchor           -- Make the entry.-          li <- makeElement "<li></li>" >>= flip appendTo ul-          a <- makeElement "<a></a>" >>= flip appendTo li+          li <- makeElement "<li></li>" >>= appendTo ul+          a <- makeElement "<a></a>" >>= appendTo li           getText h >>= setText a           -- Link up to an anchor.           attr a "href" ("#" ++ anchor)@@ -123,7 +132,7 @@ instance Show JQuery  -- | Make a jQuery object out of an element.-wrap :: [Element] -> JQuery+wrap :: Element -> JQuery wrap = ffi "window['jQuery'](%1)" FayNone  -- | Bind a handler for when the element is ready.@@ -202,7 +211,7 @@  -- | Append an element /after/ this one. after :: JQuery -> JQuery -> Fay JQuery-after = ffi "%1['after'](%2)" FayNone+after = ffi "%2['after'](%1)" FayNone  -- | Append an element to this one. append :: JQuery -> JQuery -> Fay JQuery@@ -210,7 +219,7 @@  -- | Append this to an element. appendTo :: JQuery -> JQuery -> Fay JQuery-appendTo = ffi "%1['appendTo'](%2)" FayNone+appendTo = ffi "%2['appendTo'](%1)" FayNone  -- | Make a new element. makeElement :: String -> Fay JQuery
docs/home.js view
@@ -111,7 +111,7 @@         str += obj.car;         obj = _(obj.cdr);       }-      return str;      +      return str;     } else if(type == "FunctionType" || typeof obj == 'function'){       return function(){         var out = obj;@@ -122,20 +122,20 @@           out = out(arguments[i]);         }         return _(out,true);-      };    +      };     } else if(type == "ListType" || (obj instanceof Fay$$Cons)){       var arr = [];       while(obj instanceof Fay$$Cons) {         arr.push(Fay$$serialize(null,obj.car));         obj = _(obj.cdr);       }-      return arr;      +      return arr;     } // else if(type == "BoolType || obj == _(True) || obj == _(False)) {     //   return obj == _(True);-    // } +    // }     else {       return obj;-    }      +    }   } } @@ -364,8 +364,7 @@ * Application code. */ --var main = new $(function(){return _(_($36$)(_(ready)(_(wrap)(Fay$$list([thedocument])))))(_(_(Fay$$then)(indentAndHighlight))(_(_(Fay$$then)(setupExpanders))(setupTableOfContents)));});var indentAndHighlight = new $(function(){return _(_(Fay$$bind)(_(query)(Fay$$list(".language-javascript"))))(function($_a){var samples = $_a;return _(_(Fay$$then)(_(_($36$)(_(each)(samples)))(function($_a){var i = $_a;return function($_b){var _$this = $_b;return (function(){var sample = new $(function(){return _(wrap)(Fay$$list([_$this]));});return _(_(Fay$$bind)(_(getText)(sample)))(function($_a){var text = $_a;return _(_(setText)(sample))(_(_(beautify)(text))(2));});})();};})))(_(_(Fay$$then)(_(_(setTabReplace)(hljs))(Fay$$list("    "))))(_(initHighlightingOnLoad)(hljs)));});});var setupExpanders = new $(function(){return _(_(Fay$$bind)(_(_(Fay$$bind)(_(query)(Fay$$list(".wrap"))))(getWidth)))(function($_a){var wrapwidth = $_a;return _(_(Fay$$bind)(_(query)(Fay$$list(".example"))))(function($_a){var examples = $_a;return _(_($36$)(_(each)(examples)))(function($_a){var i = $_a;return function($_b){var _$this = $_b;return _(_(Fay$$bind)(_(_(getFind)(_(wrap)(Fay$$list([_$this]))))(Fay$$list("tr"))))(function($_a){var tr = $_a;return _(_(Fay$$bind)(_(_(Fay$$bind)(_(_(getFind)(tr))(Fay$$list("td"))))(getFirst)))(function($_a){var left = $_a;return _(_(Fay$$then)(_(_(addClass)(left))(Fay$$list("left"))))(_(_(Fay$$bind)(_(getNext)(left)))(function($_a){var right = $_a;return _(_(Fay$$bind)(_(makeElement)(Fay$$list("<a class='toggle' href='javascript:'>Show JavaScript</a>"))))(function($_a){var toggle = $_a;return _(_(Fay$$bind)(_(_($36$)(Fay$$return))(_(_(Fay$$bind)(_(_(getIs)(right))(Fay$$list(":visible"))))(function($_a){var visible = $_a;return _(visible) ? _(_(Fay$$then)(_(_(setText)(toggle))(Fay$$list("Hide JavaScript"))))(_(_(_(swapClasses)(toggle))(Fay$$list("toggle-hide")))(Fay$$list("toggle-show"))) : _(_(Fay$$then)(_(_(setText)(toggle))(Fay$$list("Show JavaScript"))))(_(_(_(swapClasses)(toggle))(Fay$$list("toggle-show")))(Fay$$list("toggle-hide")));}))))(function($_a){var toggleButton = $_a;return _(_(Fay$$then)(_(_($36$)(_(setClick)(toggle)))(_(_($36$)(_(fadeToggle)(right)))(toggleButton))))(_(_(Fay$$bind)(_(getWidth)(tr)))(function($_a){var width = $_a;return _(_(Fay$$then)(_(_($36$)(_(when)(_(width) > _(_(wrapwidth) + _(_(20 * _(wrapwidth)) / 100)))))(_(hide)(right))))(_(_(Fay$$then)(toggleButton))(_(_(Fay$$bind)(_(_(getFind)(left))(Fay$$list(".panel"))))(function($_a){var panel = $_a;return _(_(Fay$$then)(_(_(prepend)(panel))(toggle)))(_(Fay$$return)(Fay$$unit));})));}));});});}));});});};});});});});var setupTableOfContents = new $(function(){return _(_(Fay$$bind)(_(makeElement)(Fay$$list("<div class='table-of-contents'><p>Table of Contents</p></div>"))))(function($_a){var toc = $_a;return _(_(Fay$$then)(_(_(Fay$$bind)(_(query)(Fay$$list(".subheadline"))))(_(_(flip)(after))(toc))))(_(_(Fay$$bind)(_(_(Fay$$bind)(_(makeElement)(Fay$$list("<ul></ul>"))))(_(_(flip)(appendTo))(toc))))(function($_a){var ul = $_a;return _(_(Fay$$bind)(_(query)(Fay$$list("h2"))))(function($_a){var headings = $_a;return _(_($36$)(_(each)(headings)))(function($_a){var i = $_a;return function($_b){var heading = $_b;return (function(){var anchor = new $(function(){return _(_($43$$43$)(Fay$$list("section-")))(_(show)(i));});var h = new $(function(){return _(wrap)(Fay$$list([heading]));});return _(_(Fay$$then)(_(_(_(attr)(h))(Fay$$list("id")))(anchor)))(_(_(Fay$$bind)(_(_(Fay$$bind)(_(makeElement)(Fay$$list("<li></li>"))))(_(_(flip)(appendTo))(ul))))(function($_a){var li = $_a;return _(_(Fay$$bind)(_(_(Fay$$bind)(_(makeElement)(Fay$$list("<a></a>"))))(_(_(flip)(appendTo))(li))))(function($_a){var a = $_a;return _(_(Fay$$then)(_(_(Fay$$bind)(_(getText)(h)))(_(setText)(a))))(_(_(Fay$$then)(_(_(_(attr)(a))(Fay$$list("href")))(_(_($43$$43$)(Fay$$list("#")))(anchor))))(_(_(Fay$$bind)(_(getTagName)(heading)))(_(addClass)(li))));});}));})();};});});}));});});var print = new $(function(){return _(_($46$)(consolelog))(show);});var consolelog = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",console.log(Fay$$serialize(StringType,$_a))));});};var alert = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",window.alert(Fay$$serialize(StringType,$_a))));});};var thedocument = new $(function(){return Fay$$unserialize("",window.document);});var getTagName = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("string",_($_a)['tagName']));});};var wrap = function($_a){return new $(function(){return Fay$$unserialize("",window['jQuery'](Fay$$serialize(ListType,$_a)));});};var ready = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['ready'](Fay$$serialize(JsType,$_b))));});};};var each = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['each'](Fay$$serialize(FunctionType,$_b))));});};};var query = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",window['jQuery'](Fay$$serialize(StringType,$_a))));});};var setText = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['text'](Fay$$serialize(StringType,$_b))));});};};var attr = function($_a){return function($_b){return function($_c){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['attr'](Fay$$serialize(StringType,$_b),Fay$$serialize(StringType,$_c))));});};};};var setClick = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['click'](Fay$$serialize(JsType,$_b))));});};};var fadeToggle = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['fadeToggle'](Fay$$serialize(JsType,$_b))));});};};var hide = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['hide']()));});};var addClass = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['addClass'](Fay$$serialize(StringType,$_b))));});};};var removeClass = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['removeClass'](Fay$$serialize(StringType,$_b))));});};};var swapClasses = function($_a){return function($_b){return function($_c){return new $(function(){var removeme = $_c;var addme = $_b;var obj = $_a;return _(_(Fay$$then)(_(_(addClass)(obj))(addme)))(_(_(removeClass)(obj))(removeme));});};};};var getText = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("string",_($_a)['text']()));});};var getIs = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("bool",_($_a)['is'](Fay$$serialize(StringType,$_b))));});};};var getSize = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['length']));});};var getNext = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['next']()));});};var getFirst = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['first']()));});};var getFind = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['find'](Fay$$serialize(StringType,$_b))));});};};var prepend = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['prepend'](_($_b))));});};};var after = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['after'](_($_b))));});};};var append = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['append'](_($_b))));});};};var appendTo = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['appendTo'](_($_b))));});};};var makeElement = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",window['jQuery'](Fay$$serialize(StringType,$_a))));});};var getWidth = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['width']()));});};var beautify = function($_a){return function($_b){return new $(function(){return Fay$$unserialize("string",$jsBeautify(Fay$$serialize(StringType,$_a),Fay$$serialize(DoubleType,$_b)));});};};var hljs = new $(function(){return Fay$$unserialize("",window['hljs']);});var initHighlightingOnLoad = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['initHighlightingOnLoad']()));});};var setTabReplace = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",_($_a)['tabReplace']=Fay$$serialize(StringType,$_b)));});};};var DateType = new $(function(){return [new Fay$$Constructor("DateType")];});var FunctionType = new $(function(){return [new Fay$$Constructor("FunctionType")];});var JsType = new $(function(){return [new Fay$$Constructor("JsType")];});var StringType = new $(function(){return [new Fay$$Constructor("StringType")];});var DoubleType = new $(function(){return [new Fay$$Constructor("DoubleType")];});var ListType = new $(function(){return [new Fay$$Constructor("ListType")];});var BoolType = new $(function(){return [new Fay$$Constructor("BoolType")];});var UnknownType = new $(function(){return [new Fay$$Constructor("UnknownType")];});var Just = function(slot1){return new $(function(){return [new Fay$$Constructor("Just"),slot1];});};var Nothing = new $(function(){return [new Fay$$Constructor("Nothing")];});var show = function($_a){return new $(function(){return Fay$$unserialize("string",Fay$$encodeShow(_($_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {var p = $_a;return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {var p = $_a;return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var _$null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var GT = new $(function(){return [new Fay$$Constructor("GT")];});var LT = new $(function(){return [new Fay$$Constructor("LT")];});var EQ = new $(function(){return [new Fay$$Constructor("EQ")];});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if ((_($tmp))[0].name === "GT") {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_(Fay$$then)(m))(_(Fay$$return)(Fay$$unit)) : _(Fay$$return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if ((_($_c))[0].name === "Nothing") {var f = $_b;var m = $_a;return m;}if ((_($_c))[0].name === "Just") {var x = (_($_c))[1];var f = $_b;var m = $_a;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;var f = $_a;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;var f = $_a;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$then)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _(Fay$$return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_(Fay$$then)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _(Fay$$return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};};+var main = new $(function(){return _(_($36$)(_(ready)(_(wrap)(thedocument))))(_(_(Fay$$then)(indentAndHighlight))(_(_(Fay$$then)(setupExpanders))(_(_(Fay$$then)(setupTableOfContents))(_(_(Fay$$bind)(_(query)(Fay$$list(".subheadline"))))(function($_a){var body = $_a;return _(_(Fay$$then)(_(_(addClassWith)(function($_a){var i = $_a;return function($_b){var f = $_b;return _(_(Fay$$then)(_(alert)(_(show)(i))))(_(_(Fay$$then)(_(alert)(f)))(_(Fay$$return)(f)));};}))(body)))(_(Fay$$return)(Fay$$unit));})))));});var addClassWith = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_b).addClass(function(x,i){ return Fay$$serialize(FunctionType,$_a)(x,Fay$$list(i)); })));});};};var indentAndHighlight = new $(function(){return _(_(Fay$$bind)(_(query)(Fay$$list(".language-javascript"))))(function($_a){var samples = $_a;return _(_(Fay$$then)(_(_($36$)(_(each)(samples)))(function($_a){var i = $_a;return function($_b){var _$this = $_b;return (function(){var sample = new $(function(){return _(wrap)(_$this);});return _(_(Fay$$bind)(_(getText)(sample)))(function($_a){var text = $_a;return _(_(setText)(sample))(_(_(beautify)(text))(2));});})();};})))(_(_(Fay$$then)(_(_(setTabReplace)(hljs))(Fay$$list("    "))))(_(initHighlightingOnLoad)(hljs)));});});var setupExpanders = new $(function(){return _(_(Fay$$bind)(_(_(Fay$$bind)(_(query)(Fay$$list(".wrap"))))(getWidth)))(function($_a){var wrapwidth = $_a;return _(_(Fay$$bind)(_(query)(Fay$$list(".example"))))(function($_a){var examples = $_a;return _(_($36$)(_(each)(examples)))(function($_a){var i = $_a;return function($_b){var _$this = $_b;return _(_(Fay$$bind)(_(_(getFind)(_(wrap)(_$this)))(Fay$$list("tr"))))(function($_a){var tr = $_a;return _(_(Fay$$bind)(_(_(Fay$$bind)(_(_(getFind)(tr))(Fay$$list("td"))))(getFirst)))(function($_a){var left = $_a;return _(_(Fay$$then)(_(_(addClass)(left))(Fay$$list("left"))))(_(_(Fay$$bind)(_(getNext)(left)))(function($_a){var right = $_a;return _(_(Fay$$bind)(_(makeElement)(Fay$$list("<a class='toggle' href='javascript:'>Show JavaScript</a>"))))(function($_a){var toggle = $_a;return _(_(Fay$$bind)(_(_($36$)(Fay$$return))(_(_(Fay$$bind)(_(_(getIs)(right))(Fay$$list(":visible"))))(function($_a){var visible = $_a;return _(visible) ? _(_(Fay$$then)(_(_(setText)(toggle))(Fay$$list("Hide JavaScript"))))(_(_(_(swapClasses)(toggle))(Fay$$list("toggle-hide")))(Fay$$list("toggle-show"))) : _(_(Fay$$then)(_(_(setText)(toggle))(Fay$$list("Show JavaScript"))))(_(_(_(swapClasses)(toggle))(Fay$$list("toggle-show")))(Fay$$list("toggle-hide")));}))))(function($_a){var toggleButton = $_a;return _(_(Fay$$then)(_(_($36$)(_(setClick)(toggle)))(_(_($36$)(_(fadeToggle)(right)))(toggleButton))))(_(_(Fay$$bind)(_(getWidth)(tr)))(function($_a){var width = $_a;return _(_(Fay$$then)(_(_($36$)(_(when)(_(width) > _(_(wrapwidth) + _(_(20 * _(wrapwidth)) / 100)))))(_(hide)(right))))(_(_(Fay$$then)(toggleButton))(_(_(Fay$$bind)(_(_(getFind)(left))(Fay$$list(".panel"))))(function($_a){var panel = $_a;return _(_(Fay$$then)(_(_(prepend)(panel))(toggle)))(_(Fay$$return)(Fay$$unit));})));}));});});}));});});};});});});});var setupTableOfContents = new $(function(){return _(_(Fay$$bind)(_(makeElement)(Fay$$list("<div class='table-of-contents'><p>Table of Contents</p></div>"))))(function($_a){var toc = $_a;return _(_(Fay$$then)(_(_(Fay$$bind)(_(query)(Fay$$list(".subheadline"))))(_(after)(toc))))(_(_(Fay$$bind)(_(_(Fay$$bind)(_(makeElement)(Fay$$list("<ul></ul>"))))(_(appendTo)(toc))))(function($_a){var ul = $_a;return _(_(Fay$$bind)(_(query)(Fay$$list("h2"))))(function($_a){var headings = $_a;return _(_($36$)(_(each)(headings)))(function($_a){var i = $_a;return function($_b){var heading = $_b;return (function(){var anchor = new $(function(){return _(_($43$$43$)(Fay$$list("section-")))(_(show)(i));});var h = new $(function(){return _(wrap)(heading);});return _(_(Fay$$then)(_(_(_(attr)(h))(Fay$$list("id")))(anchor)))(_(_(Fay$$bind)(_(_(Fay$$bind)(_(makeElement)(Fay$$list("<li></li>"))))(_(appendTo)(ul))))(function($_a){var li = $_a;return _(_(Fay$$bind)(_(_(Fay$$bind)(_(makeElement)(Fay$$list("<a></a>"))))(_(appendTo)(li))))(function($_a){var a = $_a;return _(_(Fay$$then)(_(_(Fay$$bind)(_(getText)(h)))(_(setText)(a))))(_(_(Fay$$then)(_(_(_(attr)(a))(Fay$$list("href")))(_(_($43$$43$)(Fay$$list("#")))(anchor))))(_(_(Fay$$bind)(_(getTagName)(heading)))(_(addClass)(li))));});}));})();};});});}));});});var print = new $(function(){return _(_($46$)(consolelog))(show);});var consolelog = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",console.log(Fay$$serialize(StringType,$_a))));});};var alert = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",window.alert(Fay$$serialize(StringType,$_a))));});};var thedocument = new $(function(){return Fay$$unserialize("",window.document);});var getTagName = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("string",Fay$$serialize(UnknownType,$_a)['tagName']));});};var wrap = function($_a){return new $(function(){return Fay$$unserialize("",window['jQuery'](Fay$$serialize(UnknownType,$_a)));});};var ready = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['ready'](Fay$$serialize(JsType,$_b))));});};};var each = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['each'](Fay$$serialize(FunctionType,$_b))));});};};var query = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",window['jQuery'](Fay$$serialize(StringType,$_a))));});};var setText = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['text'](Fay$$serialize(StringType,$_b))));});};};var attr = function($_a){return function($_b){return function($_c){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['attr'](Fay$$serialize(StringType,$_b),Fay$$serialize(StringType,$_c))));});};};};var setClick = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['click'](Fay$$serialize(JsType,$_b))));});};};var fadeToggle = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['fadeToggle'](Fay$$serialize(JsType,$_b))));});};};var hide = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['hide']()));});};var addClass = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['addClass'](Fay$$serialize(StringType,$_b))));});};};var removeClass = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['removeClass'](Fay$$serialize(StringType,$_b))));});};};var swapClasses = function($_a){return function($_b){return function($_c){return new $(function(){var removeme = $_c;var addme = $_b;var obj = $_a;return _(_(Fay$$then)(_(_(addClass)(obj))(addme)))(_(_(removeClass)(obj))(removeme));});};};};var getText = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("string",Fay$$serialize(UnknownType,$_a)['text']()));});};var getIs = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("bool",Fay$$serialize(UnknownType,$_a)['is'](Fay$$serialize(StringType,$_b))));});};};var getSize = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['length']));});};var getNext = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['next']()));});};var getFirst = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['first']()));});};var getFind = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['find'](Fay$$serialize(StringType,$_b))));});};};var prepend = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['prepend'](Fay$$serialize(UnknownType,$_b))));});};};var after = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_b)['after'](Fay$$serialize(UnknownType,$_a))));});};};var append = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['append'](Fay$$serialize(UnknownType,$_b))));});};};var appendTo = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_b)['appendTo'](Fay$$serialize(UnknownType,$_a))));});};};var makeElement = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",window['jQuery'](Fay$$serialize(StringType,$_a))));});};var getWidth = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['width']()));});};var beautify = function($_a){return function($_b){return new $(function(){return Fay$$unserialize("string",$jsBeautify(Fay$$serialize(StringType,$_a),Fay$$serialize(DoubleType,$_b)));});};};var hljs = new $(function(){return Fay$$unserialize("",window['hljs']);});var initHighlightingOnLoad = function($_a){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['initHighlightingOnLoad']()));});};var setTabReplace = function($_a){return function($_b){return new $(function(){return new Fay$$Monad(Fay$$unserialize("",Fay$$serialize(UnknownType,$_a)['tabReplace']=Fay$$serialize(StringType,$_b)));});};};var DateType = new $(function(){return [new Fay$$Constructor("DateType")];});var FunctionType = new $(function(){return [new Fay$$Constructor("FunctionType")];});var JsType = new $(function(){return [new Fay$$Constructor("JsType")];});var StringType = new $(function(){return [new Fay$$Constructor("StringType")];});var DoubleType = new $(function(){return [new Fay$$Constructor("DoubleType")];});var ListType = new $(function(){return [new Fay$$Constructor("ListType")];});var BoolType = new $(function(){return [new Fay$$Constructor("BoolType")];});var UnknownType = new $(function(){return [new Fay$$Constructor("UnknownType")];});var Just = function(slot1){return new $(function(){return [new Fay$$Constructor("Just"),slot1];});};var Nothing = new $(function(){return [new Fay$$Constructor("Nothing")];});var show = function($_a){return new $(function(){return Fay$$unserialize("string",Fay$$encodeShow(Fay$$serialize(UnknownType,$_a)));});};var fromInteger = function($_a){return new $(function(){var x = $_a;return x;});};var fromRational = function($_a){return new $(function(){var x = $_a;return x;});};var snd = function($_a){return new $(function(){var x = Fay$$index(1)(_($_a));return x;throw ["unhandled case in Ident \"snd\"",[$_a]];});};var fst = function($_a){return new $(function(){var x = Fay$$index(0)(_($_a));return x;throw ["unhandled case in Ident \"fst\"",[$_a]];});};var find = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(Just)(x) : _(_(find)(p))(xs);}if (_($_b) === null) {var p = $_a;return Nothing;}throw ["unhandled case in Ident \"find\"",[$_a,$_b]];});};};var any = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? true : _(_(any)(p))(xs);}if (_($_b) === null) {var p = $_a;return false;}throw ["unhandled case in Ident \"any\"",[$_a,$_b]];});};};var filter = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var p = $_a;return _(_(p)(x)) ? _(_(Fay$$cons)(x))(_(_(filter)(p))(xs)) : _(_(filter)(p))(xs);}if (_($_b) === null) {return null;}throw ["unhandled case in Ident \"filter\"",[$_a,$_b]];});};};var not = function($_a){return new $(function(){var p = $_a;return _(p) ? false : true;});};var _$null = function($_a){return new $(function(){if (_($_a) === null) {return true;}return false;});};var map = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(f)(x)))(_(_(map)(f))(xs));}throw ["unhandled case in Ident \"map\"",[$_a,$_b]];});};};var nub = function($_a){return new $(function(){var ls = $_a;return _(_(nub$39$)(ls))(null);});};var nub$39$ = function($_a){return function($_b){return new $(function(){if (_($_a) === null) {return null;}var ls = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(_(elem)(x))(ls)) ? _(_(nub$39$)(xs))(ls) : _(_(Fay$$cons)(x))(_(_(nub$39$)(xs))(_(_(Fay$$cons)(x))(ls)));}throw ["unhandled case in Ident \"nub'\"",[$_a,$_b]];});};};var elem = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var y = $_$_b.car;var ys = $_$_b.cdr;var x = $_a;return _(_(_(Fay$$eq)(x))(y)) || _(_(_(elem)(x))(ys));}if (_($_b) === null) {return false;}throw ["unhandled case in Ident \"elem\"",[$_a,$_b]];});};};var GT = new $(function(){return [new Fay$$Constructor("GT")];});var LT = new $(function(){return [new Fay$$Constructor("LT")];});var EQ = new $(function(){return [new Fay$$Constructor("EQ")];});var sort = new $(function(){return _(sortBy)(compare);});var compare = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(x) > _(y)) ? GT : _(_(x) < _(y)) ? LT : EQ;});};};var sortBy = function($_a){return new $(function(){var cmp = $_a;return _(_(foldr)(_(insertBy)(cmp)))(null);});};var insertBy = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var x = $_b;return Fay$$list([x]);}var ys = $_c;var x = $_b;var cmp = $_a;return (function($_ys){var $_$_ys = _($_ys);if ($_$_ys instanceof Fay$$Cons) {var y = $_$_ys.car;var ys$39$ = $_$_ys.cdr;return (function($tmp){if ((_($tmp))[0].name === "GT") {return _(_(Fay$$cons)(y))(_(_(_(insertBy)(cmp))(x))(ys$39$));}return _(_(Fay$$cons)(x))(ys);})(_(_(cmp)(x))(y));}return (function(){ throw (["unhandled case",$_ys]); })();})(ys);});};};};var when = function($_a){return function($_b){return new $(function(){var m = $_b;var p = $_a;return _(p) ? _(_(Fay$$then)(m))(_(Fay$$return)(Fay$$unit)) : _(Fay$$return)(Fay$$unit);});};};var enumFrom = function($_a){return new $(function(){var i = $_a;return _(_(Fay$$cons)(i))(_(enumFrom)(_(i) + 1));});};var enumFromTo = function($_a){return function($_b){return new $(function(){var n = $_b;var i = $_a;return _(_(_(Fay$$eq)(i))(n)) ? Fay$$list([i]) : _(_(Fay$$cons)(i))(_(_(enumFromTo)(_(i) + 1))(n));});};};var zipWith = function($_a){return function($_b){return function($_c){return new $(function(){var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var b = $_$_c.car;var bs = $_$_c.cdr;var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var a = $_$_b.car;var as = $_$_b.cdr;var f = $_a;return _(_(Fay$$cons)(_(_(f)(a))(b)))(_(_(_(zipWith)(f))(as))(bs));}}return null;});};};};var zip = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var b = $_$_b.car;var bs = $_$_b.cdr;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var a = $_$_a.car;var as = $_$_a.cdr;return _(_(Fay$$cons)(Fay$$list([a,b])))(_(_(zip)(as))(bs));}}return null;});};};var flip = function($_a){return function($_b){return function($_c){return new $(function(){var y = $_c;var x = $_b;var f = $_a;return _(_(f)(y))(x);});};};};var maybe = function($_a){return function($_b){return function($_c){return new $(function(){if ((_($_c))[0].name === "Nothing") {var f = $_b;var m = $_a;return m;}if ((_($_c))[0].name === "Just") {var x = (_($_c))[1];var f = $_b;var m = $_a;return _(f)(x);}throw ["unhandled case in Ident \"maybe\"",[$_a,$_b,$_c]];});};};};var $46$ = function($_a){return function($_b){return function($_c){return new $(function(){var x = $_c;var g = $_b;var f = $_a;return _(f)(_(g)(x));});};};};var $43$$43$ = function($_a){return function($_b){return new $(function(){var y = $_b;var x = $_a;return _(_(conc)(x))(y);});};};var $36$ = function($_a){return function($_b){return new $(function(){var x = $_b;var f = $_a;return _(f)(x);});};};var conc = function($_a){return function($_b){return new $(function(){var ys = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$cons)(x))(_(_(conc)(xs))(ys));}var ys = $_b;if (_($_a) === null) {return ys;}throw ["unhandled case in Ident \"conc\"",[$_a,$_b]];});};};var concat = new $(function(){return _(_(foldr)(conc))(null);});var foldr = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;var f = $_a;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(f)(x))(_(_(_(foldr)(f))(z))(xs));}throw ["unhandled case in Ident \"foldr\"",[$_a,$_b,$_c]];});};};};var foldl = function($_a){return function($_b){return function($_c){return new $(function(){if (_($_c) === null) {var z = $_b;var f = $_a;return z;}var $_$_c = _($_c);if ($_$_c instanceof Fay$$Cons) {var x = $_$_c.car;var xs = $_$_c.cdr;var z = $_b;var f = $_a;return _(_(_(foldl)(f))(_(_(f)(z))(x)))(xs);}throw ["unhandled case in Ident \"foldl\"",[$_a,$_b,$_c]];});};};};var lookup = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {var _key = $_a;return Nothing;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = Fay$$index(0)(_($_$_b.car));var y = Fay$$index(1)(_($_$_b.car));var xys = $_$_b.cdr;var key = $_a;return _(_(_(Fay$$eq)(key))(x)) ? _(Just)(y) : _(_(lookup)(key))(xys);}throw ["unhandled case in Ident \"lookup\"",[$_a,$_b]];});};};var intersperse = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs));}throw ["unhandled case in Ident \"intersperse\"",[$_a,$_b]];});};};var prependToAll = function($_a){return function($_b){return new $(function(){if (_($_b) === null) {return null;}var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var sep = $_a;return _(_(Fay$$cons)(sep))(_(_(Fay$$cons)(x))(_(_(prependToAll)(sep))(xs)));}throw ["unhandled case in Ident \"prependToAll\"",[$_a,$_b]];});};};var intercalate = function($_a){return function($_b){return new $(function(){var xss = $_b;var xs = $_a;return _(concat)(_(_(intersperse)(xs))(xss));});};};var forM_ = function($_a){return function($_b){return new $(function(){var m = $_b;var $_$_a = _($_a);if ($_$_a instanceof Fay$$Cons) {var x = $_$_a.car;var xs = $_$_a.cdr;return _(_(Fay$$then)(_(m)(x)))(_(_(forM_)(xs))(m));}if (_($_a) === null) {return _(Fay$$return)(Fay$$unit);}throw ["unhandled case in Ident \"forM_\"",[$_a,$_b]];});};};var mapM_ = function($_a){return function($_b){return new $(function(){var $_$_b = _($_b);if ($_$_b instanceof Fay$$Cons) {var x = $_$_b.car;var xs = $_$_b.cdr;var m = $_a;return _(_(Fay$$then)(_(m)(x)))(_(_(mapM_)(m))(xs));}if (_($_b) === null) {return _(Fay$$return)(Fay$$unit);}throw ["unhandled case in Ident \"mapM_\"",[$_a,$_b]];});};}; // Exports this.main = main; 
docs/snippets/data.hs view
docs/snippets/dom.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE EmptyDataDecls #-}+ main = do   result <- documentGetElements "body"   print result
docs/snippets/ffi.hs view
@@ -5,7 +5,7 @@ alert = ffi "window.alert(%1)" ""  getInnerHtml :: Element -> Fay String-getInnerHtml = ffi "%1.innerHTML(%2)" FayString+getInnerHtml = ffi "%1.innerHTML" FayString  setInnerHtml :: Element -> String -> Fay () setInnerHtml = ffi "%1.innerHTML=%2"
docs/snippets/tail.hs view
@@ -1,4 +1,4 @@--- Tail-recursive functions will use +-- Tail-recursive functions will use -- constant stack space sum 0 acc = acc sum n acc = sum (n - 1) (acc + n)
examples/alert.hs view
@@ -2,8 +2,8 @@  module Alert where -import Language.Fay.FFI-import Language.Fay.Prelude+import           Language.Fay.FFI+import           Language.Fay.Prelude  main :: Fay () main = alert "Hello, World!"
examples/canvaswater.hs view
@@ -1,6 +1,6 @@ -- | Compile with: dist/build/fay/fay -autorun examples/canvaswater.hs -{-# LANGUAGE EmptyDataDecls #-}+{-# LANGUAGE EmptyDataDecls    #-} {-# LANGUAGE NoImplicitPrelude #-}  -- | A demonstration of Fay using the canvas element to display a@@ -8,8 +8,8 @@  module CanvasWater (main) where -import Language.Fay.FFI-import Language.Fay.Prelude+import           Language.Fay.FFI+import           Language.Fay.Prelude  -- | Main entry point. main :: Fay ()@@ -93,8 +93,8 @@  -- | Draw an image onto a canvas rendering context. -----   Nine arguments: the element, source (x,y) coordinates, source width and ---   height (for cropping), destination (x,y) coordinates, and destination width +--   Nine arguments: the element, source (x,y) coordinates, source width and+--   height (for cropping), destination (x,y) coordinates, and destination width --   and height (resize). -- --   context.drawImage(img_elem, sx, sy, sw, sh, dx, dy, dw, dh);
examples/console.hs view
@@ -2,8 +2,8 @@  module Console where -import Language.Fay.FFI-import Language.Fay.Prelude+import           Language.Fay.FFI+import           Language.Fay.Prelude  main = print "Hello, World!" 
examples/data.hs view
@@ -1,5 +1,5 @@ -- Generate Show value.--- +-- -- $ fay -autorun examples/data.hs -- $ node examples/data.js -- (Foo { x = 123, y = "abc", z = (Bar) })@@ -8,8 +8,8 @@  module Data where -import Language.Fay.Prelude-import Language.Fay.FFI+import           Language.Fay.FFI+import           Language.Fay.Prelude  data Foo = Foo { x :: Double, y :: String, z :: Foo } | Bar   deriving (Show)
examples/dom.hs view
@@ -1,10 +1,10 @@-{-# LANGUAGE EmptyDataDecls #-}+{-# LANGUAGE EmptyDataDecls    #-} {-# LANGUAGE NoImplicitPrelude #-}  module Dom where -import Language.Fay.FFI-import Language.Fay.Prelude+import           Language.Fay.FFI+import           Language.Fay.Prelude  main :: Fay () main = addEventListener "load" printBody False
examples/ref.hs view
@@ -1,12 +1,12 @@ -- | Mutable references. -{-# LANGUAGE EmptyDataDecls #-}+{-# LANGUAGE EmptyDataDecls    #-} {-# LANGUAGE NoImplicitPrelude #-}  module Ref where -import Language.Fay.FFI-import Language.Fay.Prelude+import           Language.Fay.FFI+import           Language.Fay.Prelude  main :: Fay () main = do
examples/tailrecursive.hs view
@@ -8,8 +8,8 @@  module Tailrecursive where -import Language.Fay.FFI-import Language.Fay.Prelude+import           Language.Fay.FFI+import           Language.Fay.Prelude  main = do   benchmark
fay.cabal view
@@ -1,7 +1,7 @@ name:                fay-version:             0.4.0.1+version:             0.4.0.4 synopsis:            A compiler for Fay, a Haskell subset that compiles to JavaScript.-description:         Fay is a proper subset of Haskell which can be compiled (type-checked) +description:         Fay is a proper subset of Haskell which can be compiled (type-checked)                      with GHC, and compiled to JavaScript. It is lazy, pure, with a Fay monad,                      an FFI, tail-recursion optimization (experimental). It implements no type                      system, for type-checking you should use GHC.@@ -15,15 +15,14 @@                      > $ cabal install                      > $ dist/build/fay-docs/fay-docs                      .-                     . +                     .                      /Examples/                      .                      See <http://fay-lang.org/#examples>.                      .                      /Release Notes/                      .-                     * Collapse all the FFI types by using the type signature instead using UHC-                       approach. Check the docs and examples.+                     * Added help to the fay compiler executable.                      .                      See full history at: <https://github.com/chrisdone/fay/commits> homepage:            http://fay-lang.org/
hs/stdlib.hs view
js/runtime.js view
@@ -108,7 +108,7 @@         str += obj.car;         obj = _(obj.cdr);       }-      return str;      +      return str;     } else if(type == "FunctionType" || typeof obj == 'function'){       return function(){         var out = obj;@@ -119,20 +119,20 @@           out = out(arguments[i]);         }         return _(out,true);-      };    +      };     } else if(type == "ListType" || (obj instanceof Fay$$Cons)){       var arr = [];       while(obj instanceof Fay$$Cons) {         arr.push(Fay$$serialize(null,obj.car));         obj = _(obj.cdr);       }-      return arr;      +      return arr;     } // else if(type == "BoolType || obj == _(True) || obj == _(False)) {     //   return obj == _(True);-    // } +    // }     else {       return obj;-    }      +    }   } } @@ -360,4 +360,3 @@ /******************************************************************************* * Application code. */-
src/Control/Monad/IO.hs view
@@ -1,6 +1,6 @@ module Control.Monad.IO where -import Control.Monad.Trans+import           Control.Monad.Trans  io :: MonadIO m => IO a -> m a io = liftIO
src/Docs.hs view
@@ -1,28 +1,28 @@+{-# LANGUAGE CPP               #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE CPP #-} {-# OPTIONS -fno-warn-missing-signatures -fno-warn-unused-do-bind #-}  -- | Generate documentation for Fay.  module Main where -import           Language.Fay (compileViaStr,compileModule)-import           Language.Fay.Compiler (compileFromTo)+import           Language.Fay                (compileModule, compileViaStr)+import           Language.Fay.Compiler       (compileFromTo)  import           Control.Exception import           Control.Monad-import qualified Data.ByteString.Lazy as L+import qualified Data.ByteString.Lazy        as L import           Data.Char import           Data.Default-import           Data.List (isSuffixOf,sort)+import           Data.List                   (isSuffixOf, sort) import           Data.Time-import           Prelude hiding (head,div)+import           Prelude                     hiding (div, head) import           System.Directory import           System.FilePath import           Text.Blaze.Extra-import           Text.Blaze.Html5 as H hiding (contents,map,style)+import           Text.Blaze.Html5            as H hiding (contents, map, style) import           Text.Blaze.Html5.Attributes as A hiding (title)-import           Text.Blaze.Renderer.Utf8 (renderMarkup)+import           Text.Blaze.Renderer.Utf8    (renderMarkup)  -- | Main entry point. main :: IO ()@@ -31,7 +31,7 @@   generate >>= L.writeFile file   generateJs   putStrLn $ "Documentation file written to " ++ file-  + generate = do   sources <- mapM readFile examples   javascripts <- mapM compile examples@@ -40,7 +40,7 @@   return $ renderMarkup $ page now                                analytics                                (zip3 (map titlize examples) sources javascripts)-    +   where compile file = do           contents <- readFile file           putStrLn $ "Compiling " ++ file ++ " ..."@@ -58,7 +58,7 @@ generateJs = do   putStrLn $ "Compiling " ++ inp ++ " to " ++ out ++ " ..."   compileFromTo def True inp out-    +   where docs = ("docs" </>)         inp = (docs "home.hs")         out = (docs "home.js")@@ -91,7 +91,7 @@     thefooter now   preEscapedToMarkup analytics -fork = +fork =   a ! href "https://github.com/chrisdone/fay" $     img ! style "position: absolute; top: 0; right: 0; border: 0;"         ! src "https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"@@ -172,7 +172,7 @@             " The depths to which JavaScript sucks is well-documented and well-understood. Its main faults are: its lack of module system, weak-typing, verbose function syntax, late binding, which has led to the creation of various static analysis tools to alleviate this language flaw, but with limited success (there is even a static type checker), finicky equality/automatic conversion, this behaviour, and lack of static types."     li $ do strong "We need JavaScript:"             " Using it for what it is good for, i.e. providing a platform for browser development, but not using the language per se, is therefore desirable, and many are working to achieve this, in varying forms. There are various ways to do it, but we ought to opt for compiling an existing language, Haskell, to JavaScript, because we do not have time to learn or teach other people a new language, garner a new library set and a new type checker and all that Haskell implementations provide."-  p $ a ! href "http://www.haskell.org/haskellwiki/The_JavaScript_Problem" $ +  p $ a ! href "http://www.haskell.org/haskellwiki/The_JavaScript_Problem" $         "See here for more elaboration »"  thecomparisons = do
src/Language/Fay.hs view
@@ -1,9 +1,9 @@-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE TupleSections #-}+{-# LANGUAGE FlexibleContexts      #-} {-# LANGUAGE FlexibleInstances     #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings     #-} {-# LANGUAGE RecordWildCards       #-}+{-# LANGUAGE TupleSections         #-} {-# LANGUAGE TypeSynonymInstances  #-} {-# LANGUAGE ViewPatterns          #-} {-# OPTIONS -Wall -fno-warn-name-shadowing -fno-warn-orphans #-}@@ -14,7 +14,7 @@    where -import           Language.Fay.Print              ()+import           Language.Fay.Print         () import           Language.Fay.Types  import           Control.Applicative@@ -110,10 +110,14 @@ -- | Compile the given import. compileImport :: ImportDecl -> Compile [JsStmt] compileImport (ImportDecl _ (ModuleName name) _ _ _ _ _)-  | isPrefixOf "Language.Fay." name || name == "Prelude" = return []+  | elem name ["Language.Fay.Prelude","Language.Fay.FFI","Language.Fay.Types"] || name == "Prelude" = return [] compileImport (ImportDecl _ (ModuleName name) False _ Nothing Nothing Nothing) = do   contents <- io (readFile (replace '.' '/' name ++ ".hs"))-  compileFromStr compileModule contents+  cfg <- config id+  result <- liftIO $ compileToAst cfg compileModule contents+  case result of+    Right (stmts,state) -> return stmts+    Left err -> throwError err     where replace c r = map (\x -> if x == c then r else x) compileImport i =   error $ "Import syntax not supported. " ++@@ -178,7 +182,7 @@   case JS.parse (printJS (wrapReturn inner)) (prettyPrint name) of     Left err -> throwError (FfiFormatInvalidJavaScript inner err)     Right{}  -> fmap return (bindToplevel True (UnQual name) (body inner))-    +   where body inner = foldr wrapParam (wrapReturn inner) params         wrapParam name inner = JsFun [name] [] (Just inner)         params = zipWith const uniqueNames [1..typeArity sig]@@ -215,7 +219,7 @@   go (x:xs) = do rest <- go xs                  return (x : rest)   go [] = return []-    +   inject n =     case listToMaybe (drop (n-1) args) of       Nothing -> throwError (FfiFormatNoSuchArg n)@@ -226,7 +230,7 @@ serialize :: ArgType -> JsExp -> JsExp serialize typ exp =   case typ of-    UnknownType -> force exp+--    UnknownType -> force exp     _ -> JsApp (JsName (hjIdent "serialize"))                [JsName (fromString (show typ)),exp] @@ -353,7 +357,7 @@   JsWhile (JsLit (JsBool True))           (concatMap replaceTailStmt                      (reverse (zip (reverse stmts) [0::Integer ..])))-  +   where replaceTailStmt (JsIf cond sothen orelse,i) = [JsIf cond (concatMap (replaceTailStmt . (,i)) sothen)                                                                  (concatMap (replaceTailStmt . (,i)) orelse)]         replaceTailStmt (JsEarlyReturn exp,i) = expTailReplace i exp@@ -449,7 +453,7 @@    flattenApps <- config configFlattenApps    if flattenApps then method2 else method1    where-  -- Method 1:           +  -- Method 1:   -- In this approach code ends up looking like this:   -- a(a(a(a(a(a(a(a(a(a(L)(c))(b))(0))(0))(y))(t))(a(a(F)(3*a(a(d)+a(a(f)/20))))*a(a(f)/2)))(140+a(f)))(y))(t)})   -- Which might be OK for speed, but increases the JS stack a fair bit.@@ -480,14 +484,14 @@       | symbol `elem` words "* + - / < > || &&" -> do           e1 <- compileExp exp1           e2 <- compileExp exp2-          return (JsInfix symbol (forceInlinable config e1) (forceInlinable config e2)) +          return (JsInfix symbol (forceInlinable config e1) (forceInlinable config e2))     _ -> do       var <- resolveOpToVar op       compileExp (App (App var exp1) exp2)    where getOp (QVarOp op) = op         getOp (QConOp op) = op-  + -- | Compile a list expression. compileList :: [Exp] -> Compile JsExp compileList xs = do@@ -582,6 +586,7 @@     pat@PInfixApp{} -> compileInfixPat exp pat body     PList pats      -> compilePList pats body exp     PTuple pats     -> compilePList pats body exp+    PAsPat name pat -> compilePAsPat exp name pat body     pat             -> throwError (UnsupportedPattern pat)  -- | Compile a literal value from a pattern match.@@ -592,9 +597,14 @@                body                []] +compilePAsPat :: JsExp -> Name -> Pat -> [JsStmt] -> Compile [JsStmt]+compilePAsPat exp name pat body = do+  x <- compilePat exp pat body;+  return ([JsVar (UnQual name) exp] ++ x ++ body)+ -- | Equality test for two expressions, with some optimizations. equalExps :: JsExp -> JsExp -> JsExp-equalExps a b +equalExps a b   | isConstant a && isConstant b = JsEq a b   | isConstant a = JsEq a (force b)   | isConstant b = JsEq (force a) b@@ -767,7 +777,7 @@ unserialize typ exp =   JsApp (JsName (hjIdent "unserialize"))         [JsLit (JsStr (showReturnType typ)),exp]-    +   where showReturnType typ =           case typ of             FayArray -> "array"@@ -831,7 +841,7 @@  -- | Emit exported names. emitExport :: ExportSpec -> Compile ()-emitExport spec = +emitExport spec =   case spec of     EVar (UnQual name) -> modify $ \s -> s { stateExports = name : stateExports s }     EVar _             -> error "Emitted a qualifed export, not supported."
src/Language/Fay/Compiler.hs view
@@ -1,12 +1,14 @@-{-# LANGUAGE ViewPatterns #-}-{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings     #-}+{-# LANGUAGE ViewPatterns          #-}+ module Language.Fay.Compiler where -import Control.Exception  (throw)-import Language.Fay (compileViaStr,compileModule)-import Language.Fay.Types-import Language.Haskell.Exts.Syntax-import Paths_fay+import           Control.Exception            (throw)+import           Language.Fay                 (compileModule, compileViaStr)+import           Language.Fay.Types+import           Language.Haskell.Exts.Syntax+import           Paths_fay  -- | Compile file program to… compileFromTo :: CompileConfig -> Bool -> FilePath -> FilePath -> IO ()@@ -26,7 +28,7 @@   case result of     Right out -> writeFile fileout out     Left  err -> throw err-      +   where strip = unlines . dropWhile (/="-- START") . lines  -- | Compile the given module to a runnable program.
src/Language/Fay/FFI.hs view
@@ -1,11 +1,11 @@-{-# LANGUAGE EmptyDataDecls #-}+{-# LANGUAGE EmptyDataDecls       #-}+{-# LANGUAGE NoImplicitPrelude    #-} {-# LANGUAGE TypeSynonymInstances #-}-{-# LANGUAGE NoImplicitPrelude #-}  module Language.Fay.FFI where -import Language.Fay.Types (Fay,FayReturnType(..))-import Prelude (Bool,String,Double,Char,error)+import           Language.Fay.Types (Fay, FayReturnType(..))+import           Prelude            (Bool, Char, Double, String, error)  data JsPtr a 
src/Language/Fay/Prelude.hs view
@@ -33,12 +33,13 @@   ,module Language.Fay.Stdlib)   where -import Language.Fay.Types (Fay,FayReturnType(..))-import Language.Fay.Stdlib+import           Language.Fay.Stdlib+import           Language.Fay.Types  (Fay, FayReturnType(..)) -import Prelude ((>),(<),(==),(||),(&&),Maybe(..),Double,Ord,Integer,error,String,(+),Bool(..),Char,Show(..)-               ,Read(..),read,(/=),(*),(-),(<=),(>=),(/))-import GHC.Real (Ratio)+import           GHC.Real            (Ratio)+import           Prelude             (Bool(..), Char, Double, Integer, Maybe(..), Ord, Read(..),+ Show(..), String, error, read, (&&), (*), (+), (-), (/), (/=), (<),+ (<=), (==), (>), (>=), (||))  -- | Just to satisfy GHC. fromInteger :: Integer -> Double
src/Language/Fay/Print.hs view
@@ -1,9 +1,8 @@ {-# OPTIONS -fno-warn-orphans #-}+{-# LANGUAGE FlexibleInstances    #-}+{-# LANGUAGE OverloadedStrings    #-}+{-# LANGUAGE RecordWildCards      #-} {-# LANGUAGE TypeSynonymInstances #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE RecordWildCards #-}-{-# LANGUAGE ViewPatterns #-}  -- | Simple code (non-pretty) printing. --@@ -16,13 +15,13 @@  module Language.Fay.Print where -import Language.Fay.Types+import           Language.Fay.Types -import Data.List-import Data.String-import Language.Haskell.Exts.Syntax-import Prelude hiding (exp)-import Text.JSON+import           Data.List+import           Data.String+import           Language.Haskell.Exts.Syntax+import           Prelude                      hiding (exp)+import           Text.JSON  -------------------------------------------------------------------------------- -- Printing@@ -123,9 +122,9 @@   printJS (JsSequence exprs) =     intercalate "," (map (printJS) exprs)   printJS (JsName name) = printJS name-  printJS (JsApp op args) = +  printJS (JsApp op args) =     printJS (if isFunc op then JsParen op else op) ++-    "(" ++ +    "(" ++     intercalate "," (map (printJS) args) ++     ")"      where isFunc JsFun{..} = True; isFunc _ = False@@ -136,14 +135,14 @@            , (printJS conseq) ++ " : "            , (printJS alt)]   printJS (JsList exps) =-    "[" ++ +    "[" ++     intercalate "," (map (printJS) exps) ++     "]"   printJS (JsNew name args) =     "new " ++ printJS (JsApp (JsName name) args)   printJS (JsInstanceOf exp classname) =     printJS exp ++ " instanceof " ++ printJS classname-  printJS (JsIndex i exp) = +  printJS (JsIndex i exp) =     "(" ++ printJS exp ++ ")[" ++ show i ++ "]"   printJS (JsEq exp1 exp2) =     printJS exp1 ++ " === " ++ printJS exp2@@ -176,7 +175,7 @@   if isPrefixOf "$_" name      then name      else concat . map encode $ name-       +   where     encode c | elem c allowed = [c]              | otherwise      = escapeChar c@@ -184,7 +183,7 @@     escapeChar c = "$" ++ charId c ++ "$"     charId c = show (fromEnum c) --- | Helpful for writing qualified symbols (Fay.*). +-- | Helpful for writing qualified symbols (Fay.*). instance IsString ModuleName where   fromString = ModuleName 
src/Language/Fay/Show.hs view
@@ -2,9 +2,9 @@  module Language.Fay.Show where -import Data.List-import Text.JSON-import Text.Show.Pretty+import           Data.List+import           Text.JSON+import           Text.Show.Pretty  -- | Convert a Haskell value to a Fay value. To read this in from JS, -- use Fay.eval() which will evaluate the code in the context of Fay.@@ -12,7 +12,7 @@ showToFay a = case reify a of   Nothing -> error $ "Unable to reify data type: " ++ show a   Just a -> convert a-  +   where convert a = case a of           Con "Date" [String s] -> "Fay$$date(" ++ encode (read s :: String) ++ ")"           Con name [] -> name@@ -28,6 +28,6 @@           Float x -> x           Char x -> encode (read x :: Char)           String x -> "Fay$$list(" ++ encode (read x :: String) ++ ")"-            +         con name values = foldr app name (reverse values) where           app arg rest = rest ++ "(" ++ convert arg ++ ")"
src/Language/Fay/Stdlib.hs view
@@ -34,7 +34,7 @@   ,when)   where -import Prelude (Maybe(..),(==),(>>),return,(+),(<),(>),Bool(..),Ord,(||))+import           Prelude (Bool(..), Maybe(..), Ord, return, (+), (<), (==), (>), (>>), (||))  -- START @@ -88,7 +88,7 @@ insertBy _   x [] = [x] insertBy cmp x ys =   case ys of-    y:ys' -> +    y:ys' ->       case cmp x y of          GT -> y : insertBy cmp x ys'          _  -> x : ys
src/Language/Fay/Types.hs view
@@ -1,7 +1,7 @@-{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveDataTypeable         #-}+{-# LANGUAGE FunctionalDependencies     #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses      #-}  -- | All Fay types and instances. @@ -22,14 +22,14 @@   ,ArgType(..))   where -import Control.Exception-import Control.Applicative-import Control.Monad.Error (Error,ErrorT,MonadError)-import Control.Monad.Identity (Identity)-import Control.Monad.State-import Data.Data-import Data.Default-import Language.Haskell.Exts+import           Control.Applicative+import           Control.Exception+import           Control.Monad.Error    (Error, ErrorT, MonadError)+import           Control.Monad.Identity (Identity)+import           Control.Monad.State+import           Data.Data+import           Data.Default+import           Language.Haskell.Exts  -------------------------------------------------------------------------------- -- Compiler types@@ -124,7 +124,7 @@   | JsSetProp JsName JsName JsExp   | JsContinue   deriving (Show,Eq)-  + -- | Expression type. data JsExp   = JsName JsName
src/Main.hs view
@@ -1,16 +1,15 @@-{-# LANGUAGE ViewPatterns #-}  -- | Main compiler executable.  module Main where -import Language.Fay.Compiler-import Language.Fay.Types+import           Language.Fay.Compiler+import           Language.Fay.Types -import Control.Monad-import Data.Default-import Data.List-import System.Environment+import           Control.Monad+import           Data.Default+import           Data.List+import           System.Environment  -- | Main entry point. main :: IO ()@@ -18,12 +17,25 @@   args <- getArgs   let files = filter (not . isPrefixOf "-") args       opts = map (drop 1) $ filter (isPrefixOf "-") args-  forM_ files $ \file -> do-    compileFromTo def { configTCO = elem "tco" opts-                      , configInlineForce = elem "inline-force" opts-                      , configFlattenApps = elem "flatten-apps" opts-                      , configExportBuiltins = not (elem "no-export-builtins" opts)-                      }-                  (elem "autorun" opts)-                  file-                  (toJsName file)+  if (elem "help" opts) || null files+    then putStrLn helpText+    else forM_ files $ \file -> do+      compileFromTo def { configTCO = elem "tco" opts+                        , configInlineForce = elem "inline-force" opts+                        , configFlattenApps = elem "flatten-apps" opts+                        , configExportBuiltins = not (elem "no-export-builtins" opts)+                        }+        (elem "autorun" opts)+        file+        (toJsName file)+++helpText = unlines+  ["fay -- compiler from (a proper subset of) Haskell to JavaScript"+  ,""+  ,"USAGE"+  ,"  fay [OPTIONS] <hs-input-file> ... "+  ,""+  ,"OPTIONS"+  ,"  -autorun    automatically call main in generated JavaScript"+  ]
src/System/Process/Extra.hs view
@@ -2,9 +2,9 @@  module System.Process.Extra where -import System.Exit-import System.IO-import System.Process+import           System.Exit+import           System.IO+import           System.Process  -- | Read all stuff from a process. readAllFromProcess :: FilePath -> String -> IO (Either String String)
src/Tests.hs view
@@ -5,17 +5,17 @@  module Main where -import Language.Fay.Compiler+import           Language.Fay.Compiler -import Data.Default-import Data.List-import System.Directory-import System.Exit-import System.FilePath-import System.IO-import System.Process-import System.Process.Extra-import Test.HUnit+import           Data.Default+import           Data.List+import           System.Directory+import           System.Exit+import           System.FilePath+import           System.IO+import           System.Process+import           System.Process.Extra+import           Test.HUnit  -- | Main test runner. main :: IO ()@@ -26,7 +26,7 @@ runUnitTests = do   files <- fmap (map ("tests" </>) . sort . filter dotHs) $ getDirectoryContents "tests"   runTestTT (makeTests files)-  +     where dotHs = isSuffixOf ".hs"           makeTests files =             TestList $ flip map files $ \file -> TestLabel file $ TestCase $ do
src/Text/Blaze/Extra.hs view
@@ -1,15 +1,15 @@ {-# OPTIONS -fno-warn-orphans #-}-{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards   #-} {-# OPTIONS -fno-warn-name-shadowing -fno-warn-unused-do-bind #-}  module Text.Blaze.Extra where -import Control.Monad-import Data.Monoid-import Text.Blaze.Html5            as H hiding (map)-import Text.Blaze.Html5.Attributes as A-import Text.Blaze.Internal         (Attributable)+import           Control.Monad+import           Data.Monoid+import           Text.Blaze.Html5            as H hiding (map)+import           Text.Blaze.Html5.Attributes as A+import           Text.Blaze.Internal         (Attributable)  (!.) :: (Attributable h) => h -> AttributeValue -> h elem !. className = elem ! class_ className
tests/10.hs view
tests/11.hs view
tests/13.hs view
tests/14.hs view
tests/15.hs view
tests/16.hs view
tests/17.hs view
tests/18.hs view
tests/19.hs view
tests/20.hs view
tests/21.hs view
tests/22.hs view
tests/23.hs view
tests/24.hs view
tests/25.hs view
tests/26.hs view
tests/27.hs view
@@ -4,8 +4,8 @@  module Fib where -import Language.Fay.FFI-import Language.Fay.Prelude+import           Language.Fay.FFI+import           Language.Fay.Prelude  main = do   print (sum 100000 0 :: Double)
tests/28.hs view
@@ -1,8 +1,8 @@ {-# LANGUAGE NoImplicitPrelude #-} module Test where -import Language.Fay.Prelude-import Language.Fay.FFI+import           Language.Fay.FFI+import           Language.Fay.Prelude  print :: String -> Fay () print = ffi "console.log(%1)" FayNone
tests/3.hs view
tests/4.hs view
tests/5.hs view
tests/6.hs view
tests/7.hs view