@@ -15,19 +15,18 @@ module Elm.Compiler.Type
17import qualified Data.Name as Name
17import qualified Data.Name as Name
18−import qualified Data.Text as Text
18+import qualified Data.Utf8 as Utf8
19−import qualified Data.Text.Encoding as Text
21import qualified AST.Source as Src
20import qualified AST.Source as Src
22−import qualified Parse.Primitives as Parse
21+import qualified Parse.Primitives as P
23import qualified Parse.Type as Type
22import qualified Parse.Type as Type
24import qualified Reporting.Annotation as A
23import qualified Reporting.Annotation as A
25import qualified Reporting.Doc as D
24import qualified Reporting.Doc as D
26import qualified Reporting.Render.Type as RT
25import qualified Reporting.Render.Type as RT
27import qualified Reporting.Render.Type.Localizer as L
26import qualified Reporting.Render.Type.Localizer as L
29−import qualified Json.Decode as Decode
28+import qualified Json.Decode as D
30−import qualified Json.Encode as Encode
29+import qualified Json.Encode as E
31import Json.Encode ((==>))
30import Json.Encode ((==>))
@@ -113,20 +112,20 @@ collectLambdas tipe =
113-- JSON for TYPE
112-- JSON for TYPE
116−encode :: Type -> Encode.Value
115+encode :: Type -> E.Value
117encode tipe =
116encode 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)
121−decoder :: Decode.Decoder () Type
120+decoder :: D.Decoder () Type
123− do txt <- Decode.text
122+ do str <- D.string
124− case Parse.run Type.expression (Text.encodeUtf8 (Text.replace "'" "_" txt)) of
123+ case P.fromByteString Type.expression (error "TODO turn Utf8 to something that can be parsed" str) of
125− Left _ ->
124+ P.Ok (tipe, _, _) _ ->
126− Decode.fail ()
125+ return (fromRawType tipe)
128− Right (tipe, _, _) ->
127+ P.Err _ _ _ _ ->
129− Decode.succeed (fromRawType tipe)
128+ D.failure ()
132fromRawType :: Src.Type -> Type
131fromRawType :: Src.Type -> Type
@@ -164,33 +163,33 @@ fromRawType (A.At _ astType) =
164-- JSON for PROGRAM
163-- JSON for PROGRAM
167−encodeMetadata :: DebugMetadata -> Encode.Value
166+encodeMetadata :: DebugMetadata -> E.Value
168encodeMetadata (DebugMetadata msg aliases unions) =
167encodeMetadata (DebugMetadata msg aliases unions) =
169− Encode.object
168+ E.object
170 [ "message" ==> encode msg
169 [ "message" ==> encode msg
171− , "aliases" ==> Encode.object (map toAliasField aliases)
170+ , "aliases" ==> E.object (map toAliasField aliases)
172− , "unions" ==> Encode.object (map toUnionField unions)
171+ , "unions" ==> E.object (map toUnionField unions)
176−toAliasField :: Alias -> ( Text.Text, Encode.Value )
175+toAliasField :: Alias -> ( Utf8.String, E.Value )
177toAliasField (Alias name args tipe) =
176toAliasField (Alias name args tipe) =
178− Name.toText name ==>
177+ Name.toUtf8 name ==>
179− Encode.object
178+ E.object
180− [ "args" ==> Encode.list Encode.name args
179+ [ "args" ==> E.list E.name args
181 , "type" ==> encode tipe
180 , "type" ==> encode tipe
185−toUnionField :: Union -> ( Text.Text, Encode.Value )
184+toUnionField :: Union -> ( Utf8.String, E.Value )
186toUnionField (Union name args constructors) =
185toUnionField (Union name args constructors) =
187− Name.toText name ==>
186+ Name.toUtf8 name ==>
188− Encode.object
187+ E.object
189− [ "args" ==> Encode.list Encode.name args
188+ [ "args" ==> E.list E.name args
190− , "tags" ==> Encode.object (map toCtorObject constructors)
189+ , "tags" ==> E.object (map toCtorObject constructors)
194−toCtorObject :: (Name.Name, [Type]) -> ( Text.Text, Encode.Value )
193+toCtorObject :: (Name.Name, [Type]) -> ( Utf8.String, E.Value )
195toCtorObject (name, args) =
194toCtorObject (name, args) =
196− Name.toText name ==> Encode.list encode args
195+ Name.toUtf8 name ==> E.list encode args