@@ -8,13 +8,13 @@ import Control.Alt ((<|>))
88import Data.Argonaut.Core (Json, caseJsonObject, fromArray, fromObject, jsonEmptyObject, stringify, toArray)
99import Data.Argonaut.Decode (class DecodeJson, decodeJson, (.:))
1010import Data.Argonaut.Encode (class EncodeJson, encodeJson)
11−import Data.Array ((!!))
11+import Data.Argonaut.Decode.Error (JsonDecodeError(..))
1212import Data.Either (Either(..))
1313import Data.Generic.Rep (class Generic)
1414import Data.Generic.Rep.Show (genericShow)
1515import Data.List (List(..), (:))
1616import Data.List as List
17−import Data.Maybe (Maybe(..), fromMaybe)
17+import Data.Maybe (Maybe(..))
1818import Data.Newtype (class Newtype)
1919import Data.Tuple (Tuple(..))
2020import Foreign.Object as Object
@@ -42,11 +42,11 @@ instance encodeJsonQualifiedName :: EncodeJson QualifiedName where
4242 encodeJson (QualifiedName { moduleNameParts, name }) =
4343 encodeTuple moduleNameParts name
4444
45−mkJsonError :: String -> Json -> (forall i. i -> String)
45+mkJsonError :: String -> Json -> (forall i. i -> JsonDecodeError)
4646mkJsonError name json _ =
47− "Couldn't parse " <> name <> " from " <> stringify json
47+ TypeMismatch $ "Couldn't parse " <> name <> " from " <> stringify json
4848
49−mkJsonError' :: String -> Json -> String
49+mkJsonError' :: String -> Json -> JsonDecodeError
5050mkJsonError' name json = mkJsonError name json unit
5151
5252-- | The data type of kinds
@@ -294,17 +294,16 @@ decodeTuple
294294 . DecodeJson fst
295295 => DecodeJson sec
296296 => (fst -> sec -> res)
297− -> (forall a. a -> String)
297+ -> (forall a. a -> JsonDecodeError)
298298 -> Json
299− -> Either String res
299+ -> Either JsonDecodeError res
300300decodeTuple cont err json =
301− fromMaybe (Left $ err unit) $
302− toArray json >>= \jsons ->
303− jsons !! 0 >>= \json1 ->
304− jsons !! 1 >>= \json2 -> pure $ do
305− fst <- decodeJson json1
306− sec <- decodeJson json2
307− pure $ cont fst sec
301+ case toArray json of
302+ Just [ json1, json2 ] -> do
303+ fst <- decodeJson json1
304+ sec <- decodeJson json2
305+ pure $ cont fst sec
306+ _ -> Left $ err unit
308307
309308-- | Decode a heterogeneous triple.
310309decodeTriple
@@ -313,9 +312,9 @@ decodeTriple
313312 => DecodeJson sec
314313 => DecodeJson trd
315314 => (fst -> sec -> trd -> res)
316− -> (forall a. a -> String)
315+ -> (forall a. a -> JsonDecodeError)
317316 -> Json
318− -> Either String res
317+ -> Either JsonDecodeError res
319318decodeTriple cont err json =
320319 case toArray json of
321320 Just [ json1, json2, json3 ] -> do
@@ -333,9 +332,9 @@ decodeQuadriple
333332 => DecodeJson trd
334333 => DecodeJson frt
335334 => (fst -> sec -> trd -> frt -> res)
336− -> (forall a. a -> String)
335+ -> (forall a. a -> JsonDecodeError)
337336 -> Json
338− -> Either String res
337+ -> Either JsonDecodeError res
339338decodeQuadriple cont err json =
340339 case toArray json of
341340 Just [ json1, json2, json3, json4 ] -> do