@@ -4,7 +4,7 @@ module Parse.Type (expression, unionConstructor) where
5import Data.Text (Text)
5import Data.Text (Text)
7−import qualified AST.Type as Type
7+import qualified AST.Source as Src
8import Parse.Primitives (Parser, SParser, addLocation, checkSpace, getPosition, hint, spaces, oneOf)
8import Parse.Primitives (Parser, SParser, addLocation, checkSpace, getPosition, hint, spaces, oneOf)
9import qualified Parse.Primitives as P
9import qualified Parse.Primitives as P
10import qualified Parse.Primitives.Symbol as Symbol
10import qualified Parse.Primitives.Symbol as Symbol
@@ -20,7 +20,7 @@ import qualified Reporting.Region as R
20-- TYPE TERMS
20-- TYPE TERMS
23−term :: Parser Type.Raw
23+term :: Parser Src.Type
25 hint E.Type $
25 hint E.Type $
26 do start <- getPosition
26 do start <- getPosition
@@ -36,18 +36,18 @@ term =
36-- TYPE VARIABLES
36-- TYPE VARIABLES
39−variable :: R.Position -> Parser Type.Raw
39+variable :: R.Position -> Parser Src.Type
40variable start =
40variable start =
41 do var <- Var.lower
41 do var <- Var.lower
42 end <- getPosition
42 end <- getPosition
43− return (A.at start end (Type.RVar var))
43+ return (A.at start end (Src.TVar var))
47-- TYPE EXPRESSIONS
47-- TYPE EXPRESSIONS
50−expression :: SParser Type.Raw
50+expression :: SParser Src.Type
51expression =
51expression =
52 hint E.Type $
52 hint E.Type $
53 do start <- getPosition
53 do start <- getPosition
@@ -61,7 +61,7 @@ expression =
61 Symbol.rightArrow
61 Symbol.rightArrow
63 (tipe2, end2, pos2) <- expression
63 (tipe2, end2, pos2) <- expression
64− let tipe = A.at start end2 (Type.RLambda tipe1 tipe2)
64+ let tipe = A.at start end2 (Src.TLambda tipe1 tipe2)
65 return ( tipe, end2, pos2 )
65 return ( tipe, end2, pos2 )
66 , return ( tipe1, end1, pos1 )
66 , return ( tipe1, end1, pos1 )
@@ -71,26 +71,26 @@ expression =
71-- TYPE CONSTRUCTORS
71-- TYPE CONSTRUCTORS
74−app0 :: Parser Type.Raw
74+app0 :: Parser Src.Type
76 do start <- getPosition
76 do start <- getPosition
77 (maybeQualifier, name) <- Var.foreignUpper
77 (maybeQualifier, name) <- Var.foreignUpper
78 end <- getPosition
78 end <- getPosition
79 return $ A.at start end $
79 return $ A.at start end $
80− Type.RType (R.Region start end) maybeQualifier name []
80+ Src.TType (R.Region start end) maybeQualifier name []
83−app :: R.Position -> SParser Type.Raw
83+app :: R.Position -> SParser Src.Type
84app start =
84app start =
85 do (maybeQualifier, name) <- Var.foreignUpper
85 do (maybeQualifier, name) <- Var.foreignUpper
86 nameEnd <- getPosition
86 nameEnd <- getPosition
87 namePos <- whitespace
87 namePos <- whitespace
88 (args, end, pos) <- eatArgs [] nameEnd namePos
88 (args, end, pos) <- eatArgs [] nameEnd namePos
89− let tipe = Type.RType (R.Region start nameEnd) maybeQualifier name args
89+ let tipe = Src.TType (R.Region start nameEnd) maybeQualifier name args
90 return ( A.at start end tipe, end, pos )
90 return ( A.at start end tipe, end, pos )
93−unionConstructor :: SParser (A.Located Text, [Type.Raw])
93+unionConstructor :: SParser (A.Located Text, [Src.Type])
94unionConstructor =
94unionConstructor =
95 do start <- getPosition
95 do start <- getPosition
96 name <- Var.upper
96 name <- Var.upper
@@ -100,7 +100,7 @@ unionConstructor =
100 return ( (A.at start nameEnd name, args), end, pos )
100 return ( (A.at start nameEnd name, args), end, pos )
103−eatArgs :: [Type.Raw] -> R.Position -> SPos -> SParser [Type.Raw]
103+eatArgs :: [Src.Type] -> R.Position -> SPos -> SParser [Src.Type]
104eatArgs args end pos =
104eatArgs args end pos =
106 [ do checkSpace pos
106 [ do checkSpace pos
@@ -116,14 +116,14 @@ eatArgs args end pos =
119−tuple :: R.Position -> Parser Type.Raw
119+tuple :: R.Position -> Parser Src.Type
120tuple start =
120tuple start =
121 do Symbol.leftParen
121 do Symbol.leftParen
122 P.inContext start E.TypeTuple $
122 P.inContext start E.TypeTuple $
124 [ do Symbol.rightParen
124 [ do Symbol.rightParen
125 end <- getPosition
125 end <- getPosition
126− return (A.at start end Type.RUnit)
126+ return (A.at start end Src.TUnit)
127 , do spaces
127 , do spaces
128 (tipe, _, pos) <- expression
128 (tipe, _, pos) <- expression
129 checkSpace pos
129 checkSpace pos
@@ -131,7 +131,7 @@ tuple start =
134−tupleEnding :: R.Position -> Type.Raw -> [Type.Raw] -> Parser Type.Raw
134+tupleEnding :: R.Position -> Src.Type -> [Src.Type] -> Parser Src.Type
135tupleEnding start firstType revTypes =
135tupleEnding start firstType revTypes =
137 [ do Symbol.comma
137 [ do Symbol.comma
@@ -147,7 +147,7 @@ tupleEnding start firstType revTypes =
148 secondType : otherTypes ->
148 secondType : otherTypes ->
149 return $ A.at start end $
149 return $ A.at start end $
150− Type.RTuple firstType secondType otherTypes
150+ Src.TTuple firstType secondType otherTypes
@@ -155,7 +155,7 @@ tupleEnding start firstType revTypes =
158−record :: R.Position -> Parser Type.Raw
158+record :: R.Position -> Parser Src.Type
159record start =
159record start =
160 do Symbol.leftCurly
160 do Symbol.leftCurly
161 P.inContext start E.TypeRecord $
161 P.inContext start E.TypeRecord $
@@ -163,7 +163,7 @@ record start =
164 [ do Symbol.rightCurly
164 [ do Symbol.rightCurly
165 end <- getPosition
165 end <- getPosition
166− return (A.at start end (Type.RRecord [] Nothing))
166+ return (A.at start end (Src.TRecord [] Nothing))
167 , do var <- addLocation Var.lower
167 , do var <- addLocation Var.lower
@@ -172,19 +172,19 @@ record start =
172 firstField <- field
172 firstField <- field
173 fields <- chompFields [firstField]
173 fields <- chompFields [firstField]
174 end <- getPosition
174 end <- getPosition
175− return (A.at start end (Type.RRecord fields (Just (A.map Type.RVar var))))
175+ return (A.at start end (Src.TRecord fields (Just (A.map Src.TVar var))))
176 , do Symbol.hasType
176 , do Symbol.hasType
178 (tipe, _, nextPos) <- expression
178 (tipe, _, nextPos) <- expression
179 checkSpace nextPos
179 checkSpace nextPos
180 fields <- chompFields [(var, tipe)]
180 fields <- chompFields [(var, tipe)]
181 end <- getPosition
181 end <- getPosition
182− return (A.at start end (Type.RRecord fields Nothing))
182+ return (A.at start end (Src.TRecord fields Nothing))
187−type Field = ( A.Located Text, Type.Raw )
187+type Field = ( A.Located Text, Src.Type )
190chompFields :: [Field] -> Parser [Field]
190chompFields :: [Field] -> Parser [Field]