on master help sign in
Add support for triple-quoted multi-line strings
9d68c10Evan Czaplicki
compiler/Parse/Literal.hs+5−2
@@ -20,8 +20,11 @@ num = fmap toLit (preNum <?> "number")
20 ('.':) <$> many1 digit
20 ('.':) <$> many1 digit
21
21
22str :: IParser Literal
22str :: IParser Literal
23+str = choice [ let quote = try (string "\"\"\"")
24+ in quote >> Str <$> manyTill (backslashed <|> anyChar) quote
23−str = liftM Str . expecting "string" . betwixt '"' '"' . many $
25+ , liftM Str . expecting "string" . betwixt '"' '"' . many $
24− backslashed <|> satisfy (/='"')
26+ backslashed <|> satisfy (/='"')
27+ ]
25
28
26chr :: IParser Literal
29chr :: IParser Literal
27chr = Chr <$> betwixt '\'' '\'' (backslashed <|> satisfy (/='\''))
30chr = Chr <$> betwixt '\'' '\'' (backslashed <|> satisfy (/='\''))
compiler/Parse/Pattern.hs+1−1
@@ -1,7 +1,7 @@
1
1
2module Parse.Pattern (term, expr, makeLambda, flatten) where
2module Parse.Pattern (term, expr, makeLambda, flatten) where
3
3
4−import Control.Applicative ((<$>),(<*>),(*>),pure)
4+import Control.Applicative ((<$>),(<*>),pure)
5import Control.Monad
5import Control.Monad
6import Control.Monad.State
6import Control.Monad.State
7import Data.Char (isUpper)
7import Data.Char (isUpper)