Ich habe mir einen Tag lang über diesen Kopf gekratzt.Monadische Ausdrücke in conditionals - GHC kompiliert, cabal lehnt ab
Ich habe ein paar Funktionen in meinem Code, der wie folgt aussehen:
function :: IO (Maybe Whatever)
function = do
monadFun
yaySomeIO
status <- maybeItWillFail
if checkStatus status -- Did we succeed?
then monadTime >>= return . Just . processItPurely
else return Nothing
GHCI wird geladen und dies ohne Probleme interaktiv ausführen, und ghc es glücklich kompilieren. Ausführen dieses durch Kabalen, gibt mir aber diese:
myProgram.hs:94:16:
Unexpected semi-colons in conditional:
if checkStatus status; then monadTime >>= return . Just . processItPurely; else return Nothing
Perhaps you meant to use -XDoAndIfThenElse?
Und was auch immer diese -XDoAndIfThenElse
Option ist, kann ich nicht eine Spur davon überall in jeder Dokumentation zu finden scheinen. Warum ist cabal (oder ist das ghc an diesem Punkt?) Schrie mich an für die Verwendung von Semikolons, die IT dort an erster Stelle gesetzt? Oder verwenden monadische Ausdrücke in if-then-else-Anweisungen nur eine schlechte Idee?
Beachten Sie, dass Kabale darüber gar nicht beschweren:
case checkStatus status of
True -> monadTime >>= return . Just . processItPurely
_ -> return Nothing
... außer dies ist hässlich wie die Hölle, und ich würde nie wollen, dies in meinem Code setzen. Kann mir jemand sagen, was los ist? Bitte und danke im Voraus.
Danke, ich füge nur die Einzüge hinzu, wenn nötig! –