2017-01-02 14 views
0

私はちょうどMonadsを使い始めていて、たぶんIO(別名Task?)について学んでいます。 Javascript Monads - 階層関数パス?

は、入力に基づいて行動方針を決めることができモナドありますか?たとえば、入力が 'http'で始まる場合は、fn(入力)を実行します。入力が「短縮」で始まる場合は、fn2(入力)を実行しますか?最後に、入力が「完了」であれば、fn3(入力)。あるいは、この種の分岐は、いくつかの関数型プログラミング法に違反していますか?以前の結果に基づいてさらに計算を決める -

+0

あなたはちょうど私が私がnullチェックのいくつかの種類のいずれかの枝の上限1を見てきたように、ほぼすべてのオンラインソースのどちらかについて興味がどちらか.... –

+0

を説明しました。他の場合は模倣することができますか? – bresson

+0

あなたがしていることすべてがヌルチェックであれば、あなたは 'たぶん'を使用しているはずです。分岐はここtypescriptですhttps://tech.evojam.com/2016/03/21/practical-intro-to-monads-in-javascript-either/にまともな探したとえば何 'Either'は、* *のためです...です –

答えて

0

モナドの組成物の全体のポイントは、あなたが求めている正確に何をすることが許可されていることです。定額Javascriptのコードを書くときに使用する、すなわち、非物象化1 - 具体的には

は、のは、最初の(暗黙の)Javascriptのモナドを見てみましょう。ここで、あなたはあなたが最初のアクションの結果に応じて、重要なのは、その効果、変化(getElementById().valueの結果)を含む計算、ことがわかります

var s = document.getElementById("myTextBox").value; // effect: looking at current DOM state 
if (s == "foo") 
{ 
    document.getElementById("output").textContents = "OK." // effect: changing the DOM 
} else { 
    window.alert("What?"); // effect: popup dialog 
} 

を書くことができます。その他、具体化さモナドで

、あなたは正確に同じことを行うことができます。例えばMaybeで(私は人気のJavascriptのモナドライブラリがどのように見えるかわからないので、ここではHaskellの構文を使用して):

parse :: String -> Maybe Command 
parse = ... 

reply :: String -> Maybe String 
reply s = do 
    cmd <- parse s -- effect: fails if `s` is not a valid command 
    case cmd of 
     Say s' -> Just s' -- effect: succeeds with s' 
     _ -> Nothing -- effect: failure 

同じことがここに起こっている:parse sの結果に応じて、次の効果があることができ成功の失敗。