readWithTimeOut :: Socket -> Int -> Maybe String readWithTimeOut s ms = timer ms Nothing || read s
関数timer::Int->a->aは指定された時間簡約が停止する。 その後2番目の引数を返す 関数read::Socket->StringはTCP/IPにデータが来るまで簡約が停止する。 ソケットからByte列をStringとして返す。 演算子||は、競争書き込み。全ての最初に帰ってきた値を値として返す。 他の簡約は、もちろん正常に停止、消去(GC?)される。 もちろん a = b || c || dと複数書ける。 (競争に負けた簡約は、どうしたらいいんだろう?うーん、キャッシュしておく?)