1

私は少し怠惰な IO 型のモナドを C# で書き、linq 構文を使ってコードを読みやすくしてみました。

副作用のために呼び出されたばかりの操作に対して、変数の割り当てなしでバインドを行う方法はありますか?

このPrint(...)例の は常に次を返しますVoid.Void

static IO<Void> Foo()
{
    var foo = from i in Return(2)
              from _1 in Print("Enter a number")
              from input in ReadInt()
              from _2 in Print("You entered: " + input)
              from j in Increment(input).Bind(Square)
              from sum in Add(j, input)
              from _3 in Print("i = " + i)
              from _4 in Print("j = " + j)
              from condition in GreaterThan(j, 10)
              from _5 in If(condition,
                  Print("j is greater than 10"),
                  Print("j is not greater than 10"))
              from _6 in Print("sum = " + sum)
              select Void.Void;
    return foo;
}
4

1 に答える 1