Bryan O'Sullivan avatar Bryan O'Sullivan committed 81b74a3

Try to make case mapping faster.

Comments (0)

Files changed (5)

Data/Text/Fusion/CaseMapping.hs

 import Data.Char
 import Data.Text.Fusion.Internal
 
-upperMapping :: forall s. Char -> s -> Step (PairS (PairS s Char) Char) Char
+upperMapping :: forall s. Char -> s -> Step (CC s) Char
 {-# INLINE upperMapping #-}
 -- LATIN SMALL LETTER SHARP S
-upperMapping '\x00df' s = Yield '\x0053' (s :*: '\x0053' :*: '\x0000')
+upperMapping '\x00df' s = Yield '\x0053' (CC s '\x0053' '\x0000')
 -- LATIN SMALL LIGATURE FF
-upperMapping '\xfb00' s = Yield '\x0046' (s :*: '\x0046' :*: '\x0000')
+upperMapping '\xfb00' s = Yield '\x0046' (CC s '\x0046' '\x0000')
 -- LATIN SMALL LIGATURE FI
-upperMapping '\xfb01' s = Yield '\x0046' (s :*: '\x0049' :*: '\x0000')
+upperMapping '\xfb01' s = Yield '\x0046' (CC s '\x0049' '\x0000')
 -- LATIN SMALL LIGATURE FL
-upperMapping '\xfb02' s = Yield '\x0046' (s :*: '\x004c' :*: '\x0000')
+upperMapping '\xfb02' s = Yield '\x0046' (CC s '\x004c' '\x0000')
 -- LATIN SMALL LIGATURE FFI
-upperMapping '\xfb03' s = Yield '\x0046' (s :*: '\x0046' :*: '\x0049')
+upperMapping '\xfb03' s = Yield '\x0046' (CC s '\x0046' '\x0049')
 -- LATIN SMALL LIGATURE FFL
-upperMapping '\xfb04' s = Yield '\x0046' (s :*: '\x0046' :*: '\x004c')
+upperMapping '\xfb04' s = Yield '\x0046' (CC s '\x0046' '\x004c')
 -- LATIN SMALL LIGATURE LONG S T
-upperMapping '\xfb05' s = Yield '\x0053' (s :*: '\x0054' :*: '\x0000')
+upperMapping '\xfb05' s = Yield '\x0053' (CC s '\x0054' '\x0000')
 -- LATIN SMALL LIGATURE ST
-upperMapping '\xfb06' s = Yield '\x0053' (s :*: '\x0054' :*: '\x0000')
+upperMapping '\xfb06' s = Yield '\x0053' (CC s '\x0054' '\x0000')
 -- ARMENIAN SMALL LIGATURE ECH YIWN
-upperMapping '\x0587' s = Yield '\x0535' (s :*: '\x0552' :*: '\x0000')
+upperMapping '\x0587' s = Yield '\x0535' (CC s '\x0552' '\x0000')
 -- ARMENIAN SMALL LIGATURE MEN NOW
-upperMapping '\xfb13' s = Yield '\x0544' (s :*: '\x0546' :*: '\x0000')
+upperMapping '\xfb13' s = Yield '\x0544' (CC s '\x0546' '\x0000')
 -- ARMENIAN SMALL LIGATURE MEN ECH
-upperMapping '\xfb14' s = Yield '\x0544' (s :*: '\x0535' :*: '\x0000')
+upperMapping '\xfb14' s = Yield '\x0544' (CC s '\x0535' '\x0000')
 -- ARMENIAN SMALL LIGATURE MEN INI
-upperMapping '\xfb15' s = Yield '\x0544' (s :*: '\x053b' :*: '\x0000')
+upperMapping '\xfb15' s = Yield '\x0544' (CC s '\x053b' '\x0000')
 -- ARMENIAN SMALL LIGATURE VEW NOW
-upperMapping '\xfb16' s = Yield '\x054e' (s :*: '\x0546' :*: '\x0000')
+upperMapping '\xfb16' s = Yield '\x054e' (CC s '\x0546' '\x0000')
 -- ARMENIAN SMALL LIGATURE MEN XEH
-upperMapping '\xfb17' s = Yield '\x0544' (s :*: '\x053d' :*: '\x0000')
+upperMapping '\xfb17' s = Yield '\x0544' (CC s '\x053d' '\x0000')
 -- LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-upperMapping '\x0149' s = Yield '\x02bc' (s :*: '\x004e' :*: '\x0000')
+upperMapping '\x0149' s = Yield '\x02bc' (CC s '\x004e' '\x0000')
 -- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-upperMapping '\x0390' s = Yield '\x0399' (s :*: '\x0308' :*: '\x0301')
+upperMapping '\x0390' s = Yield '\x0399' (CC s '\x0308' '\x0301')
 -- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-upperMapping '\x03b0' s = Yield '\x03a5' (s :*: '\x0308' :*: '\x0301')
+upperMapping '\x03b0' s = Yield '\x03a5' (CC s '\x0308' '\x0301')
 -- LATIN SMALL LETTER J WITH CARON
-upperMapping '\x01f0' s = Yield '\x004a' (s :*: '\x030c' :*: '\x0000')
+upperMapping '\x01f0' s = Yield '\x004a' (CC s '\x030c' '\x0000')
 -- LATIN SMALL LETTER H WITH LINE BELOW
-upperMapping '\x1e96' s = Yield '\x0048' (s :*: '\x0331' :*: '\x0000')
+upperMapping '\x1e96' s = Yield '\x0048' (CC s '\x0331' '\x0000')
 -- LATIN SMALL LETTER T WITH DIAERESIS
-upperMapping '\x1e97' s = Yield '\x0054' (s :*: '\x0308' :*: '\x0000')
+upperMapping '\x1e97' s = Yield '\x0054' (CC s '\x0308' '\x0000')
 -- LATIN SMALL LETTER W WITH RING ABOVE
-upperMapping '\x1e98' s = Yield '\x0057' (s :*: '\x030a' :*: '\x0000')
+upperMapping '\x1e98' s = Yield '\x0057' (CC s '\x030a' '\x0000')
 -- LATIN SMALL LETTER Y WITH RING ABOVE
-upperMapping '\x1e99' s = Yield '\x0059' (s :*: '\x030a' :*: '\x0000')
+upperMapping '\x1e99' s = Yield '\x0059' (CC s '\x030a' '\x0000')
 -- LATIN SMALL LETTER A WITH RIGHT HALF RING
-upperMapping '\x1e9a' s = Yield '\x0041' (s :*: '\x02be' :*: '\x0000')
+upperMapping '\x1e9a' s = Yield '\x0041' (CC s '\x02be' '\x0000')
 -- GREEK SMALL LETTER UPSILON WITH PSILI
-upperMapping '\x1f50' s = Yield '\x03a5' (s :*: '\x0313' :*: '\x0000')
+upperMapping '\x1f50' s = Yield '\x03a5' (CC s '\x0313' '\x0000')
 -- GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
-upperMapping '\x1f52' s = Yield '\x03a5' (s :*: '\x0313' :*: '\x0300')
+upperMapping '\x1f52' s = Yield '\x03a5' (CC s '\x0313' '\x0300')
 -- GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
-upperMapping '\x1f54' s = Yield '\x03a5' (s :*: '\x0313' :*: '\x0301')
+upperMapping '\x1f54' s = Yield '\x03a5' (CC s '\x0313' '\x0301')
 -- GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
-upperMapping '\x1f56' s = Yield '\x03a5' (s :*: '\x0313' :*: '\x0342')
+upperMapping '\x1f56' s = Yield '\x03a5' (CC s '\x0313' '\x0342')
 -- GREEK SMALL LETTER ALPHA WITH PERISPOMENI
-upperMapping '\x1fb6' s = Yield '\x0391' (s :*: '\x0342' :*: '\x0000')
+upperMapping '\x1fb6' s = Yield '\x0391' (CC s '\x0342' '\x0000')
 -- GREEK SMALL LETTER ETA WITH PERISPOMENI
-upperMapping '\x1fc6' s = Yield '\x0397' (s :*: '\x0342' :*: '\x0000')
+upperMapping '\x1fc6' s = Yield '\x0397' (CC s '\x0342' '\x0000')
 -- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
-upperMapping '\x1fd2' s = Yield '\x0399' (s :*: '\x0308' :*: '\x0300')
+upperMapping '\x1fd2' s = Yield '\x0399' (CC s '\x0308' '\x0300')
 -- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-upperMapping '\x1fd3' s = Yield '\x0399' (s :*: '\x0308' :*: '\x0301')
+upperMapping '\x1fd3' s = Yield '\x0399' (CC s '\x0308' '\x0301')
 -- GREEK SMALL LETTER IOTA WITH PERISPOMENI
-upperMapping '\x1fd6' s = Yield '\x0399' (s :*: '\x0342' :*: '\x0000')
+upperMapping '\x1fd6' s = Yield '\x0399' (CC s '\x0342' '\x0000')
 -- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
-upperMapping '\x1fd7' s = Yield '\x0399' (s :*: '\x0308' :*: '\x0342')
+upperMapping '\x1fd7' s = Yield '\x0399' (CC s '\x0308' '\x0342')
 -- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
-upperMapping '\x1fe2' s = Yield '\x03a5' (s :*: '\x0308' :*: '\x0300')
+upperMapping '\x1fe2' s = Yield '\x03a5' (CC s '\x0308' '\x0300')
 -- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
-upperMapping '\x1fe3' s = Yield '\x03a5' (s :*: '\x0308' :*: '\x0301')
+upperMapping '\x1fe3' s = Yield '\x03a5' (CC s '\x0308' '\x0301')
 -- GREEK SMALL LETTER RHO WITH PSILI
-upperMapping '\x1fe4' s = Yield '\x03a1' (s :*: '\x0313' :*: '\x0000')
+upperMapping '\x1fe4' s = Yield '\x03a1' (CC s '\x0313' '\x0000')
 -- GREEK SMALL LETTER UPSILON WITH PERISPOMENI
-upperMapping '\x1fe6' s = Yield '\x03a5' (s :*: '\x0342' :*: '\x0000')
+upperMapping '\x1fe6' s = Yield '\x03a5' (CC s '\x0342' '\x0000')
 -- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
-upperMapping '\x1fe7' s = Yield '\x03a5' (s :*: '\x0308' :*: '\x0342')
+upperMapping '\x1fe7' s = Yield '\x03a5' (CC s '\x0308' '\x0342')
 -- GREEK SMALL LETTER OMEGA WITH PERISPOMENI
-upperMapping '\x1ff6' s = Yield '\x03a9' (s :*: '\x0342' :*: '\x0000')
+upperMapping '\x1ff6' s = Yield '\x03a9' (CC s '\x0342' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
-upperMapping '\x1f80' s = Yield '\x1f08' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f80' s = Yield '\x1f08' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
-upperMapping '\x1f81' s = Yield '\x1f09' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f81' s = Yield '\x1f09' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-upperMapping '\x1f82' s = Yield '\x1f0a' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f82' s = Yield '\x1f0a' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-upperMapping '\x1f83' s = Yield '\x1f0b' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f83' s = Yield '\x1f0b' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-upperMapping '\x1f84' s = Yield '\x1f0c' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f84' s = Yield '\x1f0c' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-upperMapping '\x1f85' s = Yield '\x1f0d' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f85' s = Yield '\x1f0d' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-upperMapping '\x1f86' s = Yield '\x1f0e' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f86' s = Yield '\x1f0e' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-upperMapping '\x1f87' s = Yield '\x1f0f' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f87' s = Yield '\x1f0f' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-upperMapping '\x1f88' s = Yield '\x1f08' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f88' s = Yield '\x1f08' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-upperMapping '\x1f89' s = Yield '\x1f09' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f89' s = Yield '\x1f09' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-upperMapping '\x1f8a' s = Yield '\x1f0a' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f8a' s = Yield '\x1f0a' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-upperMapping '\x1f8b' s = Yield '\x1f0b' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f8b' s = Yield '\x1f0b' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-upperMapping '\x1f8c' s = Yield '\x1f0c' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f8c' s = Yield '\x1f0c' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-upperMapping '\x1f8d' s = Yield '\x1f0d' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f8d' s = Yield '\x1f0d' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-upperMapping '\x1f8e' s = Yield '\x1f0e' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f8e' s = Yield '\x1f0e' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-upperMapping '\x1f8f' s = Yield '\x1f0f' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f8f' s = Yield '\x1f0f' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
-upperMapping '\x1f90' s = Yield '\x1f28' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f90' s = Yield '\x1f28' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
-upperMapping '\x1f91' s = Yield '\x1f29' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f91' s = Yield '\x1f29' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-upperMapping '\x1f92' s = Yield '\x1f2a' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f92' s = Yield '\x1f2a' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-upperMapping '\x1f93' s = Yield '\x1f2b' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f93' s = Yield '\x1f2b' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-upperMapping '\x1f94' s = Yield '\x1f2c' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f94' s = Yield '\x1f2c' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-upperMapping '\x1f95' s = Yield '\x1f2d' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f95' s = Yield '\x1f2d' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-upperMapping '\x1f96' s = Yield '\x1f2e' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f96' s = Yield '\x1f2e' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-upperMapping '\x1f97' s = Yield '\x1f2f' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f97' s = Yield '\x1f2f' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-upperMapping '\x1f98' s = Yield '\x1f28' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f98' s = Yield '\x1f28' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-upperMapping '\x1f99' s = Yield '\x1f29' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f99' s = Yield '\x1f29' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-upperMapping '\x1f9a' s = Yield '\x1f2a' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f9a' s = Yield '\x1f2a' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-upperMapping '\x1f9b' s = Yield '\x1f2b' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f9b' s = Yield '\x1f2b' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-upperMapping '\x1f9c' s = Yield '\x1f2c' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f9c' s = Yield '\x1f2c' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-upperMapping '\x1f9d' s = Yield '\x1f2d' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f9d' s = Yield '\x1f2d' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-upperMapping '\x1f9e' s = Yield '\x1f2e' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f9e' s = Yield '\x1f2e' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-upperMapping '\x1f9f' s = Yield '\x1f2f' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1f9f' s = Yield '\x1f2f' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
-upperMapping '\x1fa0' s = Yield '\x1f68' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fa0' s = Yield '\x1f68' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
-upperMapping '\x1fa1' s = Yield '\x1f69' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fa1' s = Yield '\x1f69' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-upperMapping '\x1fa2' s = Yield '\x1f6a' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fa2' s = Yield '\x1f6a' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-upperMapping '\x1fa3' s = Yield '\x1f6b' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fa3' s = Yield '\x1f6b' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-upperMapping '\x1fa4' s = Yield '\x1f6c' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fa4' s = Yield '\x1f6c' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-upperMapping '\x1fa5' s = Yield '\x1f6d' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fa5' s = Yield '\x1f6d' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-upperMapping '\x1fa6' s = Yield '\x1f6e' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fa6' s = Yield '\x1f6e' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-upperMapping '\x1fa7' s = Yield '\x1f6f' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fa7' s = Yield '\x1f6f' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-upperMapping '\x1fa8' s = Yield '\x1f68' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fa8' s = Yield '\x1f68' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-upperMapping '\x1fa9' s = Yield '\x1f69' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fa9' s = Yield '\x1f69' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-upperMapping '\x1faa' s = Yield '\x1f6a' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1faa' s = Yield '\x1f6a' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-upperMapping '\x1fab' s = Yield '\x1f6b' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fab' s = Yield '\x1f6b' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-upperMapping '\x1fac' s = Yield '\x1f6c' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fac' s = Yield '\x1f6c' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-upperMapping '\x1fad' s = Yield '\x1f6d' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fad' s = Yield '\x1f6d' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-upperMapping '\x1fae' s = Yield '\x1f6e' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fae' s = Yield '\x1f6e' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-upperMapping '\x1faf' s = Yield '\x1f6f' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1faf' s = Yield '\x1f6f' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
-upperMapping '\x1fb3' s = Yield '\x0391' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fb3' s = Yield '\x0391' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-upperMapping '\x1fbc' s = Yield '\x0391' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fbc' s = Yield '\x0391' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
-upperMapping '\x1fc3' s = Yield '\x0397' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fc3' s = Yield '\x0397' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-upperMapping '\x1fcc' s = Yield '\x0397' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fcc' s = Yield '\x0397' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
-upperMapping '\x1ff3' s = Yield '\x03a9' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1ff3' s = Yield '\x03a9' (CC s '\x0399' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-upperMapping '\x1ffc' s = Yield '\x03a9' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1ffc' s = Yield '\x03a9' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
-upperMapping '\x1fb2' s = Yield '\x1fba' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fb2' s = Yield '\x1fba' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-upperMapping '\x1fb4' s = Yield '\x0386' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fb4' s = Yield '\x0386' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
-upperMapping '\x1fc2' s = Yield '\x1fca' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fc2' s = Yield '\x1fca' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-upperMapping '\x1fc4' s = Yield '\x0389' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1fc4' s = Yield '\x0389' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
-upperMapping '\x1ff2' s = Yield '\x1ffa' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1ff2' s = Yield '\x1ffa' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-upperMapping '\x1ff4' s = Yield '\x038f' (s :*: '\x0399' :*: '\x0000')
+upperMapping '\x1ff4' s = Yield '\x038f' (CC s '\x0399' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
-upperMapping '\x1fb7' s = Yield '\x0391' (s :*: '\x0342' :*: '\x0399')
+upperMapping '\x1fb7' s = Yield '\x0391' (CC s '\x0342' '\x0399')
 -- GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
-upperMapping '\x1fc7' s = Yield '\x0397' (s :*: '\x0342' :*: '\x0399')
+upperMapping '\x1fc7' s = Yield '\x0397' (CC s '\x0342' '\x0399')
 -- GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
-upperMapping '\x1ff7' s = Yield '\x03a9' (s :*: '\x0342' :*: '\x0399')
-upperMapping c s = Yield (toUpper c) (s :*: '\0' :*: '\0')
-lowerMapping :: forall s. Char -> s -> Step (PairS (PairS s Char) Char) Char
+upperMapping '\x1ff7' s = Yield '\x03a9' (CC s '\x0342' '\x0399')
+upperMapping c s = Yield (toUpper c) (CC s '\0' '\0')
+lowerMapping :: forall s. Char -> s -> Step (CC s) Char
 {-# INLINE lowerMapping #-}
 -- LATIN CAPITAL LETTER I WITH DOT ABOVE
-lowerMapping '\x0130' s = Yield '\x0069' (s :*: '\x0307' :*: '\x0000')
-lowerMapping c s = Yield (toLower c) (s :*: '\0' :*: '\0')
-foldMapping :: forall s. Char -> s -> Step (PairS (PairS s Char) Char) Char
+lowerMapping '\x0130' s = Yield '\x0069' (CC s '\x0307' '\x0000')
+lowerMapping c s = Yield (toLower c) (CC s '\0' '\0')
+foldMapping :: forall s. Char -> s -> Step (CC s) Char
 {-# INLINE foldMapping #-}
 -- MICRO SIGN
-foldMapping '\x00b5' s = Yield '\x03bc' (s :*: '\x0000' :*: '\x0000')
+foldMapping '\x00b5' s = Yield '\x03bc' (CC s '\x0000' '\x0000')
 -- LATIN SMALL LETTER SHARP S
-foldMapping '\x00df' s = Yield '\x0073' (s :*: '\x0073' :*: '\x0000')
+foldMapping '\x00df' s = Yield '\x0073' (CC s '\x0073' '\x0000')
 -- LATIN CAPITAL LETTER I WITH DOT ABOVE
-foldMapping '\x0130' s = Yield '\x0069' (s :*: '\x0307' :*: '\x0000')
+foldMapping '\x0130' s = Yield '\x0069' (CC s '\x0307' '\x0000')
 -- LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-foldMapping '\x0149' s = Yield '\x02bc' (s :*: '\x006e' :*: '\x0000')
+foldMapping '\x0149' s = Yield '\x02bc' (CC s '\x006e' '\x0000')
 -- LATIN SMALL LETTER LONG S
-foldMapping '\x017f' s = Yield '\x0073' (s :*: '\x0000' :*: '\x0000')
+foldMapping '\x017f' s = Yield '\x0073' (CC s '\x0000' '\x0000')
 -- LATIN SMALL LETTER J WITH CARON
-foldMapping '\x01f0' s = Yield '\x006a' (s :*: '\x030c' :*: '\x0000')
+foldMapping '\x01f0' s = Yield '\x006a' (CC s '\x030c' '\x0000')
 -- COMBINING GREEK YPOGEGRAMMENI
-foldMapping '\x0345' s = Yield '\x03b9' (s :*: '\x0000' :*: '\x0000')
+foldMapping '\x0345' s = Yield '\x03b9' (CC s '\x0000' '\x0000')
 -- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-foldMapping '\x0390' s = Yield '\x03b9' (s :*: '\x0308' :*: '\x0301')
+foldMapping '\x0390' s = Yield '\x03b9' (CC s '\x0308' '\x0301')
 -- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-foldMapping '\x03b0' s = Yield '\x03c5' (s :*: '\x0308' :*: '\x0301')
+foldMapping '\x03b0' s = Yield '\x03c5' (CC s '\x0308' '\x0301')
 -- GREEK SMALL LETTER FINAL SIGMA
-foldMapping '\x03c2' s = Yield '\x03c3' (s :*: '\x0000' :*: '\x0000')
+foldMapping '\x03c2' s = Yield '\x03c3' (CC s '\x0000' '\x0000')
 -- GREEK BETA SYMBOL
-foldMapping '\x03d0' s = Yield '\x03b2' (s :*: '\x0000' :*: '\x0000')
+foldMapping '\x03d0' s = Yield '\x03b2' (CC s '\x0000' '\x0000')
 -- GREEK THETA SYMBOL
-foldMapping '\x03d1' s = Yield '\x03b8' (s :*: '\x0000' :*: '\x0000')
+foldMapping '\x03d1' s = Yield '\x03b8' (CC s '\x0000' '\x0000')
 -- GREEK PHI SYMBOL
-foldMapping '\x03d5' s = Yield '\x03c6' (s :*: '\x0000' :*: '\x0000')
+foldMapping '\x03d5' s = Yield '\x03c6' (CC s '\x0000' '\x0000')
 -- GREEK PI SYMBOL
-foldMapping '\x03d6' s = Yield '\x03c0' (s :*: '\x0000' :*: '\x0000')
+foldMapping '\x03d6' s = Yield '\x03c0' (CC s '\x0000' '\x0000')
 -- GREEK KAPPA SYMBOL
-foldMapping '\x03f0' s = Yield '\x03ba' (s :*: '\x0000' :*: '\x0000')
+foldMapping '\x03f0' s = Yield '\x03ba' (CC s '\x0000' '\x0000')
 -- GREEK RHO SYMBOL
-foldMapping '\x03f1' s = Yield '\x03c1' (s :*: '\x0000' :*: '\x0000')
+foldMapping '\x03f1' s = Yield '\x03c1' (CC s '\x0000' '\x0000')
 -- GREEK LUNATE EPSILON SYMBOL
-foldMapping '\x03f5' s = Yield '\x03b5' (s :*: '\x0000' :*: '\x0000')
+foldMapping '\x03f5' s = Yield '\x03b5' (CC s '\x0000' '\x0000')
 -- ARMENIAN SMALL LIGATURE ECH YIWN
-foldMapping '\x0587' s = Yield '\x0565' (s :*: '\x0582' :*: '\x0000')
+foldMapping '\x0587' s = Yield '\x0565' (CC s '\x0582' '\x0000')
 -- LATIN SMALL LETTER H WITH LINE BELOW
-foldMapping '\x1e96' s = Yield '\x0068' (s :*: '\x0331' :*: '\x0000')
+foldMapping '\x1e96' s = Yield '\x0068' (CC s '\x0331' '\x0000')
 -- LATIN SMALL LETTER T WITH DIAERESIS
-foldMapping '\x1e97' s = Yield '\x0074' (s :*: '\x0308' :*: '\x0000')
+foldMapping '\x1e97' s = Yield '\x0074' (CC s '\x0308' '\x0000')
 -- LATIN SMALL LETTER W WITH RING ABOVE
-foldMapping '\x1e98' s = Yield '\x0077' (s :*: '\x030a' :*: '\x0000')
+foldMapping '\x1e98' s = Yield '\x0077' (CC s '\x030a' '\x0000')
 -- LATIN SMALL LETTER Y WITH RING ABOVE
-foldMapping '\x1e99' s = Yield '\x0079' (s :*: '\x030a' :*: '\x0000')
+foldMapping '\x1e99' s = Yield '\x0079' (CC s '\x030a' '\x0000')
 -- LATIN SMALL LETTER A WITH RIGHT HALF RING
-foldMapping '\x1e9a' s = Yield '\x0061' (s :*: '\x02be' :*: '\x0000')
+foldMapping '\x1e9a' s = Yield '\x0061' (CC s '\x02be' '\x0000')
 -- LATIN SMALL LETTER LONG S WITH DOT ABOVE
-foldMapping '\x1e9b' s = Yield '\x1e61' (s :*: '\x0000' :*: '\x0000')
+foldMapping '\x1e9b' s = Yield '\x1e61' (CC s '\x0000' '\x0000')
 -- LATIN CAPITAL LETTER SHARP S
-foldMapping '\x1e9e' s = Yield '\x0073' (s :*: '\x0073' :*: '\x0000')
+foldMapping '\x1e9e' s = Yield '\x0073' (CC s '\x0073' '\x0000')
 -- GREEK SMALL LETTER UPSILON WITH PSILI
-foldMapping '\x1f50' s = Yield '\x03c5' (s :*: '\x0313' :*: '\x0000')
+foldMapping '\x1f50' s = Yield '\x03c5' (CC s '\x0313' '\x0000')
 -- GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
-foldMapping '\x1f52' s = Yield '\x03c5' (s :*: '\x0313' :*: '\x0300')
+foldMapping '\x1f52' s = Yield '\x03c5' (CC s '\x0313' '\x0300')
 -- GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
-foldMapping '\x1f54' s = Yield '\x03c5' (s :*: '\x0313' :*: '\x0301')
+foldMapping '\x1f54' s = Yield '\x03c5' (CC s '\x0313' '\x0301')
 -- GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
-foldMapping '\x1f56' s = Yield '\x03c5' (s :*: '\x0313' :*: '\x0342')
+foldMapping '\x1f56' s = Yield '\x03c5' (CC s '\x0313' '\x0342')
 -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
-foldMapping '\x1f80' s = Yield '\x1f00' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f80' s = Yield '\x1f00' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
-foldMapping '\x1f81' s = Yield '\x1f01' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f81' s = Yield '\x1f01' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-foldMapping '\x1f82' s = Yield '\x1f02' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f82' s = Yield '\x1f02' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-foldMapping '\x1f83' s = Yield '\x1f03' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f83' s = Yield '\x1f03' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-foldMapping '\x1f84' s = Yield '\x1f04' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f84' s = Yield '\x1f04' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-foldMapping '\x1f85' s = Yield '\x1f05' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f85' s = Yield '\x1f05' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-foldMapping '\x1f86' s = Yield '\x1f06' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f86' s = Yield '\x1f06' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-foldMapping '\x1f87' s = Yield '\x1f07' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f87' s = Yield '\x1f07' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-foldMapping '\x1f88' s = Yield '\x1f00' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f88' s = Yield '\x1f00' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-foldMapping '\x1f89' s = Yield '\x1f01' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f89' s = Yield '\x1f01' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-foldMapping '\x1f8a' s = Yield '\x1f02' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f8a' s = Yield '\x1f02' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-foldMapping '\x1f8b' s = Yield '\x1f03' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f8b' s = Yield '\x1f03' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-foldMapping '\x1f8c' s = Yield '\x1f04' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f8c' s = Yield '\x1f04' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-foldMapping '\x1f8d' s = Yield '\x1f05' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f8d' s = Yield '\x1f05' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-foldMapping '\x1f8e' s = Yield '\x1f06' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f8e' s = Yield '\x1f06' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-foldMapping '\x1f8f' s = Yield '\x1f07' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f8f' s = Yield '\x1f07' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
-foldMapping '\x1f90' s = Yield '\x1f20' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f90' s = Yield '\x1f20' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
-foldMapping '\x1f91' s = Yield '\x1f21' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f91' s = Yield '\x1f21' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-foldMapping '\x1f92' s = Yield '\x1f22' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f92' s = Yield '\x1f22' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-foldMapping '\x1f93' s = Yield '\x1f23' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f93' s = Yield '\x1f23' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-foldMapping '\x1f94' s = Yield '\x1f24' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f94' s = Yield '\x1f24' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-foldMapping '\x1f95' s = Yield '\x1f25' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f95' s = Yield '\x1f25' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-foldMapping '\x1f96' s = Yield '\x1f26' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f96' s = Yield '\x1f26' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-foldMapping '\x1f97' s = Yield '\x1f27' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f97' s = Yield '\x1f27' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-foldMapping '\x1f98' s = Yield '\x1f20' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f98' s = Yield '\x1f20' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-foldMapping '\x1f99' s = Yield '\x1f21' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f99' s = Yield '\x1f21' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-foldMapping '\x1f9a' s = Yield '\x1f22' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f9a' s = Yield '\x1f22' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-foldMapping '\x1f9b' s = Yield '\x1f23' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f9b' s = Yield '\x1f23' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-foldMapping '\x1f9c' s = Yield '\x1f24' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f9c' s = Yield '\x1f24' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-foldMapping '\x1f9d' s = Yield '\x1f25' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f9d' s = Yield '\x1f25' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-foldMapping '\x1f9e' s = Yield '\x1f26' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f9e' s = Yield '\x1f26' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-foldMapping '\x1f9f' s = Yield '\x1f27' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1f9f' s = Yield '\x1f27' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
-foldMapping '\x1fa0' s = Yield '\x1f60' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fa0' s = Yield '\x1f60' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
-foldMapping '\x1fa1' s = Yield '\x1f61' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fa1' s = Yield '\x1f61' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-foldMapping '\x1fa2' s = Yield '\x1f62' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fa2' s = Yield '\x1f62' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-foldMapping '\x1fa3' s = Yield '\x1f63' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fa3' s = Yield '\x1f63' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-foldMapping '\x1fa4' s = Yield '\x1f64' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fa4' s = Yield '\x1f64' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-foldMapping '\x1fa5' s = Yield '\x1f65' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fa5' s = Yield '\x1f65' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-foldMapping '\x1fa6' s = Yield '\x1f66' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fa6' s = Yield '\x1f66' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-foldMapping '\x1fa7' s = Yield '\x1f67' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fa7' s = Yield '\x1f67' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-foldMapping '\x1fa8' s = Yield '\x1f60' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fa8' s = Yield '\x1f60' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-foldMapping '\x1fa9' s = Yield '\x1f61' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fa9' s = Yield '\x1f61' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-foldMapping '\x1faa' s = Yield '\x1f62' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1faa' s = Yield '\x1f62' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-foldMapping '\x1fab' s = Yield '\x1f63' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fab' s = Yield '\x1f63' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-foldMapping '\x1fac' s = Yield '\x1f64' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fac' s = Yield '\x1f64' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-foldMapping '\x1fad' s = Yield '\x1f65' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fad' s = Yield '\x1f65' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-foldMapping '\x1fae' s = Yield '\x1f66' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fae' s = Yield '\x1f66' (CC s '\x03b9' '\x0000')
 -- GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-foldMapping '\x1faf' s = Yield '\x1f67' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1faf' s = Yield '\x1f67' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
-foldMapping '\x1fb2' s = Yield '\x1f70' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fb2' s = Yield '\x1f70' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
-foldMapping '\x1fb3' s = Yield '\x03b1' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fb3' s = Yield '\x03b1' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-foldMapping '\x1fb4' s = Yield '\x03ac' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fb4' s = Yield '\x03ac' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH PERISPOMENI
-foldMapping '\x1fb6' s = Yield '\x03b1' (s :*: '\x0342' :*: '\x0000')
+foldMapping '\x1fb6' s = Yield '\x03b1' (CC s '\x0342' '\x0000')
 -- GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
-foldMapping '\x1fb7' s = Yield '\x03b1' (s :*: '\x0342' :*: '\x03b9')
+foldMapping '\x1fb7' s = Yield '\x03b1' (CC s '\x0342' '\x03b9')
 -- GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-foldMapping '\x1fbc' s = Yield '\x03b1' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fbc' s = Yield '\x03b1' (CC s '\x03b9' '\x0000')
 -- GREEK PROSGEGRAMMENI
-foldMapping '\x1fbe' s = Yield '\x03b9' (s :*: '\x0000' :*: '\x0000')
+foldMapping '\x1fbe' s = Yield '\x03b9' (CC s '\x0000' '\x0000')
 -- GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
-foldMapping '\x1fc2' s = Yield '\x1f74' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fc2' s = Yield '\x1f74' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
-foldMapping '\x1fc3' s = Yield '\x03b7' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fc3' s = Yield '\x03b7' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-foldMapping '\x1fc4' s = Yield '\x03ae' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fc4' s = Yield '\x03ae' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER ETA WITH PERISPOMENI
-foldMapping '\x1fc6' s = Yield '\x03b7' (s :*: '\x0342' :*: '\x0000')
+foldMapping '\x1fc6' s = Yield '\x03b7' (CC s '\x0342' '\x0000')
 -- GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
-foldMapping '\x1fc7' s = Yield '\x03b7' (s :*: '\x0342' :*: '\x03b9')
+foldMapping '\x1fc7' s = Yield '\x03b7' (CC s '\x0342' '\x03b9')
 -- GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-foldMapping '\x1fcc' s = Yield '\x03b7' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1fcc' s = Yield '\x03b7' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
-foldMapping '\x1fd2' s = Yield '\x03b9' (s :*: '\x0308' :*: '\x0300')
+foldMapping '\x1fd2' s = Yield '\x03b9' (CC s '\x0308' '\x0300')
 -- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-foldMapping '\x1fd3' s = Yield '\x03b9' (s :*: '\x0308' :*: '\x0301')
+foldMapping '\x1fd3' s = Yield '\x03b9' (CC s '\x0308' '\x0301')
 -- GREEK SMALL LETTER IOTA WITH PERISPOMENI
-foldMapping '\x1fd6' s = Yield '\x03b9' (s :*: '\x0342' :*: '\x0000')
+foldMapping '\x1fd6' s = Yield '\x03b9' (CC s '\x0342' '\x0000')
 -- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
-foldMapping '\x1fd7' s = Yield '\x03b9' (s :*: '\x0308' :*: '\x0342')
+foldMapping '\x1fd7' s = Yield '\x03b9' (CC s '\x0308' '\x0342')
 -- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
-foldMapping '\x1fe2' s = Yield '\x03c5' (s :*: '\x0308' :*: '\x0300')
+foldMapping '\x1fe2' s = Yield '\x03c5' (CC s '\x0308' '\x0300')
 -- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
-foldMapping '\x1fe3' s = Yield '\x03c5' (s :*: '\x0308' :*: '\x0301')
+foldMapping '\x1fe3' s = Yield '\x03c5' (CC s '\x0308' '\x0301')
 -- GREEK SMALL LETTER RHO WITH PSILI
-foldMapping '\x1fe4' s = Yield '\x03c1' (s :*: '\x0313' :*: '\x0000')
+foldMapping '\x1fe4' s = Yield '\x03c1' (CC s '\x0313' '\x0000')
 -- GREEK SMALL LETTER UPSILON WITH PERISPOMENI
-foldMapping '\x1fe6' s = Yield '\x03c5' (s :*: '\x0342' :*: '\x0000')
+foldMapping '\x1fe6' s = Yield '\x03c5' (CC s '\x0342' '\x0000')
 -- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
-foldMapping '\x1fe7' s = Yield '\x03c5' (s :*: '\x0308' :*: '\x0342')
+foldMapping '\x1fe7' s = Yield '\x03c5' (CC s '\x0308' '\x0342')
 -- GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
-foldMapping '\x1ff2' s = Yield '\x1f7c' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1ff2' s = Yield '\x1f7c' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
-foldMapping '\x1ff3' s = Yield '\x03c9' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1ff3' s = Yield '\x03c9' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-foldMapping '\x1ff4' s = Yield '\x03ce' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1ff4' s = Yield '\x03ce' (CC s '\x03b9' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH PERISPOMENI
-foldMapping '\x1ff6' s = Yield '\x03c9' (s :*: '\x0342' :*: '\x0000')
+foldMapping '\x1ff6' s = Yield '\x03c9' (CC s '\x0342' '\x0000')
 -- GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
-foldMapping '\x1ff7' s = Yield '\x03c9' (s :*: '\x0342' :*: '\x03b9')
+foldMapping '\x1ff7' s = Yield '\x03c9' (CC s '\x0342' '\x03b9')
 -- GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-foldMapping '\x1ffc' s = Yield '\x03c9' (s :*: '\x03b9' :*: '\x0000')
+foldMapping '\x1ffc' s = Yield '\x03c9' (CC s '\x03b9' '\x0000')
 -- LATIN SMALL LIGATURE FF
-foldMapping '\xfb00' s = Yield '\x0066' (s :*: '\x0066' :*: '\x0000')
+foldMapping '\xfb00' s = Yield '\x0066' (CC s '\x0066' '\x0000')
 -- LATIN SMALL LIGATURE FI
-foldMapping '\xfb01' s = Yield '\x0066' (s :*: '\x0069' :*: '\x0000')
+foldMapping '\xfb01' s = Yield '\x0066' (CC s '\x0069' '\x0000')
 -- LATIN SMALL LIGATURE FL
-foldMapping '\xfb02' s = Yield '\x0066' (s :*: '\x006c' :*: '\x0000')
+foldMapping '\xfb02' s = Yield '\x0066' (CC s '\x006c' '\x0000')
 -- LATIN SMALL LIGATURE FFI
-foldMapping '\xfb03' s = Yield '\x0066' (s :*: '\x0066' :*: '\x0069')
+foldMapping '\xfb03' s = Yield '\x0066' (CC s '\x0066' '\x0069')
 -- LATIN SMALL LIGATURE FFL
-foldMapping '\xfb04' s = Yield '\x0066' (s :*: '\x0066' :*: '\x006c')
+foldMapping '\xfb04' s = Yield '\x0066' (CC s '\x0066' '\x006c')
 -- LATIN SMALL LIGATURE LONG S T
-foldMapping '\xfb05' s = Yield '\x0073' (s :*: '\x0074' :*: '\x0000')
+foldMapping '\xfb05' s = Yield '\x0073' (CC s '\x0074' '\x0000')
 -- LATIN SMALL LIGATURE ST
-foldMapping '\xfb06' s = Yield '\x0073' (s :*: '\x0074' :*: '\x0000')
+foldMapping '\xfb06' s = Yield '\x0073' (CC s '\x0074' '\x0000')
 -- ARMENIAN SMALL LIGATURE MEN NOW
-foldMapping '\xfb13' s = Yield '\x0574' (s :*: '\x0576' :*: '\x0000')
+foldMapping '\xfb13' s = Yield '\x0574' (CC s '\x0576' '\x0000')
 -- ARMENIAN SMALL LIGATURE MEN ECH
-foldMapping '\xfb14' s = Yield '\x0574' (s :*: '\x0565' :*: '\x0000')
+foldMapping '\xfb14' s = Yield '\x0574' (CC s '\x0565' '\x0000')
 -- ARMENIAN SMALL LIGATURE MEN INI
-foldMapping '\xfb15' s = Yield '\x0574' (s :*: '\x056b' :*: '\x0000')
+foldMapping '\xfb15' s = Yield '\x0574' (CC s '\x056b' '\x0000')
 -- ARMENIAN SMALL LIGATURE VEW NOW
-foldMapping '\xfb16' s = Yield '\x057e' (s :*: '\x0576' :*: '\x0000')
+foldMapping '\xfb16' s = Yield '\x057e' (CC s '\x0576' '\x0000')
 -- ARMENIAN SMALL LIGATURE MEN XEH
-foldMapping '\xfb17' s = Yield '\x0574' (s :*: '\x056d' :*: '\x0000')
-foldMapping c s = Yield (toLower c) (s :*: '\0' :*: '\0')
+foldMapping '\xfb17' s = Yield '\x0574' (CC s '\x056d' '\x0000')
+foldMapping c s = Yield (toLower c) (CC s '\0' '\0')

Data/Text/Fusion/Common.hs

 -- functions may map one input character to two or three output
 -- characters.
 
-caseConvert :: (forall s. Char -> s -> Step (PairS (PairS s Char) Char) Char)
+caseConvert :: (forall s. Char -> s -> Step (CC s) Char)
             -> Stream Char -> Stream Char
-caseConvert remap (Stream next0 s0 len) = Stream next (s0 :*: '\0' :*: '\0') len
+caseConvert remap (Stream next0 s0 len) = Stream next (CC s0 '\0' '\0') len
   where
-    {-# INLINE next #-}
-    next (s :*: '\0' :*: _) =
+    next (CC s '\0' _) =
         case next0 s of
           Done       -> Done
-          Skip s'    -> Skip (s' :*: '\0' :*: '\0')
+          Skip s'    -> Skip (CC s' '\0' '\0')
           Yield c s' -> remap c s'
-    next (s :*: a :*: b) = Yield a (s :*: b :*: '\0')
+    next (CC s a b)  =  Yield a (CC s b '\0')
 
 -- | /O(n)/ Convert a string to folded case.  This function is mainly
 -- useful for performing caseless (or case insensitive) string
     | n < 0     = empty
     | otherwise = Stream next 0 (fromIntegral n) -- HINT maybe too low
   where
-    {-# INLINE next #-}
     next i | i >= n    = Done
            | otherwise = Yield c (i + 1)
 {-# INLINE [0] replicateCharI #-}

Data/Text/Fusion/Internal.hs

 
 module Data.Text.Fusion.Internal
     (
-      M(..)
+      CC(..)
+    , M(..)
     , M8
     , PairS(..)
     , S(..)
 import Data.Text.Fusion.Size
 import Data.Word (Word8)
 
+-- | Specialised tuple for case conversion.
+data CC s = CC !s {-# UNPACK #-} !Char {-# UNPACK #-} !Char
+
 -- | Specialised, strict Maybe-like type.
 data M a = N
          | J {-# UNPACK #-} !a

scripts/CaseFolding.hs

 mapCF :: [Fold] -> [String]
 mapCF ms = typ ++ (map nice . filter p $ ms) ++ [last]
   where
-    typ = ["foldMapping :: forall s. Char -> s -> Step (PairS (PairS s Char) Char) Char"
+    typ = ["foldMapping :: forall s. Char -> s -> Step (CC s) Char"
            ,"{-# INLINE foldMapping #-}"]
-    last = "foldMapping c s = Yield (toLower c) (s :!: '\\0' :!: '\\0')"
+    last = "foldMapping c s = Yield (toLower c) (CC s '\\0' '\\0')"
     nice c = "-- " ++ name c ++ "\n" ++
-             "foldMapping " ++ showC (code c) ++ " s = Yield " ++ x ++ " (s :!: " ++ y ++ " :!: " ++ z ++ ")"
+             "foldMapping " ++ showC (code c) ++ " s = Yield " ++ x ++ " (CC s " ++ y ++ " " ++ z ++ ")"
        where [x,y,z] = (map showC . take 3) (mapping c ++ repeat '\0')
     p f = status f `elem` "CF" &&
           mapping f /= [toLower (code f)]

scripts/SpecialCasing.hs

 mapSC :: String -> (Case -> String) -> (Char -> Char) -> [Case] -> [String]
 mapSC which access twiddle ms = typ ++ (map nice . filter p $ ms) ++ [last]
   where
-    typ = [which ++ "Mapping :: forall s. Char -> s -> Step (PairS (PairS s Char) Char) Char"
+    typ = [which ++ "Mapping :: forall s. Char -> s -> Step (CC s) Char"
            ,"{-# INLINE " ++ which ++ "Mapping #-}"]
-    last = which ++ "Mapping c s = Yield (to" ++ ucFirst which ++ " c) (s :!: '\\0' :!: '\\0')"
+    last = which ++ "Mapping c s = Yield (to" ++ ucFirst which ++ " c) (CC s '\\0' '\\0')"
     nice c = "-- " ++ name c ++ "\n" ++
-             which ++ "Mapping " ++ showC (code c) ++ " s = Yield " ++ x ++ " (s :!: " ++ y ++ " :!: " ++ z ++ ")"
+             which ++ "Mapping " ++ showC (code c) ++ " s = Yield " ++ x ++ " (CC s " ++ y ++ " " ++ z ++ ")"
        where [x,y,z] = (map showC . take 3) (access c ++ repeat '\0')
     p c = [k] /= a && a /= [twiddle k] && null (conditions c)
         where a = access c
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.