私はあなたがHaskellのイディオムを使用しているので、あなたがHaskellをよく知っていると仮定しています。あなたは、次の機能があります。
getLine ::() -> IO String -- why isn't this simply `getLine :: IO String`?
cat :: String -> Task Error String
あなたがしたいまず最初に、IOアクションをラップ余計な機能を取り除くされています
getLine() :: IO String
その後、あなたはcat
とgetLine()
を構成するfmap
を使用することができます:
fmap cat getLine() :: IO (Task Error String)
最後に、Task
を想定するEither
及びに類似していますがeither
に似ている、我々は行うことができます。
fmap cat getLine() >>= fork logError printResult :: IO String
これは以下のようにJavaScriptで書くことができます。今すぐ
getLine()
.map(cat)
.bind(fork(logError, printResult));
、あなたがIOアクションのための適切なmap
とbind
メソッドを実装するだけですJavaScriptで。
編集:
(>>= fork logError printResult) . fmap cat . getLine ::() -> IO String
JavaScriptではこれはに変換します::は、あなたは、単にHaskellで次の操作を行うことができ、それらを構成する
compose(bind(fork(logError, printResult))
, fmap(cat)
, getLine
);
これは想定してのfmap
とbind
こと
と定義されます。
function fmap(f) {
return function (x) {
return x.map(f);
};
}
function bind(f) {
return function (x) {
return x.bind(f);
};
}
したがって、引き続きIOアクションのためにmap
とbind
メソッドを実装する必要があります。
ようこそ。何をどのように尋ねるかを確認するには、[ヘルプ]をご覧ください。私は人々が[mcve]のように期待される結果についてもっと説明したいと思うと思います。 – mplungjan
まず最初に試してみる必要があります。問題が発生した場合は、試したこととエラーが得ている。しかし、質問を投稿する前に基本的な調査を行うことも同様に重要です。 – ishmaelMakitla
'const main =()=> compose(map(cat)、getLine).performIO()。fork(logError、printResult)'以外の解決策は見当たりませんが、それを行う方法。 – Nick