Given the type of bitstrings in Haskell:
data Bits = O Bits | I Bits | Nil
Are there compression algorithms that have satisfactory results (specially when it comes to repeated substrings), that are very small and simple to implement as idiomatic recursive Haskell functions? Ideally, the algorithm would operate on bitstrings, not lists of characters; thus, it should identify repeated substrings of arbitrary lengths and positions. I'm asking for references (i.e., names/citations); no need to post the complete code.