@@ -8,11 +8,11 @@ module Data.Argonaut.Encode
88import Prelude
99
1010import Data.Argonaut.Core (Json (), jsonNull , fromBoolean , fromNumber , fromString , fromArray , fromObject )
11- import Data.Either (Either (..))
11+ import Data.Either (Either (..), either )
1212import Data.Foldable (foldr )
1313import Data.Generic (Generic , GenericSpine (..), toSpine )
1414import Data.Int (toNumber )
15- import Data.List (List (), fromList )
15+ import Data.List (List (.. ), fromList )
1616import Data.Map as M
1717import Data.Maybe (Maybe (..))
1818import Data.String (fromChar )
@@ -50,8 +50,12 @@ instance encodeJsonTuple :: (EncodeJson a, EncodeJson b) => EncodeJson (Tuple a
5050 encodeJson (Tuple a b) = encodeJson [encodeJson a, encodeJson b]
5151
5252instance 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 )
5559
5660instance encodeJsonUnit :: EncodeJson Unit where
5761 encodeJson = const jsonNull
0 commit comments