@@ -1,16 +1,22 @@
1+{-# OPTIONS_GHC -Wall #-}
2+{-# LANGUAGE OverloadedStrings #-}
13module Type.Error
24 ( Type(..)
35 , Extension(..)
46 , iteratedDealias
57 , Localizer
8+ , toDoc
69 )
710 where
811
912
1013import qualified Data.Map as Map
14+import qualified Data.Maybe as Maybe
1115
1216import qualified AST.Module.Name as ModuleName
1317import qualified Elm.Name as N
18+import qualified Reporting.Helpers as H
19+import qualified Reporting.Render.Type as RT
1420
1521
1622
@@ -49,12 +55,78 @@ iteratedDealias tipe =
4955
5056
5157
52−-- LOCALIZE
58+-- TO DOC
5359
5460
55−type Localizer = Map.Map N.Name ()
61+type Localizer = Map.Map (ModuleName.Canonical, N.Name) (Maybe N.Name)
5662
5763
64+toDoc :: Localizer -> RT.Context -> Type -> H.Doc
65+toDoc localizer context tipe =
66+ case tipe of
67+ Lambda a b cs ->
68+ RT.lambda context
69+ (toDoc localizer RT.Func a)
70+ (toDoc localizer RT.Func b)
71+ (map (toDoc localizer RT.Func) cs)
72+
73+ Infinite ->
74+ "∞"
75+
76+ Error ->
77+ "?"
78+
79+ FlexVar name ->
80+ H.nameToDoc name
81+
82+ FlexSuper name ->
83+ H.nameToDoc name
84+
85+ RigidVar name ->
86+ H.nameToDoc name
87+
88+ RigidSuper name ->
89+ H.nameToDoc name
90+
91+ Type home name args ->
92+ RT.apply context
93+ (toLocal localizer home name)
94+ (map (toDoc localizer RT.App) args)
95+
96+ Record fields ext ->
97+ let
98+ entryToDocs (fieldName, fieldType) =
99+ ( H.nameToDoc fieldName, toDoc localizer RT.None fieldType )
100+
101+ fieldDocs =
102+ map entryToDocs (Map.toList fields)
103+ in
104+ RT.record fieldDocs $
105+ case ext of
106+ Closed -> Nothing
107+ FlexOpen x -> Just (H.nameToDoc x)
108+ RigidOpen x -> Just (H.nameToDoc x)
109+
110+
111+ Unit ->
112+ "()"
113+
114+ Tuple a b maybeC ->
115+ RT.tuple
116+ (toDoc localizer RT.None a)
117+ (toDoc localizer RT.None b)
118+ (map (toDoc localizer RT.None) (Maybe.maybeToList maybeC))
119+
120+ Alias home name args _ ->
121+ RT.apply context
122+ (toLocal localizer home name)
123+ (map (toDoc localizer RT.App . snd) args)
124+
125+
126+toLocal :: Localizer -> ModuleName.Canonical -> N.Name -> H.Doc
127+toLocal localizer home name =
128+ error "TODO toLocal" localizer home name
129+
58130
59131
60132{-- DIFF