Wenn ich eine Funktion habe, die IO Bool
(speziell eine atomically
) zurückgibt, gibt es eine Möglichkeit, den Rückgabewert direkt in der if
-Anweisung ohne Bindung zu verwenden?Gibt es eine Möglichkeit, IO Bool in If-Anweisung ohne Bindung an einen Namen in Haskell zu verwenden?
Also zur Zeit habe ich
bekamok <- atomically $ do
...
if (ok) then do
...
else do
...
Ist es überhaupt möglich, dies als etwas zu schreiben, wie
if (*some_operator_here* atomically $ do
...) then do
...
else do
...
Ich hatte gehofft, es eine Möglichkeit wäre anonym etwas wie <-
zu verwenden also if (<- atomically ...)
aber bisher kein solches Glück.
Ebenso auf getLine ist es möglich, so etwas wie
if ((*operator* getLine) == "1234") then do ...
Verwandte Nachtrag zu schreiben - was ist die Art von (<-)
? Ich kann es nicht in Ghci zeigen. Ich nehme an, es ist m a -> a
, aber das würde bedeuten, dass es außerhalb einer Monade verwendet werden könnte, um dieser Monade zu entkommen, was unsicher wäre, oder? Ist (<-)
überhaupt keine Funktion?
Um Ihre letzte Frage zu beantworten, ist '(<-)' keine Funktion oder Ausdruck und ist eine eingebaute Syntax, die Teil der Do-Notation ist. Es entlädt sich zu einem Aufruf an "(>> =)" unter der Haube und Sie können [dies] (http://blog.sigfpe.com/2006/08/you-could-have-invened-monads-and) lesen. html), um mehr darüber zu erfahren, wie Entzuckerung funktioniert. –