@@ -1,6 +1,6 @@
11{-# OPTIONS_GHC -Wall -fno-warn-unused-do-bind #-}
22{-# LANGUAGE OverloadedStrings #-}
3−module Parse.Expression (term, expression, definition, rootPattern) where
3+module Parse.Expression (term, expression, topLevelDef) where
44
55import Control.Monad (guard)
66import qualified Data.List as List
@@ -474,7 +474,7 @@ let_ start =
474474 spaces
475475 defIndent <- getCol
476476 setIndent defIndent
477− (def, end, space) <- definition
477+ (def, end, space) <- letDef
478478 letHelp start oldIndent [def] end space
479479
480480
@@ -482,7 +482,7 @@ letHelp :: R.Position -> Int -> [Src.RawDef] -> R.Position -> SPos -> ExprParser
482482letHelp start oldIndent revDefs end pos =
483483 oneOf
484484 [ do checkAligned pos
485− (def, newEnd, newPos) <- definition
485+ (def, newEnd, newPos) <- letDef
486486 letHelp start oldIndent (def:revDefs) newEnd newPos
487487
488488 , do setIndent oldIndent
@@ -500,10 +500,27 @@ letHelp start oldIndent revDefs end pos =
500500-- DEFINITIONS
501501
502502
503−definition :: SParser Src.RawDef
504−definition =
503+letDef :: SParser Src.RawDef
504+letDef =
505+ definition $ \_ -> Pattern.term
506+
507+
508+topLevelDef :: SParser Src.RawDef
509+topLevelDef =
510+ definition $ \start ->
511+ oneOf
512+ [ do op <- try (leftParen >> infixOp)
513+ rightParen
514+ end <- getPosition
515+ return (A.at start end (P.Var op))
516+ , Pattern.term
517+ ]
518+
519+
520+definition :: (R.Position -> Parser P.Raw) -> SParser Src.RawDef
521+definition parseRoot =
505522 do start <- getPosition
506− root <- rootPattern start
523+ root <- parseRoot start
507524 spaces
508525 case A.drop root of
509526 P.Var name ->
@@ -521,17 +538,6 @@ definition =
521538 definitionHelp start root []
522539
523540
524−rootPattern :: R.Position -> Parser P.Raw
525−rootPattern start =
526− oneOf
527− [ do op <- try (leftParen >> infixOp)
528− rightParen
529− end <- getPosition
530− return (A.at start end (P.Var op))
531− , Pattern.term
532− ]
533−
534−
535541definitionHelp :: R.Position -> P.Raw -> [P.Raw] -> SParser Src.RawDef
536542definitionHelp start root revArgs =
537543 oneOf