@@ -8,13 +8,13 @@ import Control.Alt ((<|>))
8import Data.Argonaut.Core (Json, caseJsonObject, fromArray, fromObject, jsonEmptyObject, stringify, toArray)
8import Data.Argonaut.Core (Json, caseJsonObject, fromArray, fromObject, jsonEmptyObject, stringify, toArray)
9import Data.Argonaut.Decode (class DecodeJson, decodeJson, (.:))
9import Data.Argonaut.Decode (class DecodeJson, decodeJson, (.:))
10import Data.Argonaut.Encode (class EncodeJson, encodeJson)
10import Data.Argonaut.Encode (class EncodeJson, encodeJson)
11−import Data.Array ((!!))
11+import Data.Argonaut.Decode.Error (JsonDecodeError(..))
12import Data.Either (Either(..))
12import Data.Either (Either(..))
13import Data.Generic.Rep (class Generic)
13import Data.Generic.Rep (class Generic)
14import Data.Generic.Rep.Show (genericShow)
14import Data.Generic.Rep.Show (genericShow)
15import Data.List (List(..), (:))
15import Data.List (List(..), (:))
16import Data.List as List
16import Data.List as List
17−import Data.Maybe (Maybe(..), fromMaybe)
17+import Data.Maybe (Maybe(..))
18import Data.Newtype (class Newtype)
18import Data.Newtype (class Newtype)
19import Data.Tuple (Tuple(..))
19import Data.Tuple (Tuple(..))
20import Foreign.Object as Object
20import Foreign.Object as Object
@@ -42,11 +42,11 @@ instance encodeJsonQualifiedName :: EncodeJson QualifiedName where
42 encodeJson (QualifiedName { moduleNameParts, name }) =
42 encodeJson (QualifiedName { moduleNameParts, name }) =
43 encodeTuple moduleNameParts name
43 encodeTuple moduleNameParts name
45−mkJsonError :: String -> Json -> (forall i. i -> String)
45+mkJsonError :: String -> Json -> (forall i. i -> JsonDecodeError)
46mkJsonError name json _ =
46mkJsonError name json _ =
47− "Couldn't parse " <> name <> " from " <> stringify json
47+ TypeMismatch $ "Couldn't parse " <> name <> " from " <> stringify json
49−mkJsonError' :: String -> Json -> String
49+mkJsonError' :: String -> Json -> JsonDecodeError
50mkJsonError' name json = mkJsonError name json unit
50mkJsonError' name json = mkJsonError name json unit
52-- | The data type of kinds
52-- | The data type of kinds
@@ -294,17 +294,16 @@ decodeTuple
294 . DecodeJson fst
294 . DecodeJson fst
295 => DecodeJson sec
295 => DecodeJson sec
296 => (fst -> sec -> res)
296 => (fst -> sec -> res)
297− -> (forall a. a -> String)
297+ -> (forall a. a -> JsonDecodeError)
299− -> Either String res
299+ -> Either JsonDecodeError res
300decodeTuple cont err json =
300decodeTuple cont err json =
301− fromMaybe (Left $ err unit) $
302− toArray json >>= \jsons ->
301+ case toArray json of
303− jsons !! 0 >>= \json1 ->
302+ Just [ json1, json2 ] -> do
304− jsons !! 1 >>= \json2 -> pure $ do
305− fst <- decodeJson json1
303+ fst <- decodeJson json1
306− sec <- decodeJson json2
304+ sec <- decodeJson json2
307− pure $ cont fst sec
305+ pure $ cont fst sec
306+ _ -> Left $ err unit
309-- | Decode a heterogeneous triple.
308-- | Decode a heterogeneous triple.
310decodeTriple
309decodeTriple
@@ -313,9 +312,9 @@ decodeTriple
313 => DecodeJson sec
312 => DecodeJson sec
314 => DecodeJson trd
313 => DecodeJson trd
315 => (fst -> sec -> trd -> res)
314 => (fst -> sec -> trd -> res)
316− -> (forall a. a -> String)
315+ -> (forall a. a -> JsonDecodeError)
318− -> Either String res
317+ -> Either JsonDecodeError res
319decodeTriple cont err json =
318decodeTriple cont err json =
320 case toArray json of
319 case toArray json of
321 Just [ json1, json2, json3 ] -> do
320 Just [ json1, json2, json3 ] -> do
@@ -333,9 +332,9 @@ decodeQuadriple
333 => DecodeJson trd
332 => DecodeJson trd
334 => DecodeJson frt
333 => DecodeJson frt
335 => (fst -> sec -> trd -> frt -> res)
334 => (fst -> sec -> trd -> frt -> res)
336− -> (forall a. a -> String)
335+ -> (forall a. a -> JsonDecodeError)
338− -> Either String res
337+ -> Either JsonDecodeError res
339decodeQuadriple cont err json =
338decodeQuadriple cont err json =
340 case toArray json of
339 case toArray json of
341 Just [ json1, json2, json3, json4 ] -> do
340 Just [ json1, json2, json3, json4 ] -> do