Przeszedłem przez głowę nad tym dniem.Wyrażenia monadyczne w warunkach warunkowych - kompilacja GHC, odmowa cabal
Mam kilka funkcji w moim kodu, który wygląda tak:
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 będzie załadować i uruchomić ten interaktywnie bez żadnych problemów, a ghc będzie go skompilować szczęśliwie. Running to przez klika jednak daje mi to:
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?
i cokolwiek ta opcja -XDoAndIfThenElse
jest, nie wydaje się znaleźć śladu nigdzie w jakiejkolwiek dokumentacji. Dlaczego cabal (czy jest to skrót od ghc?) Krzyczy na mnie za używanie średników, które IT umieścił tam na pierwszym miejscu? Lub używa wyrażeń monadycznych w wyrażeniach if-then-else po prostu zły pomysł?
Zauważ, że kabała nie narzekać to w ogóle:
case checkStatus status of
True -> monadTime >>= return . Just . processItPurely
_ -> return Nothing
... oprócz tego jest brzydki jak cholera i nigdy nie chcą umieścić to w moim kodu. Czy ktoś może mi powiedzieć, co się dzieje? Proszę i dziękuję z góry.
Dzięki, dodam tylko wcięcia zgodnie z potrzebami! –