{-# LANGUAGE CPP #-}
#define HAVE_GHC_GENERICS (__GLASGOW_HASKELL__ >= 704)
#if HAVE_GHC_GENERICS
{-# LANGUAGE DefaultSignatures, TypeOperators, FlexibleContexts #-}
#endif
module Data.Default.Class (
Default(..)
) where
import Data.Int
import Data.Word
import Data.Monoid
import Data.Ratio
import Data.Complex
import Foreign.C.Types
#if HAVE_GHC_GENERICS
import GHC.Generics
class GDefault f where
gdef :: f a
instance GDefault U1 where
gdef :: forall a. U1 a
gdef = U1 a
forall k (p :: k). U1 p
U1
instance (Default a) => GDefault (K1 i a) where
gdef :: forall a. K1 i a a
gdef = a -> K1 i a a
forall k i c (p :: k). c -> K1 i c p
K1 a
forall a. Default a => a
def
instance (GDefault a, GDefault b) => GDefault (a :*: b) where
gdef :: forall a. (:*:) a b a
gdef = a a
forall a. a a
forall (f :: * -> *) a. GDefault f => f a
gdef a a -> b a -> (:*:) a b a
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*: b a
forall a. b a
forall (f :: * -> *) a. GDefault f => f a
gdef
instance (GDefault a) => GDefault (M1 i c a) where
gdef :: forall a. M1 i c a a
gdef = a a -> M1 i c a a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 a a
forall a. a a
forall (f :: * -> *) a. GDefault f => f a
gdef
#endif
class Default a where
def :: a
#if HAVE_GHC_GENERICS
default def :: (Generic a, GDefault (Rep a)) => a
def = Rep a Any -> a
forall a x. Generic a => Rep a x -> a
forall x. Rep a x -> a
to Rep a Any
forall a. Rep a a
forall (f :: * -> *) a. GDefault f => f a
gdef
#endif
instance Default Int where def :: Int
def = Int
0
instance Default Int8 where def :: Int8
def = Int8
0
instance Default Int16 where def :: Int16
def = Int16
0
instance Default Int32 where def :: Int32
def = Int32
0
instance Default Int64 where def :: Int64
def = Int64
0
instance Default Word where def :: Word
def = Word
0
instance Default Word8 where def :: Word8
def = Word8
0
instance Default Word16 where def :: Word16
def = Word16
0
instance Default Word32 where def :: Word32
def = Word32
0
instance Default Word64 where def :: Word64
def = Word64
0
instance Default Integer where def :: Integer
def = Integer
0
instance Default Float where def :: Float
def = Float
0
instance Default Double where def :: Double
def = Double
0
instance (Integral a) => Default (Ratio a) where def :: Ratio a
def = Ratio a
0
instance (Default a, RealFloat a) => Default (Complex a) where def :: Complex a
def = a
forall a. Default a => a
def a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
forall a. Default a => a
def
instance Default CShort where def :: CShort
def = CShort
0
instance Default CUShort where def :: CUShort
def = CUShort
0
instance Default CInt where def :: CInt
def = CInt
0
instance Default CUInt where def :: CUInt
def = CUInt
0
instance Default CLong where def :: CLong
def = CLong
0
instance Default CULong where def :: CULong
def = CULong
0
instance Default CLLong where def :: CLLong
def = CLLong
0
instance Default CULLong where def :: CULLong
def = CULLong
0
instance Default CPtrdiff where def :: CPtrdiff
def = CPtrdiff
0
instance Default CSize where def :: CSize
def = CSize
0
instance Default CSigAtomic where def :: CSigAtomic
def = CSigAtomic
0
instance Default CIntPtr where def :: CIntPtr
def = CIntPtr
0
instance Default CUIntPtr where def :: CUIntPtr
def = CUIntPtr
0
instance Default CIntMax where def :: CIntMax
def = CIntMax
0
instance Default CUIntMax where def :: CUIntMax
def = CUIntMax
0
instance Default CClock where def :: CClock
def = CClock
0
instance Default CTime where def :: CTime
def = CTime
0
#if MIN_VERSION_base(4, 4, 0)
instance Default CUSeconds where def :: CUSeconds
def = CUSeconds
0
instance Default CSUSeconds where def :: CSUSeconds
def = CSUSeconds
0
#endif
instance Default CFloat where def :: CFloat
def = CFloat
0
instance Default CDouble where def :: CDouble
def = CDouble
0
instance (Default r) => Default (e -> r) where def :: e -> r
def = r -> e -> r
forall a b. a -> b -> a
const r
forall a. Default a => a
def
instance (Default a) => Default (IO a) where def :: IO a
def = a -> IO a
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return a
forall a. Default a => a
def
instance Default (Maybe a) where def :: Maybe a
def = Maybe a
forall a. Maybe a
Nothing
instance Default () where def :: ()
def = ()
forall a. Monoid a => a
mempty
instance Default [a] where def :: [a]
def = [a]
forall a. Monoid a => a
mempty
instance Default Ordering where def :: Ordering
def = Ordering
forall a. Monoid a => a
mempty
instance Default Any where def :: Any
def = Any
forall a. Monoid a => a
mempty
instance Default All where def :: All
def = All
forall a. Monoid a => a
mempty
instance Default (Last a) where def :: Last a
def = Last a
forall a. Monoid a => a
mempty
instance Default (First a) where def :: First a
def = First a
forall a. Monoid a => a
mempty
instance (Num a) => Default (Sum a) where def :: Sum a
def = Sum a
forall a. Monoid a => a
mempty
instance (Num a) => Default (Product a) where def :: Product a
def = Product a
forall a. Monoid a => a
mempty
instance Default (Endo a) where def :: Endo a
def = Endo a
forall a. Monoid a => a
mempty
instance (Default a) => Default (Dual a) where def :: Dual a
def = a -> Dual a
forall a. a -> Dual a
Dual a
forall a. Default a => a
def
instance (Default a, Default b) => Default (a, b) where def :: (a, b)
def = (a
forall a. Default a => a
def, b
forall a. Default a => a
def)
instance (Default a, Default b, Default c) => Default (a, b, c) where def :: (a, b, c)
def = (a
forall a. Default a => a
def, b
forall a. Default a => a
def, c
forall a. Default a => a
def)
instance (Default a, Default b, Default c, Default d) => Default (a, b, c, d) where def :: (a, b, c, d)
def = (a
forall a. Default a => a
def, b
forall a. Default a => a
def, c
forall a. Default a => a
def, d
forall a. Default a => a
def)
instance (Default a, Default b, Default c, Default d, Default e) => Default (a, b, c, d, e) where def :: (a, b, c, d, e)
def = (a
forall a. Default a => a
def, b
forall a. Default a => a
def, c
forall a. Default a => a
def, d
forall a. Default a => a
def, e
forall a. Default a => a
def)
instance (Default a, Default b, Default c, Default d, Default e, Default f) => Default (a, b, c, d, e, f) where def :: (a, b, c, d, e, f)
def = (a
forall a. Default a => a
def, b
forall a. Default a => a
def, c
forall a. Default a => a
def, d
forall a. Default a => a
def, e
forall a. Default a => a
def, f
forall a. Default a => a
def)
instance (Default a, Default b, Default c, Default d, Default e, Default f, Default g) => Default (a, b, c, d, e, f, g) where def :: (a, b, c, d, e, f, g)
def = (a
forall a. Default a => a
def, b
forall a. Default a => a
def, c
forall a. Default a => a
def, d
forall a. Default a => a
def, e
forall a. Default a => a
def, f
forall a. Default a => a
def, g
forall a. Default a => a
def)