haskeline-0.6: System/Console/Haskeline/Encoding.hs
{- |
This module exposes the console Unicode API which is used by the functions
in "System.Console.Haskeline". On POSIX systems, it uses @iconv@ plus the
console\'s locale; on Windows it uses the console's current code page.
Characters or bytes which cannot be encoded/decoded (for example, not belonging
to the output range) will be ignored.
-}
module System.Console.Haskeline.Encoding (
encode,
decode,
getEncoder,
getDecoder
) where
import System.Console.Haskeline.InputT
import System.Console.Haskeline.Term
import System.Console.Haskeline.Monads
import Data.ByteString (ByteString)
-- | Encode a Unicode 'String' into a 'ByteString' suitable for the current
-- console.
encode :: MonadIO m => String -> InputT m ByteString
encode str = do
encoder <- asks encodeForTerm
liftIO $ encoder str
-- | Convert a 'ByteString' from the console's encoding into a Unicode 'String'.
decode :: MonadIO m => ByteString -> InputT m String
decode str = do
decoder <- asks decodeForTerm
liftIO $ decoder str
getEncoder :: Monad m => InputT m (String -> IO ByteString)
getEncoder = asks encodeForTerm
getDecoder :: Monad m => InputT m (ByteString -> IO String)
getDecoder = asks decodeForTerm