@@ -2,6 +2,7 @@ module Data.Argonaut.Decode.Class where
2
2
3
3
import Prelude
4
4
5
+ import Control.Apply (lift2 )
5
6
import Data.Argonaut.Core (Json , isNull , caseJsonNull , caseJsonBoolean , caseJsonNumber , caseJsonString , toArray , toObject , toString , stringify )
6
7
import Data.Array as Arr
7
8
import Data.Array.NonEmpty (NonEmptyArray )
@@ -10,7 +11,7 @@ import Data.Bifunctor (lmap, rmap)
10
11
import Data.Either (Either (..), note )
11
12
import Data.Identity (Identity (..))
12
13
import Data.Int (fromNumber )
13
- import Data.List (List (..), (:) , fromFoldable )
14
+ import Data.List (List , fromFoldable )
14
15
import Data.List as L
15
16
import Data.List.NonEmpty (NonEmptyList )
16
17
import Data.List.NonEmpty as NEL
@@ -41,10 +42,11 @@ instance decodeJsonMaybe :: DecodeJson a => DecodeJson (Maybe a) where
41
42
| otherwise = Just <$> decodeJson j
42
43
43
44
instance decodeJsonTuple :: (DecodeJson a , DecodeJson b ) => DecodeJson (Tuple a b ) where
44
- decodeJson j = decodeJson j >>= f
45
- where
46
- f (a : b : Nil ) = Tuple <$> decodeJson a <*> decodeJson b
47
- f _ = Left " Couldn't decode Tuple"
45
+ decodeJson j = do
46
+ decoded <- decodeJson j
47
+ case decoded of
48
+ [a, b] -> lift2 Tuple (decodeJson a) (decodeJson b)
49
+ _ -> Left " Couldn't decode Tuple"
48
50
49
51
instance decodeJsonEither :: (DecodeJson a , DecodeJson b ) => DecodeJson (Either a b ) where
50
52
decodeJson json =
0 commit comments