Mi stavo grattando la testa per un giorno su questo.Espressioni monadiche in condizionali - Compensa GHC, rifiuto cabal
Ho un paio di funzioni nel mio codice che assomigliano a questo:
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 sarà caricare ed eseguire questo modo interattivo senza problemi, e GHC sarà compilarlo felicemente. L'esecuzione di questo attraverso la cabala, però, mi dà questo:
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?
E qualunque cosa questa opzione -XDoAndIfThenElse
è, io non riesco a trovare una traccia di esso ovunque in tutta la documentazione. Perché la cabala (o è questo ghc a questo punto?) Mi sta urlando per usare i semi-colon che l'IT ha messo lì in primo luogo? Oppure usare espressioni monadiche in istruzioni if-then-else è solo una cattiva idea?
noti che cabala non si lamenta questo a tutti:
case checkStatus status of
True -> monadTime >>= return . Just . processItPurely
_ -> return Nothing
... tranne che questa è brutto come l'inferno e non avevo mai voglia di mettere questo nel mio codice. Qualcuno può dirmi cosa sta succedendo? Per favore e grazie in anticipo.
Grazie, aggiungerò i trattini se necessario! –