{-# 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 (Int -> ASCII -> ShowS [ASCII] -> ShowS ASCII -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [ASCII] -> ShowS $cshowList :: [ASCII] -> ShowS show :: ASCII -> String $cshow :: ASCII -> String showsPrec :: Int -> ASCII -> ShowS $cshowsPrec :: Int -> ASCII -> ShowS Show,ASCII -> ASCII -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: ASCII -> ASCII -> Bool $c/= :: ASCII -> ASCII -> Bool == :: ASCII -> ASCII -> Bool $c== :: ASCII -> ASCII -> Bool Eq,Typeable) instance Encoding ASCII where decodeChar :: forall (m :: * -> *). ByteSource m => ASCII -> m Char decodeChar ASCII _ = do Word8 w <- forall (m :: * -> *). ByteSource m => m Word8 fetchWord8 forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ Int -> Char chr forall a b. (a -> b) -> a -> b $ forall a b. (Integral a, Num b) => a -> b fromIntegral Word8 w encodeChar :: forall (m :: * -> *). ByteSink m => ASCII -> Char -> m () encodeChar ASCII enc Char c | forall enc. Encoding enc => enc -> Char -> Bool encodeable ASCII enc Char c = forall (m :: * -> *). ByteSink m => Word8 -> m () pushWord8 forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . Char -> Int ord forall a b. (a -> b) -> a -> b $ Char c | Bool otherwise = forall e (m :: * -> *) a. Throws e m => e -> m a throwException forall b c a. (b -> c) -> (a -> b) -> a -> c . Char -> EncodingException HasNoRepresentation forall a b. (a -> b) -> a -> b $ Char c encodeable :: ASCII -> Char -> Bool encodeable ASCII _ Char c = Char c forall a. Ord a => a -> a -> Bool < Char '\128'