@@ -15,19 +15,18 @@ module Elm.Compiler.Type
1515
1616
1717import qualified Data.Name as Name
18−import qualified Data.Text as Text
19−import qualified Data.Text.Encoding as Text
18+import qualified Data.Utf8 as Utf8
2019
2120import qualified AST.Source as Src
22−import qualified Parse.Primitives as Parse
21+import qualified Parse.Primitives as P
2322import qualified Parse.Type as Type
2423import qualified Reporting.Annotation as A
2524import qualified Reporting.Doc as D
2625import qualified Reporting.Render.Type as RT
2726import qualified Reporting.Render.Type.Localizer as L
2827
29−import qualified Json.Decode as Decode
30−import qualified Json.Encode as Encode
28+import qualified Json.Decode as D
29+import qualified Json.Encode as E
3130import Json.Encode ((==>))
3231
3332
@@ -113,20 +112,20 @@ collectLambdas tipe =
113112-- JSON for TYPE
114113
115114
116−encode :: Type -> Encode.Value
115+encode :: Type -> E.Value
117116encode tipe =
118− Encode.text $ Text.pack $ D.toLine (toDoc L.empty RT.None tipe)
117+ E.string $ Utf8.fromChars $ D.toLine (toDoc L.empty RT.None tipe)
119118
120119
121−decoder :: Decode.Decoder () Type
120+decoder :: D.Decoder () Type
122121decoder =
123− do txt <- Decode.text
124− case Parse.run Type.expression (Text.encodeUtf8 (Text.replace "'" "_" txt)) of
125− Left _ ->
126− Decode.fail ()
122+ do str <- D.string
123+ case P.fromByteString Type.expression (error "TODO turn Utf8 to something that can be parsed" str) of
124+ P.Ok (tipe, _, _) _ ->
125+ return (fromRawType tipe)
127126
128− Right (tipe, _, _) ->
129− Decode.succeed (fromRawType tipe)
127+ P.Err _ _ _ _ ->
128+ D.failure ()
130129
131130
132131fromRawType :: Src.Type -> Type
@@ -164,33 +163,33 @@ fromRawType (A.At _ astType) =
164163-- JSON for PROGRAM
165164
166165
167−encodeMetadata :: DebugMetadata -> Encode.Value
166+encodeMetadata :: DebugMetadata -> E.Value
168167encodeMetadata (DebugMetadata msg aliases unions) =
169− Encode.object
168+ E.object
170169 [ "message" ==> encode msg
171− , "aliases" ==> Encode.object (map toAliasField aliases)
172− , "unions" ==> Encode.object (map toUnionField unions)
170+ , "aliases" ==> E.object (map toAliasField aliases)
171+ , "unions" ==> E.object (map toUnionField unions)
173172 ]
174173
175174
176−toAliasField :: Alias -> ( Text.Text, Encode.Value )
175+toAliasField :: Alias -> ( Utf8.String, E.Value )
177176toAliasField (Alias name args tipe) =
178− Name.toText name ==>
179− Encode.object
180− [ "args" ==> Encode.list Encode.name args
177+ Name.toUtf8 name ==>
178+ E.object
179+ [ "args" ==> E.list E.name args
181180 , "type" ==> encode tipe
182181 ]
183182
184183
185−toUnionField :: Union -> ( Text.Text, Encode.Value )
184+toUnionField :: Union -> ( Utf8.String, E.Value )
186185toUnionField (Union name args constructors) =
187− Name.toText name ==>
188− Encode.object
189− [ "args" ==> Encode.list Encode.name args
190− , "tags" ==> Encode.object (map toCtorObject constructors)
186+ Name.toUtf8 name ==>
187+ E.object
188+ [ "args" ==> E.list E.name args
189+ , "tags" ==> E.object (map toCtorObject constructors)
191190 ]
192191
193192
194−toCtorObject :: (Name.Name, [Type]) -> ( Text.Text, Encode.Value )
193+toCtorObject :: (Name.Name, [Type]) -> ( Utf8.String, E.Value )
195194toCtorObject (name, args) =
196− Name.toText name ==> Encode.list encode args
195+ Name.toUtf8 name ==> E.list encode args