Hier ist das Diagramm Effect
im offiziellen Tutorial von pipes
Paket zur Verfügung gestellt.Wie kommt es, dass "Effect" nur zwei Einläufe anstatt aller Flüsse abschließt?
type Effect = Proxy X()() X
Upstream | Downstream
+---------+
| |
X <== <==()
| |
() ==> ==> X
| | |
+----|----+
v
r
Da Effect
hat keinen Datenfluß, erwarte ich es nur Proxy X X X X
zu sein, alle Strömungen abdichten. Aber stattdessen erlaubt es die zwei In-Flows. Gibt es dafür einen besonderen Grund? Wenn ich nur schreiben, was ein Effect
normalerweise der Fall ist, mit Unterschrift Proxy X X X X
, kann es den Compiler übergeben völlig in Ordnung:
myMonad :: Proxy X X X X IO()
myMonad = do
a <- lift $ getLine
lift $ print a
return()
Warum können wir nicht run
so etwas?