-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | String class library -- -- String class library @package string-class @version 0.1.4.1 module Data.String.Class -- | Minimal complete definition: StringCellChar; StringCellAltChar; -- toStringCells; fromStringCells; toMainChar; toAltChar; cons; snoc; -- either all of head, tail, last, and init, or all of uncons and unsnoc; -- take, take64 or genericTake; drop, drop64, or genericDrop; length, -- length64, or genericLength; empty; null; and concat class (StringCell (StringCellChar s), StringCell (StringCellAltChar s), ConvGenString s, ConvString s, ConvStrictByteString s, ConvLazyByteString s, ConvText s, Eq s, Typeable s) => StringCells s where { type family StringCellChar s; type family StringCellAltChar s; { unfoldr f b = case f b of { (Just (a, new_b)) -> a `cons` unfoldr f new_b (Nothing) -> empty } altUnfoldr f b = case f b of { (Just (a, new_b)) -> a `altCons` altUnfoldr f new_b (Nothing) -> empty } unfoldrN = const unfoldr altUnfoldrN = const altUnfoldr altCons c s = cons (s `untagTypeOf` toMainChar c) s altSnoc s c = snoc s (s `untagTypeOf` toMainChar c) altUncons s = (\ ~(a, s') -> (s `untagTypeOf` toAltChar a, s')) $ uncons s altUnsnoc s = (\ ~(s', a) -> (s', s `untagTypeOf` toAltChar a)) $ unsnoc s head = fst . uncons tail = snd . uncons last = snd . unsnoc init = fst . unsnoc altHead s = (s `untagTypeOf`) . toAltChar . head $ s altLast s = (s `untagTypeOf`) . toAltChar . last $ s index s 0 = head s index s n = (flip index $ pred n) . tail $ s index64 s 0 = head s index64 s n = (flip index64 $ pred n) . tail $ s genericIndex s 0 = head s genericIndex s n = (flip genericIndex $ pred n) . tail $ s take n s = take64 (fromIntegral n) s take64 n s = genericTake (fromIntegral n :: Integer) s genericTake n s = take (fromIntegral n) s drop n s = drop64 (fromIntegral n) s drop64 n s = genericDrop (fromIntegral n :: Integer) s genericDrop n s = drop (fromIntegral n) s length = fromIntegral . length64 length64 = (fromIntegral :: Integer -> Int64) . genericLength genericLength = fromIntegral . length append a b = case safeUncons a of { (Just (c, cs)) -> c `cons` append cs b (Nothing) -> a } concat = foldr append empty uncons s = (head s, tail s) unsnoc s = (init s, last s) cons2 a b s = a `cons` b `cons` s cons3 a b c s = a `cons` b `cons` c `cons` s cons4 a b c d s = a `cons` b `cons` c `cons` d `cons` s uncons2 s = let (a, s') = uncons s (b, s'') = uncons s' in (a, b, s'') uncons3 s = let (a, s') = uncons s (b, s'') = uncons s' (c, s''') = uncons s'' in (a, b, c, s''') uncons4 s = let (a, s') = uncons s (b, s'') = uncons s' (c, s''') = uncons s'' (d, s'''') = uncons s''' in (a, b, c, d, s'''') safeUncons s | null s = Nothing | otherwise = Just $ uncons s safeUnsnoc s | null s = Nothing | otherwise = Just $ unsnoc s safeAltUncons s | null s = Nothing | otherwise = Just $ altUncons s safeAltUnsnoc s | null s = Nothing | otherwise = Just $ altUnsnoc s safeHead s | null s = Nothing | otherwise = Just $ head s safeTail s | null s = Nothing | otherwise = Just $ tail s safeLast s | null s = Nothing | otherwise = Just $ last s safeInit s | null s = Nothing | otherwise = Just $ init s safeAltHead s | null s = Nothing | otherwise = Just $ altHead s safeAltLast s | null s = Nothing | otherwise = Just $ altLast s safeIndex s n | length s <= n = Nothing | otherwise = Just $ s `index` n safeIndex64 s n | length64 s <= n = Nothing | otherwise = Just $ s `index64` n safeGenericIndex s n | genericLength s <= n = Nothing | otherwise = Just $ s `genericIndex` n safeTake n s | n > length s = Nothing | otherwise = Just $ take n s safeTake64 n s | n > length64 s = Nothing | otherwise = Just $ take64 n s safeGenericTake n s | n > genericLength s = Nothing | otherwise = Just $ genericTake n s safeDrop n s | n > length s = Nothing | otherwise = Just $ drop n s safeDrop64 n s | n > length64 s = Nothing | otherwise = Just $ drop64 n s safeGenericDrop n s | n > genericLength s = Nothing | otherwise = Just $ genericDrop n s safeUncons2 s = do { (a, s') <- safeUncons s; (b, s'') <- safeUncons s'; return (a, b, s'') } safeUncons3 s = do { (a, s') <- safeUncons s; (b, s'') <- safeUncons s'; (c, s''') <- safeUncons s''; return (a, b, c, s''') } safeUncons4 s = do { (a, s') <- safeUncons s; (b, s'') <- safeUncons s'; (c, s''') <- safeUncons s''; (d, s'''') <- safeUncons s'''; return (a, b, c, d, s'''') } } } toStringCells :: (StringCells s, StringCells s2) => s -> s2 fromStringCells :: (StringCells s, StringCells s2) => s2 -> s cons :: StringCells s => StringCellChar s -> s -> s uncons :: StringCells s => s -> (StringCellChar s, s) snoc :: StringCells s => s -> StringCellChar s -> s unsnoc :: StringCells s => s -> (s, StringCellChar s) altCons :: StringCells s => StringCellAltChar s -> s -> s altUncons :: StringCells s => s -> (StringCellAltChar s, s) altSnoc :: StringCells s => s -> StringCellAltChar s -> s altUnsnoc :: StringCells s => s -> (s, StringCellAltChar s) toMainChar :: (StringCells s, StringCell c) => c -> Tagged s (StringCellChar s) toAltChar :: (StringCells s, StringCell c) => c -> Tagged s (StringCellAltChar s) append :: StringCells s => s -> s -> s concat :: StringCells s => [s] -> s empty :: StringCells s => s null :: StringCells s => s -> Bool head :: StringCells s => s -> StringCellChar s tail :: StringCells s => s -> s last :: StringCells s => s -> StringCellChar s init :: StringCells s => s -> s altHead :: StringCells s => s -> StringCellAltChar s altLast :: StringCells s => s -> StringCellAltChar s unfoldr :: StringCells s => (a -> Maybe (StringCellChar s, a)) -> a -> s altUnfoldr :: StringCells s => (a -> Maybe (StringCellAltChar s, a)) -> a -> s unfoldrN :: StringCells s => Int -> (a -> Maybe (StringCellChar s, a)) -> a -> s altUnfoldrN :: StringCells s => Int -> (a -> Maybe (StringCellAltChar s, a)) -> a -> s index :: StringCells s => s -> Int -> StringCellChar s index64 :: StringCells s => s -> Int64 -> StringCellChar s genericIndex :: (StringCells s, Integral i) => s -> i -> StringCellChar s take :: StringCells s => Int -> s -> s take64 :: StringCells s => Int64 -> s -> s genericTake :: (StringCells s, Integral i) => i -> s -> s drop :: StringCells s => Int -> s -> s drop64 :: StringCells s => Int64 -> s -> s genericDrop :: (StringCells s, Integral i) => i -> s -> s length :: StringCells s => s -> Int length64 :: StringCells s => s -> Int64 genericLength :: (StringCells s, Integral i) => s -> i safeUncons :: StringCells s => s -> Maybe (StringCellChar s, s) safeUnsnoc :: StringCells s => s -> Maybe (s, StringCellChar s) safeAltUncons :: StringCells s => s -> Maybe (StringCellAltChar s, s) safeAltUnsnoc :: StringCells s => s -> Maybe (s, StringCellAltChar s) safeHead :: StringCells s => s -> Maybe (StringCellChar s) safeTail :: StringCells s => s -> Maybe s safeLast :: StringCells s => s -> Maybe (StringCellChar s) safeInit :: StringCells s => s -> Maybe s safeAltHead :: StringCells s => s -> Maybe (StringCellAltChar s) safeAltLast :: StringCells s => s -> Maybe (StringCellAltChar s) safeIndex :: StringCells s => s -> Int -> Maybe (StringCellChar s) safeIndex64 :: StringCells s => s -> Int64 -> Maybe (StringCellChar s) safeGenericIndex :: (StringCells s, Integral i) => s -> i -> Maybe (StringCellChar s) safeTake :: StringCells s => Int -> s -> Maybe s safeTake64 :: StringCells s => Int64 -> s -> Maybe s safeGenericTake :: (StringCells s, Integral i) => i -> s -> Maybe s safeDrop :: StringCells s => Int -> s -> Maybe s safeDrop64 :: StringCells s => Int64 -> s -> Maybe s safeGenericDrop :: (StringCells s, Integral i) => i -> s -> Maybe s safeUncons2 :: StringCells s => s -> Maybe (StringCellChar s, StringCellChar s, s) safeUncons3 :: StringCells s => s -> Maybe (StringCellChar s, StringCellChar s, StringCellChar s, s) safeUncons4 :: StringCells s => s -> Maybe (StringCellChar s, StringCellChar s, StringCellChar s, StringCellChar s, s) cons2 :: StringCells s => StringCellChar s -> StringCellChar s -> s -> s cons3 :: StringCells s => StringCellChar s -> StringCellChar s -> StringCellChar s -> s -> s cons4 :: StringCells s => StringCellChar s -> StringCellChar s -> StringCellChar s -> StringCellChar s -> s -> s uncons2 :: StringCells s => s -> (StringCellChar s, StringCellChar s, s) uncons3 :: StringCells s => s -> (StringCellChar s, StringCellChar s, StringCellChar s, s) uncons4 :: StringCells s => s -> (StringCellChar s, StringCellChar s, StringCellChar s, StringCellChar s, s) class StringCell c toChar :: StringCell c => c -> Char toWord8 :: StringCell c => c -> Word8 toWord16 :: StringCell c => c -> Word16 toWord32 :: StringCell c => c -> Word32 toWord64 :: StringCell c => c -> Word64 fromChar :: StringCell c => Char -> c fromWord8 :: StringCell c => Word8 -> c fromWord16 :: StringCell c => Word16 -> c fromWord32 :: StringCell c => Word32 -> c fromWord64 :: StringCell c => Word64 -> c class ConvGenString s toGenString :: ConvGenString s => s -> GenString fromGenString :: ConvGenString s => GenString -> s class ConvString s toString :: ConvString s => s -> String fromString :: ConvString s => String -> s class ConvStrictByteString s toStrictByteString :: ConvStrictByteString s => s -> ByteString fromStrictByteString :: ConvStrictByteString s => ByteString -> s class ConvLazyByteString s toLazyByteString :: ConvLazyByteString s => s -> ByteString fromLazyByteString :: ConvLazyByteString s => ByteString -> s class ConvText s toText :: ConvText s => s -> Text fromText :: ConvText s => Text -> s -- | Polymorphic container of a string -- -- When operations take place on multiple GenStrings, they are -- first converted to the type GenStringDefault, which are lazy -- bytestrings, whenever absolutely necessary (which includes testing for -- equality, appending strings, concatenating lists of strings, empty -- strings with empty, and unfolding), making them the most -- efficient type for this polymorphic container. data GenString GenString :: s -> GenString gen_string :: GenString -> s -- | This type is used by GenString when a concrete string type is -- needed type GenStringDefault = ByteString instance Typeable GenString instance StringCells GenString instance Eq GenString instance ConvText Text instance ConvText ByteString instance ConvText ByteString instance ConvText String instance ConvText GenString instance ConvLazyByteString Text instance ConvLazyByteString ByteString instance ConvLazyByteString ByteString instance ConvLazyByteString String instance ConvLazyByteString GenString instance ConvStrictByteString Text instance ConvStrictByteString ByteString instance ConvStrictByteString ByteString instance ConvStrictByteString String instance ConvStrictByteString GenString instance ConvString Text instance ConvString ByteString instance ConvString ByteString instance ConvString String instance ConvString GenString instance ConvGenString Text instance ConvGenString ByteString instance ConvGenString ByteString instance ConvGenString String instance ConvGenString GenString instance StringCell Word64 instance StringCell Word32 instance StringCell Word16 instance StringCell Word8 instance StringCell Char instance StringCells Text instance StringCells ByteString instance StringCells ByteString instance StringCells String