0

모나드에 ramda-fantasy을 사용하고 있습니다. 문자열에 정규식 일치를 수행하고 Maybe String을 반환하는 일부 함수가 들어 있습니다.자바 스크립트에서 아마도 함수 목록을 적용하십시오.

어쩌면 매핑하여 모든 함수를 적용하고 결과를 연결하는 방법은 무엇입니까?

어떻게 할 수

const fieldRetrievers = [ 
    getAddress, 
    getName, 
    getPhone, 
] 

const text = Maybe.of("a text") 

// I want to define 
// List (String -> Maybe String) -> Maybe String -> Maybe String 
function getInfo(retrievers, maybeText) {...} 

한 I?

+0

addr의 이름 부분에서 전화를 받으려는 경우 문자열의 ess 부분? – Bergi

답변

1

모나드 구조의 함수 합성 ("kleisli arrows")은 composeK입니다.

text.chain(getAddress).chain(getName).chain(getPhone) 

것은 당신이 기능의 배열을 통해 reduce를 사용하여 구현할 수있는 :

R.reduce((m, f) => m.chain(f), text, fieldRetrievers) 

그래서 당신이 쓰는 것

기본적으로, 당신의 결과 기능은 입력에 반복적으로 chain로 가정된다

const getInfo = R.flip(R.reduce(R.flip(R.chain))) 
+0

니스. 그러나 함수 중 하나가 'Nothing'을 반환하면 전체 결과는 Nothing이됩니다. 나는 '아무것도'를 모두 무시하고 싶다. –

+0

무슨 뜻입니까, 무시합니까? '아무것도'가 아니라면 또 무엇을 돌려 줄 수 있니? 귀하의 질문에 예제 입력과 예상 결과가 포함 된 예제 기능을 제공하십시오. – Bergi

+0

문자열 "Name : John | Address : Apple Street"이 있다고 상상해보십시오. 이 예제에서'getName'은'Just "John"을 리턴 할 것이고, getAddress는 단지 "Apple Street"을 리턴 할 것이고 getPhone은'Nothing'을 리턴 할 것입니다. 제 목표는 원래의 문자열에 대해이 모든 함수를 실행하고 결과를 연결하여'아무것도 없습니다. '를 무시하는 것입니다. 내가 준 예제에서, 원하는 출력은 "John, Apple Street"입니다. 간결한 방법이 있습니까? –