2016-12-26 4 views
1

タイプPipe a b m r -> Pipe (a, c) (b, c) m rの関数が必要です。タプルで作業するパイプを持ち上げる

私はどれくらいプレイしてもfor~>または>~です。タイプを適切に一致させることはできません。

私を助けることができますか?

答えて

4

一般的には可能ではないと思います。

hypotheticalLift :: Pipe a b m r -> Pipe (a, c) (b, c) m r 

hypotheticalLift (yield b)にはどのような動作が必要ですか?恐らくそれはcのためにyield (b, c)と同じであるべきですが、どちらがcで、なぜですか?

+0

申し訳ありませんが、あなたの意見は分かりません。私は 'hypotheticalLift'がタプルの2番目の引数をそのまま渡すことを期待していました。 'Control.Arrow.first'と同様に' c'を生成する必要はありません。 – utdemir

+3

これは、下流に送られた各 'c'の上流から' c'を消費しなければならないことを意味します。 'b'を' yield 'したいときは、 'a'が' c'を副作用として与えるまで待ち行列に入れますか?それとも即座に待ちますか? 'あなたがそれを必要とするまで待ち行列に' a'を入れます。あなたが 'a'を'待っている 'ときは、付随する 'c'を任意に大きくなるかもしれない待ち行列に入れますか? – Gurkenglas

+0

@Gurkenglas、ああ、今私はそれを理解している。ありがとうございました。 – utdemir

関連する問題