on master help sign in
Make "accessible" a bit more readable
commit545b8ab1de4a2c01c0bf9b55b381ff9747b77c2a authorEvan Czaplicki <info@elm-lang.org> dateMon 9 Feb 2015, 22:40 (12 years ago) parent4b30b6f
1 file changed+26−16
src/Parse/Helpers.hs+26−16
src/Parse/Helpers.hs+26−16
@@ -251,23 +251,33 @@ located p =
251251
252252
253253accessible :: IParser Source.Expr -> IParser Source.Expr
254−accessible expr =
254+accessible exprParser =
255255 do start <- getPosition
256− ce@(Annotation.A _ e) <- expr
257− let rest f = do
258− let dot = char '.' >> notFollowedBy (char '.')
259− access <- optionMaybe (try dot <?> "field access (e.g. List.map)")
260− case access of
261− Nothing -> return ce
262− Just _ -> accessible $ do
263− v <- var <?> "field access (e.g. List.map)"
264− end <- getPosition
265− return (Annotation.at start end (f v))
266− case e of
267− E.Var (Variable.Raw (c:cs))
268− | isUpper c -> rest (\v -> E.rawVar (c:cs ++ '.':v))
269− | otherwise -> rest (E.Access ce)
270− _ -> rest (E.Access ce)
256+
257+ annotatedRootExpr@(Annotation.A _ rootExpr) <- exprParser
258+
259+ access <- optionMaybe (try dot <?> "field access (e.g. List.map)")
260+
261+ case access of
262+ Nothing ->
263+ return annotatedRootExpr
264+
265+ Just _ ->
266+ accessible $
267+ do v <- var <?> "field access (e.g. List.map)"
268+ end <- getPosition
269+ return . Annotation.at start end $
270+ case rootExpr of
271+ E.Var (Variable.Raw name@(c:_))
272+ | isUpper c ->
273+ E.rawVar (name ++ '.' : v)
274+ _ ->
275+ E.Access annotatedRootExpr v
276+
277+
278+dot :: IParser ()
279+dot =
280+ char '.' >> notFollowedBy (char '.')
271281
272282
273283-- WHITESPACE