3 , Canonical(..), Aliased(..)
4 , deepDealias, iteratedDealias, dealias
9import Control.Arrow (second)
11import qualified Data.Map as Map
12import qualified Data.Set as Set
14import qualified AST.Module.Name as ModuleName
15import qualified AST.Variable as Var
16import qualified Reporting.Annotation as A
17import qualified Reporting.Region as R
33 | RRecord [(String, Raw)] (Maybe Raw)
34 | REffects [A.Located ModuleName.Raw]
38 = Lambda Canonical Canonical
41 | App Canonical [Canonical]
42 | Record [(String, Canonical)] (Maybe Canonical)
43 | Effects (Set.Set ModuleName.Canonical)
44 | Aliased Var.Canonical [(String, Canonical)] (Aliased Canonical)
54tuple :: R.Region -> [Raw] -> Raw
58 Var.Raw ("_Tuple" ++ show (length types))
60 A.A region (RApp (A.A region (RType name)) types)
67deepDealias :: Canonical -> Canonical
71 Lambda (deepDealias a) (deepDealias b)
77 Record (map (second deepDealias) fields) (fmap deepDealias ext)
79 Aliased _name args tipe' ->
80 deepDealias (dealias args tipe')
86 App (deepDealias f) (map deepDealias args)
92iteratedDealias :: Canonical -> Canonical
95 Aliased _ args realType ->
96 iteratedDealias (dealias args realType)
102dealias :: [(String, Canonical)] -> Aliased Canonical -> Canonical
103dealias args aliasType =
106 dealiasHelp (Map.fromList args) tipe
112dealiasHelp :: Map.Map String Canonical -> Canonical -> Canonical
113dealiasHelp typeTable tipe =
116 dealiasHelp typeTable
123 Map.findWithDefault tipe x typeTable
126 Record (map (second go) fields) (fmap go ext)
128 Aliased original args t' ->
129 Aliased original (map (second go) args) t'
135 App (go f) (map go args)
145collectLambdas :: Canonical -> [Canonical]
149 arg : collectLambdas result
159instance Binary Canonical where
163 putWord8 0 >> put t1 >> put t2
169 putWord8 2 >> put name
172 putWord8 3 >> put t1 >> put t2
175 putWord8 4 >> put fs >> put ext
178 putWord8 5 >> put names
180 Aliased var args t ->
181 putWord8 6 >> put var >> put args >> put t
186 0 -> Lambda <$> get <*> get
189 3 -> App <$> get <*> get
190 4 -> Record <$> get <*> get
192 6 -> Aliased <$> get <*> get <*> get
193 _ -> error "Error reading a valid type from serialized string"
196instance Binary t => Binary (Aliased t) where
200 putWord8 0 >> put tipe
203 putWord8 1 >> put tipe
210 _ -> error "Error reading a valid type from serialized string"
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list