Do-Notation 없이 중첩된 모나딕 계산에서 추상화
7455 단어 learningfunctionaljavascript
그래서 우리는 다음과 같은 임시 방식으로 중첩된 모나딕 계산에 갇혀 있습니까?
// Monad
const arrChain = mx => fm =>
arrFold(acc => x =>
arrAppend(acc) (fm(x))) ([]) (mx);
// auxiliary function
const arrFold = f => init => xs => {
let acc = init;
for (let i = 0; i < xs.length; i++)
acc = f(acc) (xs[i], i);
return acc;
};
const arrAppend = xs => ys =>
xs.concat(ys);
// MAIN
const main = arrChain([1,2]) (x => // nested monadic computation
arrChain([3,4]) (y =>
arrChain([5,6]) (z =>
x === 1
? []
: [x, y, z])));
main; // [2,3,5,2,3,6,2,4,5,2,4,6]
사실, 약간의 개선이 있습니다. 모나드 액션을 해당 모나드의 컨텍스트에서 래핑하여 적용 펑터처럼 취급할 수 있습니다.
// Monad
const chain3 = chain => tx => ty => tz => fm =>
chain(chain(chain(tx) (x => fm(x)))
(gm => chain(ty) (y => gm(y))))
(hm => chain(tz) (z => hm(z)));
// MAIN
const main = chain3(arrChain) // much more readable
([1,2])
([3,4])
([5,6])
(x => x === 1
? []
: [y => [z => [x, y, z]]]);
main; // [2,3,5,2,3,6,2,4,5,2,4,6]
run code
주어진
chain3
우리는 더 많은 유연성을 얻기 위해 다른 arity 인식 결합자를 구현하고 가변성 내부에 과부하chainn
할 수 있습니다.JS의 FP에 대한 내 과정에서 이것 및 기타 FP 주제에 대한 추가 정보:
A fool's scriptum on functional programming .
Reference
이 문제에 관하여(Do-Notation 없이 중첩된 모나딕 계산에서 추상화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/iquardt/abstracting-from-nested-monadic-computations-w-o-do-notation-dcp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)