标签:box nbsp pre ble log har ase lua imm
We rewrite the Box example using lazy evaulation.
Here is Box example:
const Box = (x) => ({ map: f => Box(f(x)), fold: f => f(x) }); const res = Box(‘ 64 ‘) .map(abba => abba.trim()) .map(trimmed => new Number(trimmed)) .map(number => number + 1) .map(x => String.fromCharCode(x)) .fold(x => x.toLowerCase()); console.log(res); // ‘a‘
So how to make it as Lazy Box? The Answer is instead of passing a value to the Box, we pass and function into it.
const LazyBox = (fn) => ({ map: g => LazyBox(() => g(fn())), fold: g => g(fn()) // call the g() }); const res = LazyBox(() => ‘ 64 ‘) .map(abba => abba.trim()) .map(trimmed => new Number(trimmed)) .map(number => number + 1) .map(x => String.fromCharCode(x)) .fold(x => x.toLowerCase()); console.log(res); // ‘a‘
inside map function, we use function defination:
() => g(fn())
Just defined, but not call. Using g() is to make it composeable.
When actually ‘fold‘, we call fn():
fold: g => g(fn()) // call the g()
[Compose] 9. Delay Evaluation with LazyBox
标签:box nbsp pre ble log har ase lua imm
原文地址:http://www.cnblogs.com/Answer1215/p/6193692.html