@@ -3,6 +3,8 @@
33/**
44 * @param {string} property - method to call on object
55 * @param {number} n - number of (curried) arguments
6+ * @param {effectRunnerWrapper} effectRunnerWrapper - a function to overrride
7+ * effect runner with. `toAffE` for `Aff`, `identity` for `Effect`.
68 *
79 * E.g. these are equivalent:
810 *
@@ -14,34 +16,16 @@
1416 *
1517 * and
1618 *
17− * effectfulGetter('close', 0);
19+ * effectfulGetter('close', 0, identity);
1820 */
19−function effectfulGetter (property, n) {
20− var args = [];
21−
22− return function (object) {
23− function runner (arg) {
24− if (n == 0) {
25− return object[property].apply(object, args);
26− } else {
27− args.push(arg);
28− n--;
29− return runner;
30− }
31− }
32−
33− return runner;
34− };
35−}
36−
37−function affectfulGetter (property, argsCount, toAffE) {
21+function effectfulGetter (property, argsCount, effectRunnerWrapper) {
3822 var args = [];
3923 return function (object) {
4024 function effectRunner () {
4125 return object[property].apply(object, args);
4226 }
4327
44− var affectRunner = toAffE(effectRunner);
28+ var affectRunner = effectRunnerWrapper(effectRunner);
4529
4630 function chooseNext () {
4731 return argsCount > 0 ? argsConsumer : affectRunner;
@@ -61,17 +45,20 @@ function affectfulGetter (property, argsCount, toAffE) {
6145 };
6246}
6347
48+function identity (x) {
49+ return x;
50+}
6451
6552exports.unsafeEffCall = function (method) {
6653 return function (argsCount) {
67− return effectfulGetter(method, argsCount);
54+ return effectfulGetter(method, argsCount, identity);
6855 };
6956};
7057
7158exports.unsafeAffCall = function (toAffE) {
7259 return function (method) {
7360 return function (argsCount) {
74− return affectfulGetter(method, argsCount, toAffE);
61+ return effectfulGetter(method, argsCount, toAffE);
7562 };
7663 };
7764};