Se ho una funzione che restituisce IO Bool
(in particolare uno atomically
), esiste un modo per utilizzare direttamente il valore restituito nell'istruzione if
, senza l'associazione?Esiste un modo per utilizzare IO Bool nell'istruzione if senza legarsi a un nome in haskell?
Quindi attualmente ho ho
ok <- atomically $ do
...
if (ok) then do
...
else do
...
È a tutto il possibile per scrivere questo come qualcosa di simile
if (*some_operator_here* atomically $ do
...) then do
...
else do
...
Speravo ci sarebbe un modo per usare qualcosa come <-
anonimo , ovvero, if (<- atomically ...)
ma finora non ha avuto tanta fortuna.
Allo stesso modo il GetLine, è possibile scrivere qualcosa di simile
if ((*operator* getLine) == "1234") then do ...
addendum correlati - qual è il tipo di (<-)
? Non riesco a farlo apparire in ghci. Suppongo che sia m a -> a
, ma questo significherebbe che potrebbe essere usato al di fuori di una monade per sfuggire a quella monade, che non sarebbe sicura, giusto? (<-)
non ha alcuna funzione?
Per rispondere alla tua ultima domanda, '(<-)' non è una funzione o un'espressione ed è una sintassi incorporata che fa parte della notazione "do". È desugars per una chiamata a '(>> =)' sotto il cofano e si può leggere [questo] (http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and. html) per saperne di più su come funziona il desugaring. –