@@ -8,11 +8,11 @@ module Data.Argonaut.Encode
8
8
import Prelude
9
9
10
10
import Data.Argonaut.Core (Json (), jsonNull , fromBoolean , fromNumber , fromString , fromArray , fromObject )
11
- import Data.Either (Either (..))
11
+ import Data.Either (Either (..), either )
12
12
import Data.Foldable (foldr )
13
13
import Data.Generic (Generic , GenericSpine (..), toSpine )
14
14
import Data.Int (toNumber )
15
- import Data.List (List (), fromList )
15
+ import Data.List (List (.. ), fromList )
16
16
import Data.Map as M
17
17
import Data.Maybe (Maybe (..))
18
18
import Data.String (fromChar )
@@ -50,8 +50,12 @@ instance encodeJsonTuple :: (EncodeJson a, EncodeJson b) => EncodeJson (Tuple a
50
50
encodeJson (Tuple a b) = encodeJson [encodeJson a, encodeJson b]
51
51
52
52
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 = either (obj " Left" ) (obj " Right" )
54
+ where
55
+ obj :: forall c . (EncodeJson c ) => String -> c -> Json
56
+ obj tag x =
57
+ fromObject $ SM .fromList $
58
+ Cons (Tuple " tag" (fromString tag)) (Cons (Tuple " value" (encodeJson x)) Nil )
55
59
56
60
instance encodeJsonUnit :: EncodeJson Unit where
57
61
encodeJson = const jsonNull
0 commit comments