can not make `if` look nice in a `do`
The handling of if within a do block is not consistent with it's handling outside of it.
import Text.ParserCombinators.Parsec
date AesthErr
= LineTooLong SourcePos Int
-- works fine
shorty0 len = do
s <- manyTill anyChar newLine
case length s > len of
True -> do
pos <- getPosition
return $ Left $ LineTooLong pos len
_ -> return $ Right s
-- epic fail
shorty1 len = do
s <- manyTill anyChar newLine
if length s > len then
do
pos <- getPosition
return $ Left $ LineTooLong pos len
else
return $ Right s
-- epic fail
shorty2 len = do
s <- manyTill anyChar newLine
if length s > len then
fmap (Left . flip LineTooLong len) getPosition
else
return $ Right s
Whereas this is fine:
f n =
if n > 7 then
"Great!"
else
"Less!"
Is this something I can fix?
Trac metadata
| Trac field | Value |
|---|---|
| Version | 6.8.2 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Parser) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |