argo-0.2021.10.12: source/library/Argo/Type/Pair.hs
module Argo.Type.Pair where
import qualified Argo.Decoder as Decoder
import qualified Argo.Literal as Literal
import qualified Control.DeepSeq as DeepSeq
import qualified Data.ByteString.Builder as Builder
newtype Pair k v
= Pair (k, v)
deriving (Eq, Show)
instance (DeepSeq.NFData k, DeepSeq.NFData v) => DeepSeq.NFData (Pair k v) where
rnf (Pair x) = DeepSeq.rnf x
encode :: (k -> Builder.Builder) -> (v -> Builder.Builder) -> Pair k v -> Builder.Builder
encode f g (Pair (x, y)) =
f x
<> Builder.word8 Literal.colon
<> g y
decode :: Decoder.Decoder k -> Decoder.Decoder v -> Decoder.Decoder (Pair k v)
decode f g = do
k <- f
Decoder.word8 Literal.colon
Decoder.spaces
v <- g
pure $ Pair (k, v)