1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
5 , Canonical(..), Aliased(..)
6 , deepDealias, iteratedDealias, dealias
12import Control.Arrow (second)
14import qualified Data.Map as Map
15import qualified Data.Text as Text
16import Data.Text (Text)
18import qualified AST.Module.Name as ModuleName
19import qualified AST.Variable as Var
20import qualified Reporting.Annotation as A
21import qualified Reporting.Region as R
37 | RRecord [(A.Located Text, Raw)] (Maybe Raw)
41 = Lambda Canonical Canonical
44 | App Canonical [Canonical]
45 | Record [(Text, Canonical)] (Maybe Canonical)
46 | Aliased Var.Canonical [(Text, Canonical)] (Aliased Canonical)
57-- CONSTRUCT USEFUL TYPES
60tuple :: R.Region -> [Raw] -> Raw
64 Var.Raw (Text.append "_Tuple" (Text.pack (show (length types))))
66 A.A region (RApp (A.A region (RType name)) types)
69cmd :: ModuleName.Canonical -> Text -> Canonical
74sub :: ModuleName.Canonical -> Text -> Canonical
79effect :: Var.Canonical -> ModuleName.Canonical -> Text -> Canonical
80effect effectName moduleName tipe =
82 (App (Type (Var.fromModule moduleName tipe)) [Var "msg"])
83 (App (Type effectName) [Var "msg"])
90deepDealias :: Canonical -> Canonical
94 Lambda (deepDealias a) (deepDealias b)
100 Record (map (second deepDealias) fields) (fmap deepDealias ext)
102 Aliased _name args tipe' ->
103 deepDealias (dealias args tipe')
109 App (deepDealias f) (map deepDealias args)
112iteratedDealias :: Canonical -> Canonical
113iteratedDealias tipe =
115 Aliased _ args realType ->
116 iteratedDealias (dealias args realType)
122dealias :: [(Text, Canonical)] -> Aliased Canonical -> Canonical
123dealias args aliasType =
126 dealiasHelp (Map.fromList args) tipe
132dealiasHelp :: Map.Map Text Canonical -> Canonical -> Canonical
133dealiasHelp typeTable tipe =
136 dealiasHelp typeTable
143 Map.findWithDefault tipe x typeTable
146 Record (map (second go) fields) (fmap go ext)
148 Aliased original args t' ->
149 Aliased original (map (second go) args) t'
155 App (go f) (map go args)
162collectLambdas :: Canonical -> [Canonical]
166 arg : collectLambdas result
176instance Binary Canonical where
180 putWord8 0 >> put t1 >> put t2
186 putWord8 2 >> put name
189 putWord8 3 >> put t1 >> put t2
192 putWord8 4 >> put fs >> put ext
194 Aliased var args t ->
195 putWord8 5 >> put var >> put args >> put t
200 0 -> Lambda <$> get <*> get
203 3 -> App <$> get <*> get
204 4 -> Record <$> get <*> get
205 5 -> Aliased <$> get <*> get <*> get
206 _ -> error "Error reading a valid type from serialized string"
209instance Binary t => Binary (Aliased t) where
213 putWord8 0 >> put tipe
216 putWord8 1 >> put tipe
223 _ -> 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