on master help sign in
Create an `isOp` function for strings.
1ffaad1Evan Czaplicki
compiler/Parse/Helpers.hs+2−2
@@ -4,7 +4,7 @@ import Control.Applicative ((<$>),(<*>))
4import Control.Monad
4import Control.Monad
5import Control.Monad.State
5import Control.Monad.State
6import Data.Char (isUpper)
6import Data.Char (isUpper)
7−import SourceSyntax.Helpers (isOp)
7+import SourceSyntax.Helpers as Help
8import SourceSyntax.Location as Location
8import SourceSyntax.Location as Location
9import SourceSyntax.Expression
9import SourceSyntax.Expression
10import SourceSyntax.Rename (deprime)
10import SourceSyntax.Rename (deprime)
@@ -59,7 +59,7 @@ anyOp :: IParser String
59anyOp = betwixt '`' '`' var <|> symOp <?> "infix operator (e.g. +, *, ||)"
59anyOp = betwixt '`' '`' var <|> symOp <?> "infix operator (e.g. +, *, ||)"
60
60
61symOp :: IParser String
61symOp :: IParser String
62−symOp = do op <- many1 (satisfy isOp)
62+symOp = do op <- many1 (satisfy Help.isSymbol)
63 guard (op `notElem` [ "=", "..", "->", "--", "|", "\8594", ":" ])
63 guard (op `notElem` [ "=", "..", "->", "--", "|", "\8594", ":" ])
64 case op of
64 case op of
65 "." -> notFollowedBy lower >> return op
65 "." -> notFollowedBy lower >> return op
compiler/SourceSyntax/Expression.hs+4−1
@@ -43,11 +43,14 @@ tuple es = Data ("_Tuple" ++ show (length es)) es
43delist (Location.L _ _ (Data "::" [h,t])) = h : delist t
43delist (Location.L _ _ (Data "::" [h,t])) = h : delist t
44delist _ = []
44delist _ = []
45
45
46+dummyLet defs =
47+ Location.none $ Let defs (Location.none . Literal $ Literal.IntNum 42)
48+
46instance Pretty (Expr t v) where
49instance Pretty (Expr t v) where
47 pretty expr =
50 pretty expr =
48 case expr of
51 case expr of
49 Literal lit -> pretty lit
52 Literal lit -> pretty lit
50− Var x@(c:_) -> parensIf (Help.isOp c) (P.text x)
53+ Var x -> parensIf (Help.isOp x) (P.text x)
51 Range e1 e2 -> P.brackets (pretty e1 <> P.text ".." <> pretty e2)
54 Range e1 e2 -> P.brackets (pretty e1 <> P.text ".." <> pretty e2)
52 ExplicitList es -> P.brackets (commaCat (map pretty es))
55 ExplicitList es -> P.brackets (commaCat (map pretty es))
53 Binop op e1 e2 -> P.sep [ prettyParens e1 <+> P.text op, prettyParens e2 ]
56 Binop op e1 e2 -> P.sep [ prettyParens e1 <+> P.text op, prettyParens e2 ]
compiler/SourceSyntax/Helpers.hs+6−4
@@ -1,12 +1,14 @@
1
1
2module SourceSyntax.Helpers where
2module SourceSyntax.Helpers where
3
3
4−import Data.Char (isSymbol,isDigit)
4+import qualified Data.Char as Char
5
5
6brkt s = "{ " ++ s ++ " }"
6brkt s = "{ " ++ s ++ " }"
7
7
8isTuple name =
8isTuple name =
9− take 6 name == "_Tuple" && all isDigit (drop 6 name)
9+ take 6 name == "_Tuple" && all Char.isDigit (drop 6 name)
10
10
11−isOp c =
11+isOp = all isSymbol
12+
13+isSymbol c =
12− isSymbol c || elem c "+-/*=.$<>:&|^?%#@~!"
14+ Char.isSymbol c || elem c "+-/*=.$<>:&|^?%#@~!"