Remove [1..5] syntax in favor of List.range
The theory is, if you want a range, what do you search for? If you see
[1..5] in the wild, how do you know if it is 1 through 5 inclusive or
exclusive? What do you search for?
The other theory is, if this feature was proposed today, it would
definitely not get added. Used very rarely. The function version is
better. Why special case it? etc.
That said, it does mean our factorial example is a little longer now.
factorial n =
List.product [1..n]
factorial n =
List.product (List.range 1 n)
commit0d2c5a2233e9c11db0384d8fc096036767eb3b9b
authorEvan Czaplicki <evancz@users.noreply.github.com>
dateFri 5 Aug 2016, 18:44 (10 years ago)
parentbb54ad6
src/AST/Expression/General.hs−1
@@ -42,7 +42,6 @@ type Expr annotation definition variable tipe =
4242data Expr' ann def var typ
4343 = Literal Literal.Literal
4444 | Var var
45− | Range (Expr ann def var typ) (Expr ann def var typ)
4645 | ExplicitList [Expr ann def var typ]
4746 | Binop var (Expr ann def var typ) (Expr ann def var typ)
4847 | Lambda (Pattern.Pattern ann var) (Expr ann def var typ)
src/AST/Expression/Optimized.hs−1
@@ -38,7 +38,6 @@ dummyFacts =
3838data Expr
3939 = Literal Literal.Literal
4040 | Var Var.Canonical
41− | Range Expr Expr
4241 | ExplicitList [Expr]
4342 | Binop Var.Canonical Expr Expr
4443 | Function [String] Expr
src/Canonicalize.hs−3
@@ -366,9 +366,6 @@ canonicalizeExpr env (A.A region validExpr) =
366366 Literal lit ->
367367 Result.ok (Literal lit)
368368
369− Range lowExpr highExpr ->
370− Range <$> go lowExpr <*> go highExpr
371−
372369 Access record field ->
373370 Access <$> go record <*> Result.ok field
374371
src/Canonicalize/Sort.hs−3
@@ -68,9 +68,6 @@ reorder (A.A ann expression) =
6868 Literal _ ->
6969 return expression
7070
71− Range lowExpr highExpr ->
72− Range <$> reorder lowExpr <*> reorder highExpr
73−
7471 ExplicitList es ->
7572 ExplicitList <$> mapM reorder es
7673
src/Generate/JavaScript/BuiltIn.hs+1−6
@@ -1,6 +1,6 @@
11module Generate.JavaScript.BuiltIn
22 ( character, string
3− , list, range
3+ , list
44 , recordUpdate
55 , eq, cmp
66 , effect, outgoingPort, incomingPort
@@ -50,11 +50,6 @@ list elements =
5050 nativeList "fromArray" [ JS.ArrayLit () elements ]
5151
5252
53−range :: JS.Expression () -> JS.Expression () -> JS.Expression ()
54−range low high =
55− nativeList "range" [ low, high ]
56−
57−
5853
5954-- RECORDS
6055
src/Generate/JavaScript/Expression.hs−5
@@ -114,11 +114,6 @@ generateCode expr =
114114 Literal lit ->
115115 jsExpr (Literal.literal lit)
116116
117− Range lo hi ->
118− do lo' <- generateJsExpr lo
119− hi' <- generateJsExpr hi
120− jsExpr $ BuiltIn.range lo' hi'
121−
122117 Access record field ->
123118 do record' <- generateJsExpr record
124119 jsExpr $ DotRef () record' (var (Var.safe field))
src/Nitpick/PatternMatches.hs−3
@@ -135,9 +135,6 @@ checkExpression tagDict (A.A region expression) =
135135 E.Var _ ->
136136 Result.ok ()
137137
138− E.Range low high ->
139− go2 low high
140−
141138 E.ExplicitList listExprs ->
142139 F.traverse_ go listExprs
143140
src/Optimize.hs−5
@@ -206,11 +206,6 @@ optimizeExpr context annExpr@(A.A region expression) =
206206 else
207207 pure (Opt.Var name)
208208
209− Expr.Range lowExpr highExpr ->
210− Opt.Range
211− <$> justConvert lowExpr
212− <*> justConvert highExpr
213−
214209 Expr.ExplicitList elements ->
215210 Opt.ExplicitList
216211 <$> T.traverse justConvert elements
src/Optimize/Inline.hs−6
@@ -100,9 +100,6 @@ count expression =
100100 Var.TopLevel _ ->
101101 Map.empty
102102
103− Range lo hi ->
104− count2 lo hi
105−
106103 ExplicitList exprs ->
107104 countMany exprs
108105
@@ -210,9 +207,6 @@ replace substitutions expression =
210207 Var _ ->
211208 expression
212209
213− Range lo hi ->
214− Range (go lo) (go hi)
215−
216210 ExplicitList exprs ->
217211 ExplicitList (map go exprs)
218212
src/Parse/Binop.hs+1−1
@@ -22,7 +22,7 @@ infixOp :: IParser String
2222infixOp =
2323 expecting "an infix operator like (+)" $
2424 do op <- many1 (satisfy (\c -> Help.isSymbol c && c /= '`'))
25− guard (op `notElem` [ "=", "..", "->", "--", "|", ":" ])
25+ guard (op `notElem` [ "=", "->", "--", "|", ":" ])
2626 case op of
2727 "." -> notFollowedBy lower >> return op
2828 _ -> return op
src/Parse/Expression.hs+1−6
@@ -79,13 +79,8 @@ negative =
7979
8080listTerm :: IParser Source.Expr'
8181listTerm =
82− shader' <|> braces (try range <|> E.ExplicitList <$> commaSep expr)
82+ shader' <|> braces (E.ExplicitList <$> commaSep expr)
8383 where
84− range =
85− do lo <- expr
86− padded (string "..")
87− E.Range lo <$> expr
88−
8984 shader' =
9085 do pos <- getPosition
9186 let uid = show (sourceLine pos) ++ ":" ++ show (sourceColumn pos)
src/Reporting/Error/Type.hs−11
@@ -70,7 +70,6 @@ data Hint
7070 | Literal String
7171 | Pattern Pattern
7272 | Shader
73− | Range
7473 | Lambda
7574 | Record
7675 -- effect manager problems
@@ -421,16 +420,6 @@ mismatchToReport localizer (MismatchInfo hint leftType rightType maybeReason) =
421420 []
422421 )
423422
424− Range ->
425− report
426− Nothing
427− "The low and high members of this list range are not the same type of value."
428− ( cmpHint
429− "The low end of the range has type:"
430− "But the high end is:"
431− []
432− )
433−
434423 Lambda ->
435424 report
436425 Nothing
src/Type/Constrain/Expression.hs−14
@@ -29,10 +29,6 @@ constrain
2929 -> Type
3030 -> IO TypeConstraint
3131constrain env annotatedExpr@(A.A region expression) tipe =
32− let
33− list t =
34− Env.getType env "List" <| t
35− in
3632 case expression of
3733 E.Literal lit ->
3834 Literal.constrain env region lit tipe
@@ -82,16 +78,6 @@ constrain env annotatedExpr@(A.A region expression) tipe =
8278 E.Var var ->
8379 return (CInstance region (V.toString var) tipe)
8480
85− E.Range lowExpr highExpr ->
86− existsNumber $ \n ->
87− do lowCon <- constrain env lowExpr n
88− highCon <- constrain env highExpr n
89− return $ CAnd
90− [ lowCon
91− , highCon
92− , CEqual Error.Range region (list n) tipe
93− ]
94−
9581 E.ExplicitList exprs ->
9682 constrainList env region exprs tipe
9783
src/Validate.hs−5
@@ -486,11 +486,6 @@ expression (A.A ann sourceExpression) =
486486 Literal lit ->
487487 return (Literal lit)
488488
489− Range lowExpr highExpr ->
490− Range
491− <$> expression lowExpr
492− <*> expression highExpr
493−
494489 ExplicitList expressions ->
495490 ExplicitList
496491 <$> T.traverse expression expressions