    -- | This module provides default values for many types.
    --   To use the default value simply write 'def'.
    module System.Console.CmdArgs.Default where

    import Data.Int
    import Data.Word

    -- | Class for default values.
    class Default a where
        -- | Provide a default value, such as @()@, @False@, @0@, @[]@, @Nothing@.
        def :: a

    instance Default () where def :: ()
    def = ()
    instance Default Bool where def :: Bool
    def = Bool
    False
    instance Default Int where def :: Int
    def = 0
    instance Default Integer where def :: Integer
    def = 0
    instance Default Float where def :: Float
    def = 0
    instance Default Double where def :: Double
    def = 0
    instance Default [a] where def :: [a]
    def = []
    instance Default (Maybe a) where def :: Maybe a
    def = Maybe a
    forall a. Maybe a
    Nothing

    instance Default Int8 where def :: Int8
    def = 0
    instance Default Int16 where def :: Int16
    def = 0
    instance Default Int32 where def :: Int32
    def = 0
    instance Default Int64 where def :: Int64
    def = 0
    instance Default Word where def :: Word
    def = 0
    instance Default Word8 where def :: Word8
    def = 0
    instance Default Word16 where def :: Word16
    def = 0
    instance Default Word32 where def :: Word32
    def = 0
    instance Default Word64 where def :: Word64
    def = 0

    -- EXPANDY: $(2\10 instance ($(1,$ Default a$)) => Default ($(1,$ a$)) where def = ($(1,$ def)))
    instance (Default a1,Default a2) => Default (a1,a2) where def :: (a1, a2)
    def = (a1
    forall a. Default a => a
    def,a2
    forall a. Default a => a
    def)
    instance (Default a1,Default a2,Default a3) => Default (a1,a2,a3) where def :: (a1, a2, a3)
    def = (a1
    forall a. Default a => a
    def,a2
    forall a. Default a => a
    def,a3
    forall a. Default a => a
    def)
    instance (Default a1,Default a2,Default a3,Default a4) => Default (a1,a2,a3,a4) where def :: (a1, a2, a3, a4)
    def = (a1
    forall a. Default a => a
    def,a2
    forall a. Default a => a
    def,a3
    forall a. Default a => a
    def,a4
    forall a. Default a => a
    def)
    instance (Default a1,Default a2,Default a3,Default a4,Default a5) => Default (a1,a2,a3,a4,a5) where def :: (a1, a2, a3, a4, a5)
    def = (a1
    forall a. Default a => a
    def,a2
    forall a. Default a => a
    def,a3
    forall a. Default a => a
    def,a4
    forall a. Default a => a
    def,a5
    forall a. Default a => a
    def)
    instance (Default a1,Default a2,Default a3,Default a4,Default a5,Default a6) => Default (a1,a2,a3,a4,a5,a6) where def :: (a1, a2, a3, a4, a5, a6)
    def = (a1
    forall a. Default a => a
    def,a2
    forall a. Default a => a
    def,a3
    forall a. Default a => a
    def,a4
    forall a. Default a => a
    def,a5
    forall a. Default a => a
    def,a6
    forall a. Default a => a
    def)
    instance (Default a1,Default a2,Default a3,Default a4,Default a5,Default a6,Default a7) => Default (a1,a2,a3,a4,a5,a6,a7) where def :: (a1, a2, a3, a4, a5, a6, a7)
    def = (a1
    forall a. Default a => a
    def,a2
    forall a. Default a => a
    def,a3
    forall a. Default a => a
    def,a4
    forall a. Default a => a
    def,a5
    forall a. Default a => a
    def,a6
    forall a. Default a => a
    def,a7
    forall a. Default a => a
    def)
    instance (Default a1,Default a2,Default a3,Default a4,Default a5,Default a6,Default a7,Default a8) => Default (a1,a2,a3,a4,a5,a6,a7,a8) where def :: (a1, a2, a3, a4, a5, a6, a7, a8)
    def = (a1
    forall a. Default a => a
    def,a2
    forall a. Default a => a
    def,a3
    forall a. Default a => a
    def,a4
    forall a. Default a => a
    def,a5
    forall a. Default a => a
    def,a6
    forall a. Default a => a
    def,a7
    forall a. Default a => a
    def,a8
    forall a. Default a => a
    def)
    instance (Default a1,Default a2,Default a3,Default a4,Default a5,Default a6,Default a7,Default a8,Default a9) => Default (a1,a2,a3,a4,a5,a6,a7,a8,a9) where def :: (a1, a2, a3, a4, a5, a6, a7, a8, a9)
    def = (a1
    forall a. Default a => a
    def,a2
    forall a. Default a => a
    def,a3
    forall a. Default a => a
    def,a4
    forall a. Default a => a
    def,a5
    forall a. Default a => a
    def,a6
    forall a. Default a => a
    def,a7
    forall a. Default a => a
    def,a8
    forall a. Default a => a
    def,a9
    forall a. Default a => a
    def)
    instance (Default a1,Default a2,Default a3,Default a4,Default a5,Default a6,Default a7,Default a8,Default a9,Default a10) => Default (a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) where def :: (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
    def = (a1
    forall a. Default a => a
    def,a2
    forall a. Default a => a
    def,a3
    forall a. Default a => a
    def,a4
    forall a. Default a => a
    def,a5
    forall a. Default a => a
    def,a6
    forall a. Default a => a
    def,a7
    forall a. Default a => a
    def,a8
    forall a. Default a => a
    def,a9
    forall a. Default a => a
    def,a10
    forall a. Default a => a
    def)