msgpack-types-0.0.4: src/Data/MessagePack/Types/Assoc.hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE Trustworthy #-}
--------------------------------------------------------------------
-- |
-- Module : Data.MessagePack.Types.Assoc
-- Copyright : (c) Daiki Handa, 2010-2011
-- License : BSD3
--
-- Maintainer: tanaka.hideyuki@gmail.com
-- Stability : experimental
-- Portability: portable
--
-- MessagePack map labeling type
--
--------------------------------------------------------------------
module Data.MessagePack.Types.Assoc
( Assoc (..)
) where
import Control.Applicative ((<$>))
import Control.DeepSeq (NFData)
import Data.Typeable (Typeable)
import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
-- not defined for general Functor for performance reason.
-- (ie. you would want to write custom instances for each type using
-- specialized mapM-like functions)
newtype Assoc a
= Assoc { unAssoc :: a }
deriving (Show, Read, Eq, Ord, Typeable, NFData)
instance Arbitrary a => Arbitrary (Assoc a) where
arbitrary = Assoc <$> arbitrary