{-# LANGUAGE UndecidableInstances #-}

{-# LANGUAGE CPP #-}
#if __GLASGOW_HASKELL__ < 710
{-# LANGUAGE OverlappingInstances #-}
#endif

module Data.String.Class (
    module Data.String.Class,
    module X
) where

import Prelude
import Data.String as X (IsString (fromString))
import qualified Data.Text.Lazy as LText
import qualified Data.Text      as Text


-- === Types ===

class ToString a where
    toString   :: a -> String

    default toString :: Show a => a -> String
    toString = show


-- === Instances ===

instance ToString String where
    toString = id

instance ToString LText.Text where
    toString = LText.unpack

instance ToString Text.Text where
    toString = Text.unpack

instance {-# OVERLAPPABLE #-} Show a => ToString a where
    toString = show