on master help sign in
Move Super type into AST.Types
a0fccd5Evan Czaplicki
src/AST/Type.hs+9
@@ -3,6 +3,7 @@
3module AST.Type
3module AST.Type
4 ( Raw, Raw'(..)
4 ( Raw, Raw'(..)
5 , Canonical(..), Aliased(..)
5 , Canonical(..), Aliased(..)
6+ , Super(..)
6 , deepDealias, iteratedDealias, dealias
7 , deepDealias, iteratedDealias, dealias
7 , collectLambdas
8 , collectLambdas
8 , tuple, cmd, sub
9 , tuple, cmd, sub
@@ -52,6 +53,14 @@ data Aliased t
52 deriving (Eq, Ord)
53 deriving (Eq, Ord)
53
54
54
55
56+data Super
57+ = Number
58+ | Comparable
59+ | Appendable
60+ | CompAppend
61+ deriving (Eq)
62+
63+
55
64
56-- CONSTRUCT USEFUL TYPES
65-- CONSTRUCT USEFUL TYPES
57
66
src/Type/Type.hs+16−21
@@ -7,7 +7,6 @@ module Type.Type
7 , Descriptor(Descriptor)
7 , Descriptor(Descriptor)
8 , Content(..)
8 , Content(..)
9 , Flex(..)
9 , Flex(..)
10− , Super(..)
11 , noRank
10 , noRank
12 , outermostRank
11 , outermostRank
13 , Mark
12 , Mark
@@ -76,7 +75,7 @@ data Descriptor =
76
75
77data Content
76data Content
78 = Structure FlatType
77 = Structure FlatType
79− | Var Flex (Maybe Super) (Maybe Text)
78+ | Var Flex (Maybe T.Super) (Maybe Text)
80 | Alias Var.Canonical [(Text,Variable)] Variable
79 | Alias Var.Canonical [(Text,Variable)] Variable
81 | Error Text
80 | Error Text
82
81
@@ -91,12 +90,8 @@ data Flex
91 | Flex
90 | Flex
92
91
93
92
94−data Super
93+
95− = Number
94+-- RANKS
96− | Comparable
97− | Appendable
98− | CompAppend
99− deriving (Eq)
100
95
101
96
102noRank :: Int
97noRank :: Int
@@ -207,10 +202,10 @@ mkFlexNumber =
207{-# NOINLINE flexNumberDescriptor #-}
202{-# NOINLINE flexNumberDescriptor #-}
208flexNumberDescriptor :: Descriptor
203flexNumberDescriptor :: Descriptor
209flexNumberDescriptor =
204flexNumberDescriptor =
210− makeDescriptor (unnamedFlexSuper Number)
205+ makeDescriptor (unnamedFlexSuper T.Number)
211
206
212
207
213−unnamedFlexSuper :: Super -> Content
208+unnamedFlexSuper :: T.Super -> Content
214unnamedFlexSuper super =
209unnamedFlexSuper super =
215 Var Flex (Just super) Nothing
210 Var Flex (Just super) Nothing
216
211
@@ -224,19 +219,19 @@ mkNamedVar flex name =
224 UF.fresh $ makeDescriptor $ Var flex (toSuper name) (Just name)
219 UF.fresh $ makeDescriptor $ Var flex (toSuper name) (Just name)
225
220
226
221
227−toSuper :: Text -> Maybe Super
222+toSuper :: Text -> Maybe T.Super
228toSuper name =
223toSuper name =
229 if Text.isPrefixOf "number" name then
224 if Text.isPrefixOf "number" name then
230− Just Number
225+ Just T.Number
231
226
232 else if Text.isPrefixOf "comparable" name then
227 else if Text.isPrefixOf "comparable" name then
233− Just Comparable
228+ Just T.Comparable
234
229
235 else if Text.isPrefixOf "appendable" name then
230 else if Text.isPrefixOf "appendable" name then
236− Just Appendable
231+ Just T.Appendable
237
232
238 else if Text.isPrefixOf "compappend" name then
233 else if Text.isPrefixOf "compappend" name then
239− Just CompAppend
234+ Just T.CompAppend
240
235
241 else
236 else
242 Nothing
237 Nothing
@@ -345,7 +340,7 @@ makeNameState taken =
345 NameState taken 0 0 0 0 0
340 NameState taken 0 0 0 0 0
346
341
347
342
348−getFreshName :: (Monad m) => Maybe Super -> StateT NameState m Text
343+getFreshName :: (Monad m) => Maybe T.Super -> StateT NameState m Text
349getFreshName maybeSuper =
344getFreshName maybeSuper =
350 case maybeSuper of
345 case maybeSuper of
351 Nothing ->
346 Nothing ->
@@ -355,16 +350,16 @@ getFreshName maybeSuper =
355 State.modify (\state -> state { _normals = newIndex })
350 State.modify (\state -> state { _normals = newIndex })
356 return uniqueName
351 return uniqueName
357
352
358− Just Number ->
353+ Just T.Number ->
359 getFreshSuper "number" _numbers (\index state -> state { _numbers = index })
354 getFreshSuper "number" _numbers (\index state -> state { _numbers = index })
360
355
361− Just Comparable ->
356+ Just T.Comparable ->
362 getFreshSuper "comparable" _comparables (\index state -> state { _comparables = index })
357 getFreshSuper "comparable" _comparables (\index state -> state { _comparables = index })
363
358
364− Just Appendable ->
359+ Just T.Appendable ->
365 getFreshSuper "appendable" _appendables (\index state -> state { _appendables = index })
360 getFreshSuper "appendable" _appendables (\index state -> state { _appendables = index })
366
361
367− Just CompAppend ->
362+ Just T.CompAppend ->
368 getFreshSuper "compappend" _compAppends (\index state -> state { _compAppends = index })
363 getFreshSuper "compappend" _compAppends (\index state -> state { _compAppends = index })
369
364
370
365
@@ -458,7 +453,7 @@ getVarNames var =
458 getVarNames extension
453 getVarNames extension
459
454
460
455
461−addVarName :: Int -> Text -> Variable -> Flex -> Maybe Super -> TakenNames -> IO TakenNames
456+addVarName :: Int -> Text -> Variable -> Flex -> Maybe T.Super -> TakenNames -> IO TakenNames
462addVarName index givenName var flex maybeSuper taken =
457addVarName index givenName var flex maybeSuper taken =
463 let
458 let
464 name =
459 name =
src/Type/Unify.hs+1
@@ -8,6 +8,7 @@ import qualified Data.Map as Map
8import qualified Data.Maybe as Maybe
8import qualified Data.Maybe as Maybe
9import Data.Text (Text)
9import Data.Text (Text)
10
10
11+import AST.Type (Super(..))
11import qualified AST.Variable as Var
12import qualified AST.Variable as Var
12import qualified Reporting.Region as R
13import qualified Reporting.Region as R
13import qualified Reporting.Error.Type as Error
14import qualified Reporting.Error.Type as Error