3 , Canonical(..), Aliased(..)
4 , deepDealias, iteratedDealias, dealias
10import Control.Arrow (second)
12import qualified Data.Map as Map
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)
37 = Lambda Canonical Canonical
40 | App Canonical [Canonical]
41 | Record [(String, Canonical)] (Maybe Canonical)
42 | Aliased Var.Canonical [(String, Canonical)] (Aliased Canonical)
53-- CONSTRUCT USEFUL TYPES
56tuple :: R.Region -> [Raw] -> Raw
60 Var.Raw ("_Tuple" ++ show (length types))
62 A.A region (RApp (A.A region (RType name)) types)
65cmd :: ModuleName.Canonical -> String -> Canonical
70sub :: ModuleName.Canonical -> String -> Canonical
75effect :: Var.Canonical -> ModuleName.Canonical -> String -> Canonical
76effect effectName moduleName tipe =
78 (App (Type (Var.fromModule moduleName tipe)) [Var "msg"])
79 (App (Type effectName) [Var "msg"])
86deepDealias :: Canonical -> Canonical
90 Lambda (deepDealias a) (deepDealias b)
96 Record (map (second deepDealias) fields) (fmap deepDealias ext)
98 Aliased _name args tipe' ->
99 deepDealias (dealias args tipe')
105 App (deepDealias f) (map deepDealias args)
108iteratedDealias :: Canonical -> Canonical
109iteratedDealias tipe =
111 Aliased _ args realType ->
112 iteratedDealias (dealias args realType)
118dealias :: [(String, Canonical)] -> Aliased Canonical -> Canonical
119dealias args aliasType =
122 dealiasHelp (Map.fromList args) tipe
128dealiasHelp :: Map.Map String Canonical -> Canonical -> Canonical
129dealiasHelp typeTable tipe =
132 dealiasHelp typeTable
139 Map.findWithDefault tipe x typeTable
142 Record (map (second go) fields) (fmap go ext)
144 Aliased original args t' ->
145 Aliased original (map (second go) args) t'
151 App (go f) (map go args)
158collectLambdas :: Canonical -> [Canonical]
162 arg : collectLambdas result
172instance Binary Canonical where
176 putWord8 0 >> put t1 >> put t2
182 putWord8 2 >> put name
185 putWord8 3 >> put t1 >> put t2
188 putWord8 4 >> put fs >> put ext
190 Aliased var args t ->
191 putWord8 5 >> put var >> put args >> put t
196 0 -> Lambda <$> get <*> get
199 3 -> App <$> get <*> get
200 4 -> Record <$> get <*> get
201 5 -> Aliased <$> get <*> get <*> get
202 _ -> error "Error reading a valid type from serialized string"
205instance Binary t => Binary (Aliased t) where
209 putWord8 0 >> put tipe
212 putWord8 1 >> put tipe
219 _ -> 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