版博士V2.0程序
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

ReaderT.js 1.4 KiB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { flow, pipe } from './function';
  2. export function of(F) {
  3. return function (a) { return function () { return F.of(a); }; };
  4. }
  5. export function map(F) {
  6. return function (f) { return function (fa) { return function (r) { return F.map(fa(r), f); }; }; };
  7. }
  8. export function ap(F) {
  9. return function (fa) { return function (fab) { return function (r) { return F.ap(fab(r), fa(r)); }; }; };
  10. }
  11. export function chain(M) {
  12. return function (f) { return function (ma) { return function (r) { return M.chain(ma(r), function (a) { return f(a)(r); }); }; }; };
  13. }
  14. export function fromReader(F) {
  15. return function (ma) { return flow(ma, F.of); };
  16. }
  17. export function fromNaturalTransformation(nt) {
  18. return function (f) { return flow(f, nt); };
  19. }
  20. /** @deprecated */
  21. /* istanbul ignore next */
  22. export function getReaderM(M) {
  23. var _ap = ap(M);
  24. var _map = map(M);
  25. var _chain = chain(M);
  26. return {
  27. map: function (fa, f) { return pipe(fa, _map(f)); },
  28. ap: function (fab, fa) { return pipe(fab, _ap(fa)); },
  29. of: of(M),
  30. chain: function (ma, f) { return pipe(ma, _chain(f)); },
  31. ask: function () { return M.of; },
  32. asks: function (f) { return flow(f, M.of); },
  33. local: function (ma, f) { return function (q) { return ma(f(q)); }; },
  34. fromReader: fromReader(M),
  35. fromM: function (ma) { return function () { return ma; }; }
  36. };
  37. }