1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
5 , Canonical(..), Aliased(..)
6 , deepDealias, iteratedDealias, dealias
12import Control.Arrow (second)
13import Control.Monad (liftM, liftM2, liftM3)
15import qualified Data.Map as Map
16import Data.Text (Text)
18import qualified AST.Helpers as Help
19import qualified AST.Module.Name as ModuleName
20import qualified AST.Variable as Var
21import qualified Reporting.Annotation as A
22import qualified Reporting.Region as R
38 | RRecord [(A.Located Text, Raw)] (Maybe Raw)
42 = Lambda Canonical Canonical
45 | App Canonical [Canonical]
46 | Record [(Text, Canonical)] (Maybe Canonical)
47 | Aliased Var.Canonical [(Text, Canonical)] (Aliased Canonical)
58-- CONSTRUCT USEFUL TYPES
61tuple :: R.Region -> [Raw] -> Raw
65 Var.Raw (Help.makeTuple (length types))
67 A.A region (RApp (A.A region (RType name)) types)
70cmd :: ModuleName.Canonical -> Text -> Canonical
75sub :: ModuleName.Canonical -> Text -> Canonical
80effect :: Var.Canonical -> ModuleName.Canonical -> Text -> Canonical
81effect effectName moduleName tipe =
83 (App (Type (Var.fromModule moduleName tipe)) [Var "msg"])
84 (App (Type effectName) [Var "msg"])
91deepDealias :: Canonical -> Canonical
95 Lambda (deepDealias a) (deepDealias b)
101 Record (map (second deepDealias) fields) (fmap deepDealias ext)
103 Aliased _name args tipe' ->
104 deepDealias (dealias args tipe')
110 App (deepDealias f) (map deepDealias args)
113iteratedDealias :: Canonical -> Canonical
114iteratedDealias tipe =
116 Aliased _ args realType ->
117 iteratedDealias (dealias args realType)
123dealias :: [(Text, Canonical)] -> Aliased Canonical -> Canonical
124dealias args aliasType =
127 dealiasHelp (Map.fromList args) tipe
133dealiasHelp :: Map.Map Text Canonical -> Canonical -> Canonical
134dealiasHelp typeTable tipe =
137 dealiasHelp typeTable
144 Map.findWithDefault tipe x typeTable
147 Record (map (second go) fields) (fmap go ext)
149 Aliased original args t' ->
150 Aliased original (map (second go) args) t'
156 App (go f) (map go args)
163collectLambdas :: Canonical -> [Canonical]
167 arg : collectLambdas result
177instance Binary Canonical where
181 putWord8 0 >> put t1 >> put t2
187 putWord8 2 >> put name
190 putWord8 3 >> put t1 >> put t2
193 putWord8 4 >> put fs >> put ext
195 Aliased var args t ->
196 putWord8 5 >> put var >> put args >> put t
201 0 -> liftM2 Lambda get get
204 3 -> liftM2 App get get
205 4 -> liftM2 Record get get
206 5 -> liftM3 Aliased get get get
207 _ -> error "Error reading a valid type from serialized string"
210instance Binary t => Binary (Aliased t) where
214 putWord8 0 >> put tipe
217 putWord8 1 >> put tipe
223 1 -> liftM Filled get
224 _ -> 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