packages feed

goldplate-0.1.0: src/Data/Aeson/Extended.hs

{-# LANGUAGE DeriveFoldable    #-}
{-# LANGUAGE DeriveFunctor     #-}
{-# LANGUAGE DeriveTraversable #-}
module Data.Aeson.Extended
    ( module Data.Aeson
    , Multiple (..)
    , multipleToList
    ) where

import           Control.Applicative ((<|>))
import           Data.Aeson

data Multiple a
    = Multiple [a]
    | Single a
    deriving (Foldable, Functor, Traversable)

instance FromJSON a => FromJSON (Multiple a) where
    parseJSON val = (Multiple <$> parseJSON val) <|> (Single <$> parseJSON val)

multipleToList :: Multiple a -> [a]
multipleToList (Multiple xs) = xs
multipleToList (Single x)    = [x]