{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} module Octane.Type.List ( List(..) ) where import Data.Function ((&)) import qualified Data.Aeson as Aeson import qualified Data.Default.Class as Default import qualified Data.OverloadedRecords.TH as OverloadedRecords -- | A list of values. newtype List a = List { listUnpack :: [a] } deriving (Eq, Ord) $(OverloadedRecords.overloadedRecord Default.def ''List) instance (Show a) => Show (List a) where show list = "fromList " ++ show (#unpack list) -- | Encoded as a JSON array directly. instance (Aeson.ToJSON a) => Aeson.ToJSON (List a) where toJSON list = list & #unpack & Aeson.toJSON