{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Codec.QRCode.Data.ToInput
( ToText(..)
, ToNumeric(..)
, ToBinary(..)
) where
import Codec.QRCode.Base
import Data.CaseInsensitive (CI, original)
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BL
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
import qualified Data.Vector as V
import qualified Data.Vector.Storable as SV
import qualified Data.Vector.Unboxed as UV
class ToText a where
toString :: a -> [Char]
isCI :: a -> Bool
instance ToText [Char] where
toString = id
isCI _ = False
instance ToText TL.Text where
toString = TL.unpack
isCI _ = False
instance ToText T.Text where
toString = T.unpack
isCI _ = False
instance ToText a => ToText (CI a) where
toString = toString . original
isCI _ = True
class ToNumeric a where
toNumeric :: a -> [Int]
instance ToNumeric [Int] where
toNumeric = id
instance ToNumeric [Char] where
toNumeric = map (subtract 48 . ord)
instance ToNumeric T.Text where
toNumeric = toNumeric . T.unpack
instance ToNumeric TL.Text where
toNumeric = toNumeric . TL.unpack
class ToBinary a where
toBinary :: a -> [Word8]
instance ToBinary [Word8] where
toBinary = id
instance ToBinary BS.ByteString where
toBinary = BS.unpack
instance ToBinary BL.ByteString where
toBinary = BL.unpack
instance ToBinary (V.Vector Word8) where
toBinary = V.toList
instance ToBinary (UV.Vector Word8) where
toBinary = UV.toList
instance ToBinary (SV.Vector Word8) where
toBinary = SV.toList