module Rika.Type.Default where
import qualified Data.ByteString.Char8 as B
import Control.Concurrent.STM
-- BEGIN
-- copy from data.default
import Data.Ratio
import qualified Data.Set as S
import qualified Data.Map as M
import Debug.Trace
-- | A class for types with a default value.
class Default a where
-- | The default value for this type.
def :: a
instance Default () where def = ()
instance Default (S.Set v) where def = S.empty
instance Default (M.Map k v) where def = M.empty
instance Default Int where def = 0
instance Default Integer where def = 0
instance Default Float where def = 0
instance Default Double where def = 0
instance (Integral a) => Default (Ratio a) where def = 0
instance Default (Maybe a) where def = Nothing
instance Default [a] where def = []
instance (Default r) => Default (e -> r) where def _ = def
instance (Default a) => Default (IO a) where def = return def
instance (Default a, Default b) => Default (a, b) where
def = (def, def)
-- END
instance Default (TVar a) where
def = error "undefined tvar used in default instance"
instance Default B.ByteString where
def = B.empty