0

私はモナドにramda-fantasyを使用しています。私は多分、文字列の正規表現マッチを実行し、Maybe Stringを返すいくつかの関数の中に文字列を持っています。Javascriptで関数のリストを多分入れてください

多分、関数をすべて適用して結果を連結するにはどうすればよいですか?

どのように私はそれを行うことができます

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の名前の部分から電話を取得したい文字列の一部ですか? – Bergi

答えて

1

あなたは、モナド構造上の関数構成( "kleisli arrows")を探しています(composeK)。

基本的には、あなたの結果の関数はに繰り返しchain入力の上になっている:

あなたが機能のあなたのアレイの上 reduceを使用して実装することができ
text.chain(getAddress).chain(getName).chain(getPhone) 

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

ので、あなたが書くだろう

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

ニース。しかし、いずれかの関数が 'Nothing'を返すと、結果全体は' Nothing'になります。私はすべての「何もない」を無視したい。 –

+0

あなたはどういう意味ですか、無視しますか? 「何もない」以外の場合、他に何を返すことができますか?あなたの質問には、入力例と期待される出力の例をいくつか挙げてください。 – Bergi

+0

文字列「名前:John |住所:Apple Street」があるとします。この例では、 'getName'は' Just "John"を返し、getAddressは 'Just" Apple Street "を返し、getPhoneは' Nothing'を返します。 私の目標は、元の文字列に対してこれらの関数をすべて実行し、 'Nothing'を無視して結果を連結することです。 私が与えた例では、希望する出力は「John、Apple Street」です。 これを行うための簡潔な方法はありますか? –

関連する問題