{-# LANGUAGE DeriveDataTypeable #-}
module Data.Encoding.ASCII where

import Control.Throws
import Data.Char
import Data.Encoding.Base
import Data.Encoding.ByteSource
import Data.Encoding.ByteSink
import Data.Encoding.Exception
import Data.Typeable

data ASCII = ASCII deriving (Show,Eq,Typeable)

instance Encoding ASCII where
    decodeChar _ = do
      w <- fetchWord8
      return $ chr $ fromIntegral w
    encodeChar enc c
      | encodeable enc c = pushWord8 . fromIntegral . ord $ c
      | otherwise        = throwException . HasNoRepresentation $ c
    encodeable _ c = c < '\128'