- Identify =
lambda{|f, x| f.call(x) }
- Maybe =
lambda{|f, x|
mzero_method = x.respond_to?(:mzero?) ? :mzero? : :nil?
x.send(mzero_method) ? x : f.call(x)
}
- List =
lambda{|f, x| x.map(&f) }
- Reader =
lambda{|f, (r, x)|
Thread.current[:lambda_driver_reader_ctx_ask] = r
f.binding.eval(" def ask\n Thread.current[:lambda_driver_reader_ctx_ask]\n end\n CODE\n\n begin\n [r, f.call(x)]\n ensure\n # tear down reader context\n Thread.current[:lambda_driver_reader_ctx_ask] = nil\n f.binding.eval(\"undef ask\")\n end\n}\n")
- Writer =
lambda{|f, (x, w)|
pool = w || []
Thread.current[:lambda_driver_writer_ctx_pool] = pool
f.binding.eval(" def tell(s)\n pool = Thread.current[:lambda_driver_writer_ctx_pool]\n pool << s\n end\n CODE\n\n begin\n [f.call(x), pool]\n ensure\n # tear down reader context\n Thread.current[:lambda_driver_writer_ctx_pool] = nil\n f.binding.eval(\"undef tell\")\n end\n}\n")