-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Case insensitive string comparison
--   
--   The module Data.CaseInsensitive provides the CI type
--   constructor which can be parameterised by a string-like type like:
--   String, ByteString, Text, etc.. Comparisons of
--   values of the resulting type will be insensitive to cases.
@package case-insensitive
@version 1.2.1.0

-- | This module is intended to be imported qualified. May I suggest:
--   
--   
--   import           Data.CaseInsensitive  ( CI )
--   import qualified Data.CaseInsensitive as CI
--   
--   
--   Note that the FoldCase instance for ByteStrings is only
--   guaranteed to be correct for ISO-8859-1 encoded strings!
module Data.CaseInsensitive

-- | A CI s provides Case Insensitive comparison for
--   the string-like type s (for example: String,
--   Text, ByteString, etc.).
--   
--   Note that CI s has an instance for IsString which
--   together with the OverloadedStrings language extension allows
--   you to write case insensitive string literals as in:
--   
--   
--   > ("Content-Type" :: CI Text) == ("CONTENT-TYPE" :: CI Text)
--   True
--   
data CI s

-- | Make the given string-like value case insensitive.
mk :: FoldCase s => s -> CI s

-- | Retrieve the original string-like value.
original :: CI s -> s

-- | Retrieve the case folded string-like value. (Also see
--   foldCase).
foldedCase :: CI s -> s

-- | Transform the original string-like value but keep it case insensitive.
map :: FoldCase s2 => (s1 -> s2) -> CI s1 -> CI s2

-- | Transform the original string-like value but keep it case insensitive.
traverse :: (FoldCase s2, Applicative f) => (s1 -> f s2) -> CI s1 -> f (CI s2)

-- | Class of string-like types that support folding cases.
--   
--   Note: In some languages, case conversion is a locale- and
--   context-dependent operation. The foldCase method is
--   not intended to be locale sensitive. Programs that require
--   locale sensitivity should use appropriate versions of the case mapping
--   functions from the text-icu package:
--   http://hackage.haskell.org/package/text-icu
class FoldCase s
foldCase :: FoldCase s => s -> s

-- | Provides an unsafe way to create a case insensitive string-like value.
module Data.CaseInsensitive.Unsafe

-- | Constructs a CI from an already case folded string-like value.
--   The given string is used both as the original as well as the
--   foldedCase.
--   
--   This function is unsafe since the compiler can't guarantee that the
--   provided string is case folded.
unsafeMk :: FoldCase s => s -> CI s
