-- | ASCII (American Standard Code for Information Interchange) is the
--   \"normal\" computer encoding using the byte values 0-127 to represent
--   characters. Refer to <http://en.wikipedia.org/wiki/ASCII> for
--   more informations.
module Data.Encoding.ASCII
	(ASCII(..)) where

import Control.Exception (throwDyn)
import Data.ByteString (pack)
import qualified Data.ByteString.Lazy as Lazy (pack)
import Data.ByteString.Char8 (unpack)
import Data.ByteString.Base (c2w)
import qualified Data.ByteString.Lazy as Lazy
import Data.Encoding.Base
import Data.Word

data ASCII = ASCII

charToASCII :: Char -> Word8
charToASCII ch = if ch < '\128'
	then c2w ch
	else throwDyn (HasNoRepresentation ch)

instance Encoding ASCII where
	encode _ str = pack (map charToASCII str)
	encodeLazy _ str = Lazy.pack (map charToASCII str)
	encodable _ ch = ch < '\128'
	decode _ = unpack
	decodable _ = const True
