case-insensitive-0.3: Case insensitive string comparison

MaintainerBas van Dijk <>



This module is intended to be imported qualified. May I suggest:

 import           Data.CaseInsensitive  ( CI )
 import qualified Data.CaseInsensitive as CI



data CI s Source

A CI s provides Case Insensitive comparison for the string-like type s (for example: String, Text, ByteString, ShowS, 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)


Typeable1 CI 
Eq s => Eq (CI s) 
Ord s => Ord (CI s) 
(Read s, FoldCase s) => Read (CI s) 
Show s => Show (CI s) 
(IsString s, FoldCase s) => IsString (CI s) 
Monoid s => Monoid (CI s) 
Hashable s => Hashable (CI s) 
FoldCase (CI s) 

mk :: FoldCase s => s -> CI sSource

Make the given string-like value case insensitive.

original :: CI s -> sSource

Retrieve the original string-like value.

foldedCase :: CI s -> sSource

Retrieve the case folded string-like value. (Also see foldCase).

map :: FoldCase s2 => (s1 -> s2) -> CI s1 -> CI s2Source

Transform the original string-like value but keep it case insensitive.

class FoldCase s whereSource

Class of string-like types that support folding cases.

Note that the instances for Char, String, ShowS and the ByteString types do not perform fully correct Unicode-aware case folding, they simply toLower their characters! This is of course more than suitable for ASCII encoded strings.

The instances for the Text types use toCaseFold which performs a better Unicode-aware case fold which is more suitable for case insensitive string comparisons.


foldCase :: s -> sSource