{-# LANGUAGE TypeSynonymInstances #-}

--------------------------------------------------------------------------------
-- |
-- Module      :  Data.String.ToString
-- Copyright   :  (c) 2009 Bas van Dijk
-- License     :  BSD3 (see the file LICENSE)
-- Maintainer  :  v.dijk.bas@gmail.com
-- Stability   :  Stable
--
--------------------------------------------------------------------------------

module Data.String.ToString
    ( ToString
    , toString
    , fromToString
    )
    where

import Data.String (IsString, fromString)

class ToString s where
    -- | Convert a string-like type to a 'String'.
    toString :: s -> String

instance ToString String where
    toString = id

instance ToString Char where
    toString = (:[])

-- | General coercion between string-like types.
fromToString :: (IsString s2, ToString s1) => s1 -> s2
fromToString = fromString . toString