1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
12import qualified Data.Map as Map
13import qualified Data.Name as Name
15import AST.Canonical (Type(..), AliasType(..), FieldType(..))
22delambda :: Type -> [Type]
36dealias :: [(Name.Name, Type)] -> AliasType -> Type
37dealias args aliasType =
40 dealiasHelp (Map.fromList args) tipe
46dealiasHelp :: Map.Map Name.Name Type -> Type -> Type
47dealiasHelp typeTable tipe =
51 (dealiasHelp typeTable a)
52 (dealiasHelp typeTable b)
55 Map.findWithDefault tipe x typeTable
58 TRecord (Map.map (dealiasField typeTable) fields) ext
60 TAlias home name args t' ->
61 TAlias home name (map (fmap (dealiasHelp typeTable)) args) t'
63 TType home name args ->
64 TType home name (map (dealiasHelp typeTable) args)
71 (dealiasHelp typeTable a)
72 (dealiasHelp typeTable b)
73 (fmap (dealiasHelp typeTable) maybeC)
76dealiasField :: Map.Map Name.Name Type -> FieldType -> FieldType
77dealiasField typeTable (FieldType index tipe) =
78 FieldType index (dealiasHelp typeTable tipe)
85deepDealias :: Type -> Type
89 TLambda (deepDealias a) (deepDealias b)
95 TRecord (Map.map deepDealiasField fields) ext
97 TAlias _ _ args tipe' ->
98 deepDealias (dealias args tipe')
100 TType home name args ->
101 TType home name (map deepDealias args)
107 TTuple (deepDealias a) (deepDealias b) (fmap deepDealias c)
110deepDealiasField :: FieldType -> FieldType
111deepDealiasField (FieldType index tipe) =
112 FieldType index (deepDealias tipe)
119iteratedDealias :: Type -> Type
120iteratedDealias tipe =
122 TAlias _ _ args realType ->
123 iteratedDealias (dealias args realType)
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