on master help sign in
Made do notation behave better when bracketed
commit2852e711cb6ed02be0ef6fcb38a6ee8bf1c7c680 authorEdwin Brady <eb@cs.st-andrews.ac.uk> dateSat 7 Jan 2012, 15:18 (15 years ago) parentc5e3aa7
2 files changed+7−6
lib/network/cgi.idr+1−2 src/Idris/Parser.hs+6−4
lib/network/cgi.idr+1−2
@@ -46,8 +46,7 @@ getAction (MkCGI act) = act
4646
4747instance Monad CGI where {
4848 (>>=) (MkCGI f) k = MkCGI (\s => do v <- f s
49− getAction (k (fst v)) (snd v)
50− )
49+ getAction (k (fst v)) (snd v))
5150
5251 return v = MkCGI (\s => return (v, s))
5352}
src/Idris/Parser.hs+6−4
@@ -206,8 +206,9 @@ pKeepTerminator
206206 <|> do c <- indent; l <- last_indent
207207 if (c <= l) then return ()
208208 else fail "Not a terminator"
209− <|> do i <- getInput; if (take 1 i == "}") then return ()
210− else fail "Not a terminator"
209+ <|> do i <- getInput; let h = take 1 i
210+ if (h == "}" || h == ")") then return ()
211+ else fail "Not a terminator"
211212 <|> lookAhead eof
212213
213214notEndApp = do c <- indent; l <- last_indent
@@ -219,7 +220,7 @@ notEndBlock = do ist <- getState
219220 case brace_stack ist of
220221 Just lvl : xs -> do i <- indent
221222 inp <- getInput
222− if (i < lvl || take 1 inp == ")")
223+ if (i < lvl || take 1 inp == ")")
223224 then fail "End of block"
224225 else return ()
225226 _ -> return ()
@@ -805,7 +806,8 @@ pComprehension syn
805806pDoBlock syn
806807 = do reserved "do"; open_block
807808 push_indent
808− ds <- many1 (do notEndBlock; x <- pDo syn; pKeepTerminator; return x)
809+ ds <- many1 (do notEndBlock
810+ x <- pDo syn; pKeepTerminator; return x)
809811 pop_indent
810812 close_block
811813 return (PDoBlock ds)