estado rascándose la cabeza durante un día sobre éste.expresiones condicionales en Monádicos - GHC compila, cábala se niega
tengo unas pocas funciones en mi código que se ven así:
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 se cargará y ejecutará esta forma interactiva sin problemas, y GHC compilarlo felizmente. La ejecución de este través de Cabal, sin embargo, me da esto:
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?
Y lo que esta opción es -XDoAndIfThenElse
, me parece que no puede encontrar un rastro de ella en cualquier lugar en cualquier documentación. ¿Por qué está cabal (o es este ghc en este momento?) Gritándome por usar puntos y comas que IT puso allí en primer lugar? ¿O está usando expresiones monádicas en declaraciones if-then-else simplemente una mala idea?
Tenga en cuenta que Cabal no se queja de esto en absoluto:
case checkStatus status of
True -> monadTime >>= return . Just . processItPurely
_ -> return Nothing
... excepto que esta es feo como el infierno y yo no se desea poner esto en mi código. ¿Alguien puede decirme qué está pasando? Por favor y gracias de antemano.
¡Gracias, solo agregaré las sangrías según sea necesario! –