Questo è lo schema di Effect
fornito nel tutorial ufficiale del pacchetto pipes
.Come mai "Effect" sigilla solo due in-flussi, invece di tutti i flussi?
type Effect = Proxy X()() X
Upstream | Downstream
+---------+
| |
X <== <==()
| |
() ==> ==> X
| | |
+----|----+
v
r
Dal Effect
non dispone di alcun flusso di dati, mi aspettavo che fosse solo Proxy X X X X
, sigillando tutti i flussi. Ma invece, consente i due flussi in entrata. C'è una ragione particolare per quello? Se scrivo solo quello che un Effect
normalmente fa, con la firma Proxy X X X X
, può passare il compilatore perfettamente bene:
myMonad :: Proxy X X X X IO()
myMonad = do
a <- lift $ getLine
lift $ print a
return()
Perché non possiamo run
qualcosa di simile?