module Default

interface Default a where
    default : a

implementation Default Int where
    default = 0

implementation Default Integer where
    default = 0

implementation Default Double where
    default = 0

implementation Default Nat where
    default = 0

implementation Default Char where
    default = '\0'

implementation Default String where
    default = ""

implementation Default Bool where
    default = False

implementation Default () where
    default = ()

implementation (Default a, Default b) => Default (a, b) where
    default = (default, default)

implementation Default (Maybe a) where
    default = Nothing

implementation Default (List a) where
    default = []

implementation Default a => Default (Vect n a) where
    default = mkDef _ where
      mkDef : (n : Nat) -> Vect n a
      mkDef Z = []
      mkDef (S k) = default :: mkDef k

