これは、パッケージEffect
の公式チュートリアルで提供されている図です。pipes
type Effect = Proxy X () () X
Upstream | Downstream
+---------+
| |
X <== <== ()
| |
() ==> ==> X
| | |
+----|----+
v
r
Effect
にはデータの流れがないのでProxy X X X X
、すべての流れを封印するだけだと思っていました。ただし、代わりに、2 つの流入を許可します。それには特別な理由がありますか?Effect
signature を使用して、a が通常行うことを単に記述した場合Proxy X X X X
、コンパイラを完全に正常に渡すことができます。
myMonad :: Proxy X X X X IO ()
myMonad = do
a <- lift $ getLine
lift $ print a
return ()
run
なぜこのようなことができないのでしょうか。