多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## IO ``` var IO = function(f) { this.unsafePerformIO = f; } IO.of = function(x) { return new IO(function() { return x; }); } IO.prototype.map = function(f) { return new IO(_.compose(f, this.unsafePerformIO )); } ``` `IO`跟之前的 functor 不同的地方在于,它的`__value`总是一个函数 实例1 ``` // io_window_ :: IO Window var io_window = new IO(function(){ return window; }); io_window.map(function(win){ return win.innerWidth }); // IO(1430) io_window.map(_.prop('location')).map(_.prop('href')).map(split('/')); // IO(["http:", "", "localhost:8000", "blog", "posts"]) // $ :: String -> IO [DOM] var $ = function(selector) { return new IO(function(){ return document.querySelectorAll(selector); }); } $('#myDiv').map(head).map(function(div){ return div.innerHTML; }); // IO('I am some inner html') ``` 实例2 ``` ////// 纯代码库: lib/params.js /////// // url :: IO String var url = new IO(function() { return window.location.href; }); // toPairs = String -> [[String]] var toPairs = compose(map(split('=')), split('&')); // params :: String -> [[String]] var params = compose(toPairs, last, split('?')); // findParam :: String -> IO Maybe [String] var findParam = function(key) { return map(compose(Maybe.of, filter(compose(eq(key), head)), params), url); }; ```