{-# LANGUAGE MultiParamTypeClasses #-} module Data.Attoparsec.Parsable ( Parsable(..) ) where import qualified Data.Attoparsec.ByteString as B import qualified Data.Attoparsec.ByteString.Char8 as B import qualified Data.Attoparsec.Text as T import Data.Attoparsec.Number import Data.Attoparsec.Types import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as LB import qualified Data.Text as T import qualified Data.Text.Lazy as LT import Data.Word -- |Class of types which have their corresponding parsers. -- -- Minimal complete definition: 'parse' class Parsable t a where parse :: Parser t a instance Parsable B.ByteString Word8 where {-# INLINE CONLIKE parse #-} parse = B.anyWord8 instance Parsable B.ByteString Char where {-# INLINE CONLIKE parse #-} parse = B.anyChar instance Parsable B.ByteString B.ByteString where {-# INLINE CONLIKE parse #-} parse = B.takeByteString instance Parsable B.ByteString LB.ByteString where {-# INLINE CONLIKE parse #-} parse = B.takeLazyByteString instance Parsable B.ByteString Double where {-# INLINE CONLIKE parse #-} parse = B.double instance Parsable B.ByteString Number where {-# INLINE CONLIKE parse #-} parse = B.number instance Parsable T.Text Char where {-# INLINE CONLIKE parse #-} parse = T.anyChar instance Parsable T.Text T.Text where {-# INLINE CONLIKE parse #-} parse = T.takeText instance Parsable T.Text LT.Text where {-# INLINE CONLIKE parse #-} parse = T.takeLazyText instance Parsable T.Text Double where {-# INLINE CONLIKE parse #-} parse = T.double instance Parsable T.Text Number where {-# INLINE CONLIKE parse #-} parse = T.number