@@ -1,6 +1,6 @@
1{-# OPTIONS_GHC -Wall -fno-warn-unused-do-bind #-}
1{-# OPTIONS_GHC -Wall -fno-warn-unused-do-bind #-}
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3−module Parse.Expression (term, expression, definition, rootPattern) where
3+module Parse.Expression (term, expression, topLevelDef) where
5import Control.Monad (guard)
5import Control.Monad (guard)
6import qualified Data.List as List
6import qualified Data.List as List
@@ -474,7 +474,7 @@ let_ start =
475 defIndent <- getCol
475 defIndent <- getCol
476 setIndent defIndent
476 setIndent defIndent
477− (def, end, space) <- definition
477+ (def, end, space) <- letDef
478 letHelp start oldIndent [def] end space
478 letHelp start oldIndent [def] end space
@@ -482,7 +482,7 @@ letHelp :: R.Position -> Int -> [Src.RawDef] -> R.Position -> SPos -> ExprParser
482letHelp start oldIndent revDefs end pos =
482letHelp start oldIndent revDefs end pos =
484 [ do checkAligned pos
484 [ do checkAligned pos
485− (def, newEnd, newPos) <- definition
485+ (def, newEnd, newPos) <- letDef
486 letHelp start oldIndent (def:revDefs) newEnd newPos
486 letHelp start oldIndent (def:revDefs) newEnd newPos
488 , do setIndent oldIndent
488 , do setIndent oldIndent
@@ -500,10 +500,27 @@ letHelp start oldIndent revDefs end pos =
500-- DEFINITIONS
500-- DEFINITIONS
503+letDef :: SParser Src.RawDef
505+ definition $ \_ -> Pattern.term
503−definition :: SParser Src.RawDef
508+topLevelDef :: SParser Src.RawDef
504−definition =
510+ definition $ \start ->
512+ [ do op <- try (leftParen >> infixOp)
515+ return (A.at start end (P.Var op))
520+definition :: (R.Position -> Parser P.Raw) -> SParser Src.RawDef
521+definition parseRoot =
505 do start <- getPosition
522 do start <- getPosition
506− root <- rootPattern start
523+ root <- parseRoot start
508 case A.drop root of
525 case A.drop root of
509 P.Var name ->
526 P.Var name ->
@@ -521,17 +538,6 @@ definition =
521 definitionHelp start root []
538 definitionHelp start root []
524−rootPattern :: R.Position -> Parser P.Raw
527− [ do op <- try (leftParen >> infixOp)
530− return (A.at start end (P.Var op))
535definitionHelp :: R.Position -> P.Raw -> [P.Raw] -> SParser Src.RawDef
541definitionHelp :: R.Position -> P.Raw -> [P.Raw] -> SParser Src.RawDef
536definitionHelp start root revArgs =
542definitionHelp start root revArgs =