Skip to content

Commit d3cb989

Browse files
committed
Fix EncodeJson/DecodeJson Either instances
1 parent 7c33e77 commit d3cb989

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

src/Data/Argonaut/Decode.purs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,17 @@ instance decodeJsonTuple :: (DecodeJson a, DecodeJson b) => DecodeJson (Tuple a
7777
f _ = Left "Couldn't decode Tuple"
7878

7979
instance decodeJsonEither :: (DecodeJson a, DecodeJson b) => DecodeJson (Either a b) where
80-
decodeJson j = (Left <$> decodeJson j) <|> (Right <$> decodeJson j)
80+
decodeJson j = decodeJson j >>= f
81+
where
82+
f [tag, value] = do
83+
case toString tag of
84+
Just "Right" ->
85+
Right <$> decodeJson tag
86+
Just "Left" ->
87+
Left <$> decodeJson tag
88+
_ ->
89+
Left "Couldn't decode Either"
90+
f _ = Left "Couldn't decode Either"
8191

8292
instance decodeJsonNull :: DecodeJson Unit where
8393
decodeJson = foldJsonNull (Left "Not null") (const $ Right unit)

src/Data/Argonaut/Encode.purs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ instance encodeJsonTuple :: (EncodeJson a, EncodeJson b) => EncodeJson (Tuple a
5050
encodeJson (Tuple a b) = encodeJson [encodeJson a, encodeJson b]
5151

5252
instance encodeJsonEither :: (EncodeJson a, EncodeJson b) => EncodeJson (Either a b) where
53-
encodeJson (Left a) = encodeJson a
54-
encodeJson (Right b) = encodeJson b
53+
encodeJson (Left a) = encodeJson [fromString "Left", encodeJson a]
54+
encodeJson (Right b) = encodeJson [fromString "Right", encodeJson b]
5555

5656
instance encodeJsonUnit :: EncodeJson Unit where
5757
encodeJson = const jsonNull

0 commit comments

Comments
 (0)