Source

aeson / tests / Types.hs

The default branch has multiple heads

Bryan O'Sullivan c153037 



Bryan O'Sullivan d5c5f80 





Bryan O'Sullivan c153037 
Bryan O'Sullivan ba6da2f 
Bryan O'Sullivan c153037 
Bryan O'Sullivan d5c5f80 







Bryan O'Sullivan c153037 
Bryan O'Sullivan d5c5f80 



Bryan O'Sullivan c153037 
Bryan O'Sullivan ba6da2f 

Bryan O'Sullivan c153037 
Bryan O'Sullivan ba6da2f 

Bryan O'Sullivan c153037 
Bryan O'Sullivan ba6da2f 

Bryan O'Sullivan c153037 
Bryan O'Sullivan ba6da2f 

Bryan O'Sullivan c153037 
Bryan O'Sullivan ba6da2f 




Bryan O'Sullivan c153037 
Bryan O'Sullivan ba6da2f 


basvandijk 7e7fb93 
Bryan O'Sullivan c153037 
basvandijk 7e7fb93 






Bryan O'Sullivan c153037 











{-# LANGUAGE CPP, DeriveDataTypeable, GeneralizedNewtypeDeriving #-}
#ifdef GHC_GENERICS
{-# LANGUAGE DeriveGeneric, StandaloneDeriving #-}
#endif

module Types where

import qualified Data.Map as Map
import Data.Data
import Data.Text
#ifdef GHC_GENERICS
import GHC.Generics
#endif

data Foo = Foo {
      fooInt :: Int
    , fooDouble :: Double
    , fooTuple :: (String, Text, Int)
    -- This definition causes an infinite loop in genericTo and genericFrom!
    -- , fooMap :: Map.Map String Foo
    , fooMap :: Map.Map String (Text,Int)
    } deriving (Show, Typeable, Data)

data UFoo = UFoo {
      _UFooInt :: Int
    , uFooInt :: Int
    } deriving (Show, Eq, Data, Typeable)

data OneConstructor = OneConstructor
                      deriving (Show, Eq, Typeable, Data)

data Product2 a b = Product2 a b
                    deriving (Show, Eq, Typeable, Data)

data Product6 a b c d e f = Product6 a b c d e f
                    deriving (Show, Eq, Typeable, Data)

data Sum4 a b c d = Alt1 a | Alt2 b | Alt3 c | Alt4 d
                    deriving (Show, Eq, Typeable, Data)

class ApproxEq a where
    (=~) :: a -> a -> Bool

newtype Approx a = Approx { fromApprox :: a }
    deriving (Show, Data, Typeable, ApproxEq, Num)

instance (ApproxEq a) => Eq (Approx a) where
    Approx a == Approx b = a =~ b

data Nullary = C1 | C2 | C3 deriving (Eq, Show)

data SomeType a = Nullary
                | Unary Int
                | Product String (Maybe Char) a
                | Record { testOne   :: Double
                         , testTwo   :: Maybe Bool
                         , testThree :: Maybe a
                         } deriving (Eq, Show)

#ifdef GHC_GENERICS
deriving instance Generic Foo
deriving instance Generic UFoo
deriving instance Generic OneConstructor
deriving instance Generic (Product2 a b)
deriving instance Generic (Product6 a b c d e f)
deriving instance Generic (Sum4 a b c d)
deriving instance Generic (Approx a)
deriving instance Generic Nullary
deriving instance Generic (SomeType a)
#endif