{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeFamilies #-} module ClassyPrelude.LByteString ( LByteString ) where import qualified Prelude import Prelude ((.)) import ClassyPrelude.Classes import qualified Data.ByteString.Lazy as L import Control.Monad.IO.Class (MonadIO, liftIO) import qualified Filesystem.Path.CurrentOS as F import Data.Word (Word8) import Data.Int (Int64) type LByteString = L.ByteString instance (co ~ LByteString, i ~ Word8, o ~ Word8) => CanMapFunc LByteString co i o where mapFunc = L.map instance (co ~ LByteString, i ~ Word8, o ~ LByteString) => CanConcatMapFunc LByteString co i o where concatMapFunc = L.concatMap instance CanFilterFunc LByteString Word8 where filterFunc = L.filter instance CanLength LByteString Int64 where length = L.length instance CanSingleton LByteString Word8 where singleton = L.singleton instance CanNull LByteString where null = L.null instance CanPack LByteString Word8 where pack = L.pack unpack = L.unpack instance CanEmpty LByteString where empty = L.empty instance MonadIO m => CanReadFile (m LByteString) where readFile = liftIO . L.readFile . F.encodeString instance CanWriteFileFunc LByteString where writeFileFunc fp = liftIO . L.writeFile (F.encodeString fp) instance CanBreak LByteString Word8 where break = L.break span = L.span dropWhile = L.dropWhile takeWhile = L.takeWhile instance CanAny LByteString Word8 where any = L.any all = L.all instance CanSplitAt LByteString Int64 where splitAt = L.splitAt