-- sequence adapters local seq = require 'pl.seq' -- can't directly look these up in seq because of the wrong argument order... local overrides = { map = function(self,fun) return seq.map(fun,self) end, reduce = function(self,fun) return seq.reduce(fun,self) end } SMT = { __index = function (tbl,key) local s = overrides[key] or seq[key] if s then return function(sw,...) return SW(s(sw.iter,...)) end else return function(sw,...) return SW(seq.mapmethod(sw.iter,key,...)) end end end, __call = function (sw) return sw.iter() end, } function callable (v) return type(v) == 'function' or getmetatable(v) and getmetatable(v).__call end function S (iter) if not callable(iter) then if type(iter) == 'table' then iter = seq.list(iter) else return iter end end return setmetatable({iter=iter},SMT) end function SW (iter) if callable(iter) then return setmetatable({iter=iter},SMT) else return iter end end