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