入力を読み取り、処理して出力を書き込むプログラムを作成しているとします。
私にも機能があるとしましょう def process(input: MyInput): MyOutput
ここReader
で、入力にモナドを使用する必要があります。
def readAndProcess(reader:MyReader [MyInput]):MyReader [MyOutput] = for(in < -reader )yield process(in)
これまでのところ、とても良いですが、今、私はどこかに出力を書く必要があります。つまり、Writer
モナドが必要で、関数を定義できますreadProcessAndWrite
def readProcessAndWrite(reader:MyReader [MyInput]):MyWriter [MyOutput]
私が関数を持っているとしましょう
def write(out:MyOutput、writer:MyWriter [MyOutput]):MyWriter [MyOutput]
どうすれば定義できますreadProcessAndWrite
か?
def readProcessAndWrite(reader:MyReader [MyInput]、 writer:MyWriter [MyOutput]):MyWriter [MyOutput] = ... ???
少し誤解されていると思います。リーダーモナドは、プログラムへの入力を読み取ることを目的としていませんが、さまざまな関数に同じ引数を渡さないようにするためのものです。同様に、Writerは、標準出力やファイルへの書き込みではなく、計算で状態を蓄積することを目的としています。(もちろん、蓄積した後で書くことはできますが、これにはWriterモナドを使用しません!)
本当にそれらを結合したい場合は、結合されたモナド(ReaderWriter[MyInput, MyOutput]
;この質問を参照)またはモナド変換子(ReaderT[MyInput, Writer[MyOutput]]
またはその逆)を作成する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加