diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -34,51 +34,9 @@
 
 ## Road Map
 
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-01-26  v0.0.0.1  Pre-release (I)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-01-30  v0.0.0.2  Pre-release (II)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-02-18  v0.1.0.0  [Proposed core API with presentable Haddocks](https://github.com/iconnect/regex/milestone/1)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-02-19  v0.2.0.0  [Package split into regex and regex-examples](https://github.com/iconnect/regex/milestone/5)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-02-20  v0.2.0.1  [Remove library from regex-examples](https://github.com/iconnect/regex/issues/43)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-02-21  v0.2.0.2  [Fix tests for Hackage](https://github.com/iconnect/regex/issues/45)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-02-21  v0.2.0.3  Tweak README/index layout
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-02-22  v0.2.0.4  [Repair re-gen-modules-test for Windows](https://github.com/iconnect/regex/issues/47)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-02-26  v0.3.0.0  [API adjustments](https://github.com/iconnect/regex/milestone/2)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-03-05  v0.5.0.0  [Ready for review: API, tutorials and examples finalized](https://github.com/iconnect/regex/issues/67)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-03-13  v0.6.0.0  [Split out PCRE](https://github.com/iconnect/regex/milestone/7)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-03-13  v0.6.0.1  [Fix .travis.yml release-stack script](https://github.com/iconnect/regex/issues/67)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-03-15  v0.7.0.0  [Better organization of API](https://github.com/iconnect/regex/milestone/8)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-03-16  v0.8.0.0  [Tidy up the API](https://github.com/iconnect/regex/milestone/10)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-03-24  v0.9.0.0  [Finish tidying up the API, Add type-safe replacement templates and exploit TemplateHaskellQuotes](https://github.com/iconnect/regex/milestone/9)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-03-27  v0.10.0.2 [Tweak Templates, Fix release scripts and update Haddocks commentary](https://github.com/iconnect/regex/milestone/12)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-03-28  v0.10.0.3 [Upgrade to LTS 8.6 and Improve Haddocks for Text.RE.{TDFA,PCRE}](https://github.com/iconnect/regex/milestone/13)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-03-29  v0.11.0.0 [Simplify the API](https://github.com/iconnect/regex/milestone/14)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-03-30  v0.11.1.0 [Fix the Haddocks](https://github.com/iconnect/regex/milestone/15)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-03-31  v0.12.0.0 [Move IsRegex into Text.RE](https://github.com/iconnect/regex/milestone/16)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-04-03  v0.13.0.0 [Protect findCaptureID and add Find, re-sort-imports](https://github.com/iconnect/regex/milestone/17)
-
-&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-04-04  v0.14.0.0 [Move IsOption, rename Find functions](https://github.com/iconnect/regex/milestone/18)
-
 &nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-04-10  v1.0.0.0  [First stable release](https://github.com/iconnect/regex/milestone/3)
+
+&nbsp;&nbsp;&nbsp;&nbsp;&#x2612;&nbsp;&nbsp;2017-06-03  v1.0.1.0  [PCRE.Text, strict PVP, Update Stackage vrns, add re-top](https://github.com/iconnect/regex/milestone/19)
 
 &nbsp;&nbsp;&nbsp;&nbsp;&#x2610;&nbsp;&nbsp;2017-08-31  v2.0.0.0  [Fast text replacement with benchmarks](https://github.com/iconnect/regex/milestone/4)
 
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,5 +1,11 @@
 -*-change-log-*-
 
+1.0.1.0 Chris Dornan <chris.dornan@irisconnect.co.uk> 2017-06-05
+  * Text.RE.PCRE.Text[.Lazy] (#58)
+  * Update LSTHaskell versions (#136)
+  * Add re-top example (#137)
+  * Regex library to conform with strict PVP (#138)
+
 1.0.0.0 Chris Dornan <chris.dornan@irisconnect.co.uk> 2017-04-10
   * Rewrite tutorials (#113)
   * Add Text.RE.Tools.IsRegex (#122)
diff --git a/data/2015-16-premierleague.txt b/data/2015-16-premierleague.txt
new file mode 100644
--- /dev/null
+++ b/data/2015-16-premierleague.txt
@@ -0,0 +1,563 @@
+####################################
+# English Premier League 2015/16
+
+
+Matchday 1
+
+[Sat Aug/8]
+  Manchester United      1-0  Tottenham Hotspur
+  AFC Bournemouth        0-1  Aston Villa
+  Everton FC             2-2  Watford FC
+  Leicester City         4-2  Sunderland AFC
+  Norwich City           1-3  Crystal Palace
+  Chelsea FC             2-2  Swansea City
+[Sun Aug/9]
+  Arsenal FC             0-2  West Ham United
+  Newcastle United       2-2  Southampton FC
+  Stoke City             0-1  Liverpool FC
+[Mon Aug/10]
+  West Bromwich Albion   0-3  Manchester City
+
+Matchday 2
+
+[Fri Aug/14]
+  Aston Villa            0-1  Manchester United
+[Sat Aug/15]
+  Southampton FC         0-3  Everton FC
+  Sunderland AFC         1-3  Norwich City
+  Swansea City           2-0  Newcastle United
+  Tottenham Hotspur      2-2  Stoke City
+  Watford FC             0-0  West Bromwich Albion
+  West Ham United        1-2  Leicester City
+[Sun Aug/16]
+  Crystal Palace         1-2  Arsenal FC
+  Manchester City        3-0  Chelsea FC
+[Mon Aug/17]
+  Liverpool FC           1-0  AFC Bournemouth
+
+Matchday 3
+[Sat Aug/22]
+  Manchester United      0-0  Newcastle United
+  Crystal Palace         2-1  Aston Villa
+  Leicester City         1-1  Tottenham Hotspur
+  Norwich City           1-1  Stoke City
+  Sunderland AFC         1-1  Swansea City
+  West Ham United        3-4  AFC Bournemouth
+[Sun Aug/23]
+  West Bromwich Albion   2-3  Chelsea FC
+  Everton FC             0-2  Manchester City
+  Watford FC             0-0  Southampton FC
+[Mon Aug/24]
+  Arsenal FC             0-0  Liverpool FC
+
+Matchday 4
+[Sat Aug/29]
+  Newcastle United       0-1  Arsenal FC
+  AFC Bournemouth        1-1  Leicester City
+  Aston Villa            2-2  Sunderland AFC
+  Chelsea FC             1-2  Crystal Palace
+  Liverpool FC           0-3  West Ham United
+  Manchester City        2-0  Watford FC
+  Stoke City             0-1  West Bromwich Albion
+  Tottenham Hotspur      0-0  Everton FC
+[Sun Aug/30]
+  Southampton FC         3-0  Norwich City
+  Swansea City           2-1  Manchester United
+
+Matchday 5
+
+[Sat Sept/12]
+  Everton FC             3-1  Chelsea FC
+  Arsenal FC             2-0  Stoke City
+  Crystal Palace         0-1  Manchester City
+  Norwich City           3-1  AFC Bournemouth
+  Watford FC             1-0  Swansea City
+  West Bromwich Albion   0-0  Southampton FC
+  Manchester United      3-1  Liverpool FC
+[Sun Sept/13]
+  Sunderland AFC         0-1  Tottenham Hotspur
+  Leicester City         3-2  Aston Villa
+[Mon Sept/14]
+  West Ham United        2-0  Newcastle United
+
+Matchday 6
+
+[Sat Sept/19]
+  Chelsea FC             2-0  Arsenal FC
+  AFC Bournemouth        2-0  Sunderland AFC
+  Aston Villa            0-1  West Bromwich Albion
+  Newcastle United       1-2  Watford FC
+  Stoke City             2-2  Leicester City
+  Swansea City           0-0  Everton FC
+  Manchester City        1-2  West Ham United
+[Sun Sept/20]
+  Tottenham Hotspur      1-0  Crystal Palace
+  Liverpool FC           1-1  Norwich City
+  Southampton FC         2-3  Manchester United
+
+Matchday 7
+
+[Sat Sept/26]
+  Tottenham Hotspur      4-1  Manchester City
+  Leicester City         2-5  Arsenal FC
+  Liverpool FC           3-2  Aston Villa
+  Manchester United      3-0  Sunderland AFC
+  Southampton FC         3-1  Swansea City
+  Stoke City             2-1  AFC Bournemouth
+  West Ham United        2-2  Norwich City
+  Newcastle United       2-2  Chelsea FC
+[Sun Sept/27]
+  Watford FC             0-1  Crystal Palace
+[Mon Sept/28]
+  West Bromwich Albion   2-3  Everton FC
+
+Matchday 8
+[Sat Oct/3]
+  AFC Bournemouth        1-1  Watford FC
+  Arsenal FC             3-0  Manchester United
+  Aston Villa            0-1  Stoke City
+  Chelsea FC             1-3  Southampton FC
+  Crystal Palace         2-0  West Bromwich Albion
+  Everton FC             1-1  Liverpool FC
+  Manchester City        6-1  Newcastle United
+  Norwich City           1-2  Leicester City
+  Sunderland AFC         2-2  West Ham United
+  Swansea City           2-2  Tottenham Hotspur
+
+Matchday 9
+[Sat Oct/17]
+Chelsea FC               2-0  Aston Villa
+Crystal Palace           1-3  West Ham United
+Everton FC               0-3  Manchester United
+Manchester City          5-1  AFC Bournemouth
+Newcastle United         6-2  Norwich City
+Southampton FC           2-2  Leicester City
+Swansea City             0-1  Stoke City
+Tottenham Hotspur        0-0  Liverpool FC
+Watford FC               0-3  Arsenal FC
+West Bromwich Albion     1-0  Sunderland AFC
+
+Matchday 10
+[Sat Oct/24]
+AFC Bournemouth          1-5  Tottenham Hotspur
+Arsenal FC               2-1  Everton FC
+Aston Villa              1-2  Swansea City
+Leicester City           1-0  Crystal Palace
+Liverpool FC             1-1  Southampton FC
+Manchester United        0-0  Manchester City
+Norwich City             0-1  West Bromwich Albion
+Stoke City               0-2  Watford FC
+Sunderland AFC           3-0  Newcastle United
+West Ham United          2-1  Chelsea FC
+
+Matchday 11
+[Sat Oct/31]
+Chelsea FC               1-3  Liverpool FC
+Crystal Palace           0-0  Manchester United
+Everton FC               6-2  Sunderland AFC
+Manchester City          2-1  Norwich City
+Newcastle United         0-0  Stoke City
+Southampton FC           2-0  AFC Bournemouth
+Swansea City             0-3  Arsenal FC
+Tottenham Hotspur        3-1  Aston Villa
+Watford FC               2-0  West Ham United
+West Bromwich Albion     2-3  Leicester City
+
+Matchday 12
+[Sat Nov/7]
+AFC Bournemouth          0-1  Newcastle United
+Arsenal FC               1-1  Tottenham Hotspur
+Aston Villa              0-0  Manchester City
+Leicester City           2-1  Watford FC
+Liverpool FC             1-2  Crystal Palace
+Manchester United        2-0  West Bromwich Albion
+Norwich City             1-0  Swansea City
+Stoke City               1-0  Chelsea FC
+Sunderland AFC           0-1  Southampton FC
+West Ham United          1-1  Everton FC
+
+Matchday 13
+[Sat Nov/21]
+Chelsea FC               1-0  Norwich City
+Crystal Palace           0-1  Sunderland AFC
+Everton FC               4-0  Aston Villa
+Manchester City          1-4  Liverpool FC
+Newcastle United         0-3  Leicester City
+Southampton FC           0-1  Stoke City
+Swansea City             2-2  AFC Bournemouth
+Tottenham Hotspur        4-1  West Ham United
+Watford FC               1-2  Manchester United
+West Bromwich Albion     2-1  Arsenal FC
+
+Matchday 14
+[Sat Nov/28]
+AFC Bournemouth          3-3  Everton FC
+Aston Villa              2-3  Watford FC
+Crystal Palace           5-1  Newcastle United
+Leicester City           1-1  Manchester United
+Liverpool FC             1-0  Swansea City
+Manchester City          3-1  Southampton FC
+Norwich City             1-1  Arsenal FC
+Sunderland AFC           2-0  Stoke City
+Tottenham Hotspur        0-0  Chelsea FC
+West Ham United          1-1  West Bromwich Albion
+
+Matchday 15
+[Sat Dec/5]
+Arsenal FC               3-1  Sunderland AFC
+Chelsea FC               0-1  AFC Bournemouth
+Everton FC               1-1  Crystal Palace
+Manchester United        0-0  West Ham United
+Newcastle United         2-0  Liverpool FC
+Southampton FC           1-1  Aston Villa
+Stoke City               2-0  Manchester City
+Swansea City             0-3  Leicester City
+Watford FC               2-0  Norwich City
+West Bromwich Albion     1-1  Tottenham Hotspur
+
+Matchday 16
+[Sat Dec/12]
+AFC Bournemouth          2-1  Manchester United
+Aston Villa              0-2  Arsenal FC
+Crystal Palace           1-0  Southampton FC
+Leicester City           2-1  Chelsea FC
+Liverpool FC             2-2  West Bromwich Albion
+Manchester City          2-1  Swansea City
+Norwich City             1-1  Everton FC
+Sunderland AFC           0-1  Watford FC
+Tottenham Hotspur        1-2  Newcastle United
+West Ham United          0-0  Stoke City
+
+Matchday 17
+[Sat Dec/19]
+Arsenal FC               2-1  Manchester City
+Chelsea FC               3-1  Sunderland AFC
+Everton FC               2-3  Leicester City
+Manchester United        1-2  Norwich City
+Newcastle United         1-1  Aston Villa
+Southampton FC           0-2  Tottenham Hotspur
+Stoke City               1-2  Crystal Palace
+Swansea City             0-0  West Ham United
+Watford FC               3-0  Liverpool FC
+West Bromwich Albion     1-2  AFC Bournemouth
+
+Matchday 18
+[Sat Dec/26]
+AFC Bournemouth          0-0  Crystal Palace
+Aston Villa              1-1  West Ham United
+Chelsea FC               2-2  Watford FC
+Liverpool FC             1-0  Leicester City
+Manchester City          4-1  Sunderland AFC
+Newcastle United         0-1  Everton FC
+Southampton FC           4-0  Arsenal FC
+Stoke City               2-0  Manchester United
+Swansea City             1-0  West Bromwich Albion
+Tottenham Hotspur        3-0  Norwich City
+
+Matchday 19
+[Mon Dec/28]
+Arsenal FC               2-0  AFC Bournemouth
+Crystal Palace           0-0  Swansea City
+Everton FC               3-4  Stoke City
+Leicester City           0-0  Manchester City
+Manchester United        0-0  Chelsea FC
+Norwich City             2-0  Aston Villa
+Sunderland AFC           0-1  Liverpool FC
+Watford FC               1-2  Tottenham Hotspur
+West Bromwich Albion     1-0  Newcastle United
+West Ham United          2-1  Southampton FC
+
+###################################
+# English Premier League 2015/16
+
+
+Matchday 20
+[Sat Jan/2]
+Arsenal FC              1-0  Newcastle United
+Leicester City          0-0  AFC Bournemouth
+Manchester United       2-1  Swansea City
+Norwich City            1-0  Southampton FC
+Sunderland AFC          3-1  Aston Villa
+Watford FC              1-2  Manchester City
+West Bromwich Albion    2-1  Stoke City
+West Ham United         2-0  Liverpool FC
+[Sun Jan/3]
+Crystal Palace          0-3  Chelsea FC
+Everton FC              1-1  Tottenham Hotspur
+
+Matchday 21
+[Tue Jan/12]
+  AFC Bournemouth       1-3  West Ham United
+  Aston Villa           1-0  Crystal Palace
+  Liverpool FC          3-3  Arsenal FC
+  Swansea City          2-4  Sunderland AFC
+[Wed Jan/13]
+  Chelsea FC            2-2  West Bromwich Albion
+  Manchester City       0-0  Everton FC
+  Newcastle United      3-3  Manchester United
+  Southampton FC        2-0  Watford FC
+  Stoke City            3-1  Norwich City
+  Tottenham Hotspur     0-1  Leicester City
+
+Matchday 22
+[Sat Jan/16]
+AFC Bournemouth         3-0  Norwich City
+Aston Villa             1-1  Leicester City
+Chelsea FC              3-3  Everton FC
+Manchester City         4-0  Crystal Palace
+Newcastle United        2-1  West Ham United
+Southampton FC          3-0  West Bromwich Albion
+Tottenham Hotspur       4-1  Sunderland AFC
+[Sun Jan/17]
+Liverpool FC            0-1  Manchester United
+Stoke City              0-0  Arsenal FC
+[Mon Jan/18]
+Swansea City            1-0  Watford FC
+
+Matchday 23
+[Sat Jan/23]
+  Crystal Palace        1-3  Tottenham Hotspur
+  Leicester City        3-0  Stoke City
+  Manchester United     0-1  Southampton FC
+  Norwich City          4-5  Liverpool FC
+  Sunderland AFC        1-1  AFC Bournemouth
+  Watford FC            2-1  Newcastle United
+  West Bromwich Albion  0-0  Aston Villa
+  West Ham United       2-2  Manchester City
+[Sun Jan/24]
+  Arsenal FC            0-1  Chelsea FC
+  Everton FC            1-2  Swansea City
+
+Matchday 24
+[Tue Feb/2]
+  Arsenal FC            0-0  Southampton FC
+  Crystal Palace        1-2  AFC Bournemouth
+  Leicester City        2-0  Liverpool FC
+  Manchester United     3-0  Stoke City
+  Norwich City          0-3  Tottenham Hotspur
+  Sunderland AFC        0-1  Manchester City
+  Watford FC            0-0  Chelsea FC
+  West Bromwich Albion  1-1  Swansea City
+  West Ham United       2-0  Aston Villa
+[Wed Feb/3]
+  Everton FC            3-0  Newcastle United
+
+Matchday 25
+[Sat Feb/6]
+Aston Villa             2-0  Norwich City
+Liverpool FC            2-2  Sunderland AFC
+Manchester City         1-3  Leicester City
+Newcastle United        1-0  West Bromwich Albion
+Stoke City              0-3  Everton FC
+Swansea City            1-1  Crystal Palace
+Tottenham Hotspur       1-0  Watford FC
+[Sun Feb/7]
+AFC Bournemouth         0-2  Arsenal FC
+Chelsea FC              1-1  Manchester United
+[Mon Feb/8]
+Southampton FC          1-0  West Ham United
+
+Matchday 26
+[Sat Feb/13]
+AFC Bournemouth         1-3  Stoke City
+Chelsea FC              5-1  Newcastle United
+Crystal Palace          1-2  Watford FC
+Everton FC              0-1  West Bromwich Albion
+Norwich City            2-2  West Ham United
+Sunderland AFC          2-1  Manchester United
+Swansea City            0-1  Southampton FC
+[Sun Feb/14]
+Arsenal FC              2-1  Leicester City
+Aston Villa             0-6  Liverpool FC
+Manchester City         1-2  Tottenham Hotspur
+
+Matchday 27
+[Sat Feb/27]
+Leicester City          1-0  Norwich City
+Southampton FC          1-2  Chelsea FC
+Stoke City              2-1  Aston Villa
+Watford FC              0-0  AFC Bournemouth
+West Bromwich Albion    3-2  Crystal Palace
+West Ham United         1-0  Sunderland AFC
+[Sun Feb/28]
+Liverpool FC            4-0  Everton FC      
+Manchester United       3-2  Arsenal FC
+Newcastle United        1-1  Manchester City     
+Tottenham Hotspur       2-1  Swansea City
+
+Matchday 28
+[Tue Mar/1]
+  AFC Bournemouth       2-0  Southampton FC
+  Aston Villa           1-3  Everton FC
+  Leicester City        2-2  West Bromwich Albion
+  Norwich City          1-2  Chelsea FC
+  Sunderland AFC        2-2  Crystal Palace
+[Wed Mar/2]
+  Arsenal FC            1-2  Swansea City
+  Liverpool FC          3-0  Manchester City
+  Manchester United     1-0  Watford FC
+  Stoke City            1-0  Newcastle United
+  West Ham United       1-0  Tottenham Hotspur
+  
+Matchday 29
+[Sat Mar/5]
+Chelsea FC              1-1  Stoke City
+Everton FC              2-3  West Ham United
+Manchester City         4-0  Aston Villa
+Newcastle United        1-3  AFC Bournemouth
+Southampton FC          1-1  Sunderland AFC
+Swansea City            1-0  Norwich City
+Tottenham Hotspur       2-2  Arsenal FC
+Watford FC              0-1  Leicester City
+[Sun Mar/6]
+Crystal Palace          1-2  Liverpool FC
+West Bromwich Albion    1-0  Manchester United
+
+Matchday 30
+[Sat Mar/12]
+AFC Bournemouth         3-2  Swansea City
+Arsenal FC              2-0  West Bromwich Albion     
+Aston Villa             0-2  Tottenham Hotspur
+Manchester United       2-0  Crystal Palace   
+Norwich City            0-0  Manchester City
+Stoke City              1-2  Southampton FC
+Sunderland AFC          3-0  Everton FC     
+West Ham United         3-1  Watford FC    
+[Sun Mar/13]
+Liverpool FC            1-1  Chelsea FC       
+[Mon Mar/14]
+Leicester City          1-0  Newcastle United
+
+Matchday 31
+[Sat Mar/19]
+Chelsea FC              2-2  West Ham United
+Crystal Palace          0-1  Leicester City
+Everton FC              0-2  Arsenal FC
+Southampton FC          3-2  Liverpool FC
+Swansea City            1-0  Aston Villa
+Tottenham Hotspur       3-0  AFC Bournemouth
+Watford FC              1-2  Stoke City
+West Bromwich Albion    0-1  Norwich City
+[Sun Mar/20]
+Manchester City         0-1  Manchester United
+Newcastle United        1-1  Sunderland AFC
+
+Matchday 32
+[Sat Apr/2]
+AFC Bournemouth         0-4  Manchester City
+Arsenal FC              4-0  Watford FC
+Aston Villa             0-4  Chelsea FC
+Leicester City          1-0  Southampton FC
+Liverpool FC            1-1  Tottenham Hotspur
+Manchester United       1-0  Everton FC
+Norwich City            3-2  Newcastle United
+Stoke City              2-2  Swansea City
+Sunderland AFC          0-0  West Bromwich Albion
+West Ham United         2-2  Crystal Palace
+
+Matchday 33
+[Sat Apr/9]
+Aston Villa             1-2  AFC Bournemouth
+Crystal Palace          1-0  Norwich City
+Liverpool FC            4-1  Stoke City
+Manchester City         2-1  West Bromwich Albion
+Southampton FC          3-1  Newcastle United
+Sunderland AFC          0-2  Leicester City
+Swansea City            1-0  Chelsea FC
+Tottenham Hotspur       3-0  Manchester United
+Watford FC              1-1  Everton FC
+West Ham United         3-3  Arsenal FC
+
+Matchday 34
+[Sat Apr/16]
+AFC Bournemouth         1-2  Liverpool FC
+Arsenal FC              1-1  Crystal Palace
+Chelsea FC              0-3  Manchester City
+Everton FC              1-1  Southampton FC
+Leicester City          2-2  West Ham United
+Manchester United       1-0  Aston Villa
+Newcastle United        3-0  Swansea City
+Norwich City            0-3  Sunderland AFC
+Stoke City              0-4  Tottenham Hotspur
+West Bromwich Albion    0-1  Watford FC
+
+Matchday 35
+[Sat Apr/23]
+AFC Bournemouth         1-4  Chelsea FC
+Aston Villa             2-4  Southampton FC
+Crystal Palace          0-0  Everton FC
+Leicester City          4-0  Swansea City
+Liverpool FC            2-2  Newcastle United
+Manchester City         4-0  Stoke City
+Norwich City            4-2  Watford FC        
+Sunderland AFC          0-0  Arsenal FC
+Tottenham Hotspur       1-1  West Bromwich Albion
+West Ham United         3-2  Manchester United      
+
+Matchday 36
+[Sat Apr/30]
+Arsenal FC              1-0  Norwich City
+Chelsea FC              2-2  Tottenham Hotspur
+Everton FC              2-1  AFC Bournemouth
+Manchester United       1-1  Leicester City
+Newcastle United        1-0  Crystal Palace
+Southampton FC          4-2  Manchester City
+Stoke City              1-1  Sunderland AFC
+Swansea City            3-1  Liverpool FC
+Watford FC              3-2  Aston Villa
+West Bromwich Albion    0-3  West Ham United
+
+Leicester erstmals englischer Fussballmeister!
+
+Absteiger  Premiere League: Aston Villa, Newcastle United, Norwich City.
+Aufsteiger in Premiere League: Burnley, FC Middlesborough, 1 Platz noch offen. 
+
+Matchday 37
+[Sat May/7]
+AFC Bournemouth         1-1  West Bromwich Albion
+Aston Villa             0-0  Newcastle United
+Crystal Palace          2-1  Stoke City
+Leicester City          3-1  Everton FC
+Liverpool FC            2-0  Watford FC
+Manchester City         2-2  Arsenal FC
+Norwich City            0-1  Manchester United
+Sunderland AFC          3-2  Chelsea FC
+Tottenham Hotspur       1-2  Southampton FC
+West Ham United         1-4  Swansea City
+
+Matchday 38
+[Sun May/15]
+Arsenal FC              4-0  Aston Villa
+Chelsea FC              1-1  Leicester City
+Everton FC              3-0  Norwich City
+Manchester United       3-1  AFC Bournemouth       
+Newcastle United        5-1  Tottenham Hotspur
+Southampton FC          4-1  Crystal Palace
+Stoke City              2-1  West Ham United
+Swansea City            1-1  Manchester City
+Watford FC              2-2  Sunderland AFC
+West Bromwich Albion    1-1  Liverpool FC
+
+
+Play-Off um 1 Premierleague-Platz:
+
+13.5.16  Sheffield Wednesday  2-0 Brighton&Hove Albion 
+16.5.16  Brighton&Hove Albion 1-1 Sheffield Wednesday
+
+14.5.16  Derby Country        0-3 Hull City
+17.5.16  Hull City            0-2 Derby Country  
+
+
+28.5.16  Hull City 1-0 Sheffield Wednesday
+
+3. Aufsteiger in Premierleague:
+
+Hull City.
+
+
+Premierleague 2015/16 beendet. 
+
+Premierleague 2016/17 beginnt am 13.08.2016.
+
+
+
diff --git a/data/league-table.md b/data/league-table.md
new file mode 100644
--- /dev/null
+++ b/data/league-table.md
@@ -0,0 +1,11 @@
+# Premier League 2015-16: Top 7
+
+Pos|Club                 |Played |Won    |Drawn  |Lost   |GF     |GA     |GD     |Points 
+---|---------------------|-------|-------|-------|-------|-------|-------|-------|-------
+1  |West Ham United      |12     |5      |4      |3      |19     |18     |1      |19     
+2  |Tottenham Hotspur    |12     |5      |3      |4      |20     |12     |8      |18     
+3  |Leicester City       |12     |4      |6      |2      |17     |16     |1      |18     
+4  |Southampton FC       |12     |5      |2      |5      |18     |16     |2      |17     
+5  |Arsenal FC           |12     |4      |5      |3      |22     |21     |1      |17     
+6  |Manchester United    |12     |4      |4      |4      |12     |16     |-4     |16     
+7  |Manchester City      |12     |1      |4      |7      |14     |23     |-9     |7      
diff --git a/examples/TestKit.lhs b/examples/TestKit.lhs
--- a/examples/TestKit.lhs
+++ b/examples/TestKit.lhs
@@ -29,6 +29,8 @@
   , cmp
   , dumpMacroTable
   , sortImports
+  , groupSort
+  , groupSortBy
   , read_file
   , write_file
   ) where
@@ -291,6 +293,37 @@
     (hdr,bdy) = span (not . anyMatches . getLineMatches) lns
     lns       = grepFilter rex lbs
     rex       = [re|^import +(qualified|         ) ${mod}([^ ].*)$|]
+\end{code}
+
+
+
+groupSort and groupSortBy
+-------------------------
+
+\begin{code}
+-- | Sort a list of elements with a stable sort, grouping together the
+-- equal elements with the argument grouping function
+groupSort :: (Ord a) => (a->[a]->b) -> [a] -> [b]
+groupSort = groupSortBy compare
+
+-- | Sort a list of elements with a stable sort, grouping together the
+-- equal elements with the argument grouping function.
+groupSortBy :: (a->a->Ordering)
+            -> (a->[a]->b)
+            -> [a]
+            -> [b]
+groupSortBy comp grp = aggregate . L.sortBy comp
+  where
+    aggregate []    = []
+    aggregate (h:t) = seq g $ g : aggregate rst
+      where
+        g         = grp h eqs
+        (eqs,rst) = span is_le t
+
+        is_le x   = case comp x h of
+          LT -> True
+          EQ -> True
+          GT -> False
 \end{code}
 
 
diff --git a/examples/re-gen-modules.lhs b/examples/re-gen-modules.lhs
--- a/examples/re-gen-modules.lhs
+++ b/examples/re-gen-modules.lhs
@@ -17,6 +17,7 @@
 module Main (main) where
 
 import qualified Data.ByteString.Lazy.Char8               as LBS
+import           Data.Monoid
 import qualified Data.Text                                as T
 import           Prelude.Compat
 import           System.Directory
@@ -105,10 +106,12 @@
 
 pcre_api_edits :: [(ModPath,SedScript)]
 pcre_api_edits =
-  [ pcre_api_edit "PCRE.ByteString"       "B.ByteString"    "import qualified Data.ByteString               as B"
-  , pcre_api_edit "PCRE.ByteString.Lazy"  "LBS.ByteString"  "import qualified Data.ByteString.Lazy          as LBS"
-  , pcre_api_edit "PCRE.Sequence"         "(S.Seq Char)"    "import qualified Data.Sequence                 as S"
-  , pcre_api_edit "PCRE.String"           "String"          ""
+  [ pcre_api_edit "PCRE.ByteString"       "B.ByteString"    "import qualified Data.ByteString               as B"   False
+  , pcre_api_edit "PCRE.ByteString.Lazy"  "LBS.ByteString"  "import qualified Data.ByteString.Lazy          as LBS" False
+  , pcre_api_edit "PCRE.Sequence"         "(S.Seq Char)"    "import qualified Data.Sequence                 as S"   False
+  , pcre_api_edit "PCRE.String"           "String"          ""                                                      False
+  , pcre_api_edit "PCRE.Text"             "T.Text"          "import qualified Data.Text                     as T"   True
+  , pcre_api_edit "PCRE.Text.Lazy"        "TL.Text"         "import qualified Data.Text.Lazy                as TL"  True
   ]
 
 tdfa_api_edit :: ModPath
@@ -127,25 +130,33 @@
 pcre_api_edit :: ModPath
               -> LBS.ByteString
               -> LBS.ByteString
+              -> Bool
               -> (ModPath,SedScript)
-pcre_api_edit mp bs_lbs import_lbs =
-    (,) fmp $ Pipe
+pcre_api_edit mp bs_lbs import_lbs is_orp =
+    (,) fmp $ Pipe $
         [ Template $ SearchReplace tdfa_re     "PCRE"
         , Template $ SearchReplace module_re $ LBS.pack mp
         , Template $ SearchReplace import_re   import_lbs
         , Template $ SearchReplace bs_re       bs_lbs
-        ]
+        ] ++
+        [ Template $ SearchReplace orp_re    $ orphan_import mp
+          | is_orp
+          ]
   where
     fmp = "Text.RE." ++ mp
 
 source_api_mp :: ModPath
 source_api_mp = "Text.RE.TDFA.ByteString.Lazy"
 
-tdfa_re, module_re, import_re, bs_re :: RE
+orphan_import :: ModPath -> LBS.ByteString
+orphan_import mp = "import           Text.Regex." <> LBS.pack mp <> "()"
+
+tdfa_re, module_re, import_re, bs_re, orp_re :: RE
 tdfa_re   = [re|TDFA|]
 module_re = [re|TDFA.ByteString.Lazy|]
 import_re = [re|import qualified Data.ByteString.Lazy.Char8 *as LBS|]
 bs_re     = [re|LBS.ByteString|]
+orp_re    = [re|^-- NB regex-base instance imports.*$|]
 
 
 ------------------------------------------------------------------------
@@ -206,6 +217,16 @@
       , Template [ed|import qualified Data.ByteString.Lazy.Char8    as LBS///|]
       , Template [ed|LBS.ByteString///String|]
       , Template [ed|Text.RE.ZeInternals.TDFA///Text.RE.ZeInternals.PCRE|]
+      ]
+  , (,) "Text.RE.ZeInternals.SearchReplace.PCRE.Text" $ pipe
+      [ Template [ed|SearchReplace.TDFA.ByteString.Lazy///SearchReplace.PCRE.Text|]
+      , Template [ed|Data.ByteString.Lazy.Char8    as LBS///Data.Text                     as T|]
+      , Template [ed|LBS.ByteString///T.Text|]
+      ]
+  , (,) "Text.RE.ZeInternals.SearchReplace.PCRE.Text.Lazy" $ pipe
+      [ Template [ed|SearchReplace.TDFA.ByteString.Lazy///SearchReplace.PCRE.Text.Lazy|]
+      , Template [ed|Data.ByteString.Lazy.Char8    as LBS///Data.Text.Lazy                as TL|]
+      , Template [ed|LBS.ByteString///TL.Text|]
       ]
   ]
   where
diff --git a/examples/re-prep.lhs b/examples/re-prep.lhs
--- a/examples/re-prep.lhs
+++ b/examples/re-prep.lhs
@@ -96,6 +96,7 @@
     pd "re-nginx-log-processor"
     pd "re-prep"
     pd "re-sort-imports"
+    pd "re-top"
     pd "re-tests"
     pd "TestKit"
     pd "RE/REOptions"
diff --git a/examples/re-tests.lhs b/examples/re-tests.lhs
--- a/examples/re-tests.lhs
+++ b/examples/re-tests.lhs
@@ -53,6 +53,8 @@
 import qualified Text.RE.PCRE.ByteString.Lazy   as PLBS
 import qualified Text.RE.PCRE.Sequence          as P_SQ
 import qualified Text.RE.PCRE.String            as P_ST
+import qualified Text.RE.PCRE.Text              as P_TX
+import qualified Text.RE.PCRE.Text.Lazy         as PLTX
 import           Text.RE.REOptions
 import           Text.RE.Replace
 import           Text.RE.TDFA                   as TDFA
@@ -382,7 +384,9 @@
     , testg "TDFA.op/LBS"    (TLBS.?=~/) (TLBS.*=~/) tdfa_sr
     , testg "PCRE.op/LBS"    (PLBS.?=~/) (PLBS.*=~/) pcre_sr
     , testg "TDFA.op/T"      (T_TX.?=~/) (T_TX.*=~/) tdfa_sr
+    , testg "PCRE.op/T"      (P_TX.?=~/) (P_TX.*=~/) pcre_sr
     , testg "TDFA.op/LT"     (TLTX.?=~/) (TLTX.*=~/) tdfa_sr
+    , testg "PCRE.op/LT"     (PLTX.?=~/) (PLTX.*=~/) pcre_sr
     , testG "TDFA.op/S"      (T_SQ.?=~/) (T_SQ.*=~/) tdfa_sr
     , testG "PCRE.op/S"      (P_SQ.?=~/) (P_SQ.*=~/) pcre_sr
     ]
@@ -482,6 +486,8 @@
     , testCase "PCRE ByteString.Lazy" $ test (PLBS.*=~) (PLBS.?=~) (PLBS.=~) (PLBS.=~~) matchOnce matchMany makeSearchReplace LBS.pack    re_pcre
     , testCase "PCRE Sequence"        $ test (P_SQ.*=~) (P_SQ.?=~) (P_SQ.=~) (P_SQ.=~~) matchOnce matchMany makeSearchReplace S.fromList  re_pcre
     , testCase "PCRE String"          $ test (P_ST.*=~) (P_ST.?=~) (P_ST.=~) (P_ST.=~~) matchOnce matchMany makeSearchReplace id          re_pcre
+    , testCase "PCRE Text"            $ test (P_TX.*=~) (P_TX.?=~) (P_TX.=~) (P_TX.=~~) matchOnce matchMany makeSearchReplace T.pack      re_pcre
+    , testCase "PCRE Text.Lazy"       $ test (PLTX.*=~) (PLTX.?=~) (PLTX.=~) (PLTX.=~~) matchOnce matchMany makeSearchReplace LT.pack     re_pcre
     , testCase "TDFA a"               $ test (TDFA.*=~) (TDFA.?=~) (TDFA.=~) (TDFA.=~~) matchOnce matchMany makeSearchReplace id          re_tdfa
     , testCase "TDFA ByteString"      $ test (T_BS.*=~) (T_BS.?=~) (T_BS.=~) (T_BS.=~~) matchOnce matchMany makeSearchReplace B.pack      re_tdfa
     , testCase "TDFA ByteString.Lazy" $ test (TLBS.*=~) (TLBS.?=~) (TLBS.=~) (TLBS.=~~) matchOnce matchMany makeSearchReplace LBS.pack    re_tdfa
@@ -699,6 +705,7 @@
   , "examples/re-prep.lhs"
   , "examples/re-sort-imports.lhs"
   , "examples/re-tests.lhs"
+  , "examples/re-top.lhs"
   , "examples/re-tutorial-options.lhs"
   , "examples/re-tutorial-replacing.lhs"
   , "examples/re-tutorial-testbench.lhs"
diff --git a/examples/re-top.lhs b/examples/re-top.lhs
new file mode 100644
--- /dev/null
+++ b/examples/re-top.lhs
@@ -0,0 +1,797 @@
+top: Calculating league table variations for the Premier League
+===============================================================
+
+This program calculates top-n league tables for the Premier League based
+on this [openfootball
+data](https://github.com/cdornan/eng-england/tree/corrections).
+
+The program has enough data to self-test but to generate any useful data
+you will need to clone [this
+repo](git@github.com:cdornan/eng-england.git) into the parent directory
+and checkout the 'corrections' branch.
+
+\begin{code}
+{-# LANGUAGE NoImplicitPrelude            #-}
+{-# LANGUAGE RecordWildCards              #-}
+{-# LANGUAGE OverloadedStrings            #-}
+{-# LANGUAGE QuasiQuotes                  #-}
+
+module Main(main) where
+
+import qualified Control.Monad         as M
+import           Data.Functor.Identity
+import qualified Data.HashMap.Lazy     as HML
+import qualified Data.List             as L
+import           Data.Maybe
+import           Data.Monoid
+import           Data.Ord
+import qualified Data.Text             as T
+import qualified Data.Text.IO          as T
+import           Data.Time
+import           Prelude.Compat
+import qualified Shelly                as SH
+import           System.Directory
+import           System.Environment
+import           System.Exit
+import           System.FilePath
+import           System.IO
+import           TestKit
+import           Text.RE.Summa
+import qualified Text.RE.TDFA         as TDFA
+import           Text.RE.TDFA.Text
+import           Text.Read
+\end{code}
+
+
+The CLI parser yields a list of jobs to generate or check various
+league tables.
+
+\begin{code}
+main :: IO ()
+main = parseCLI >>= mapM_ job
+\end{code}
+
+
+Data Types
+----------
+
+A Job contains everything we need to generate a league table, and what
+to do with it.
+
+\begin{code}
+data Job =
+  Job
+    { jobTitle  :: T.Text     -- ^ title for the table
+    , jobSize   :: Maybe Int  -- ^ a full table or a top-n table
+    , jobInputs :: [FilePath] -- ^ the files containing the game data
+    , jobIsTest :: Bool       -- ^ are we testing o/p or writing it
+    , jobIsHtml :: Bool       -- ^ are we generating HTML from markdown
+    , jobOutput :: FilePath   -- ^ where is the output
+    }
+  deriving (Show)
+\end{code}
+
+A match result lists the data in the usual order:
+
+    <home-team> <home-score> <away-score> <away-team>
+
+\begin{code}
+data Game = Game Team Int Int Team
+  deriving (Eq,Ord,Read,Show)
+\end{code}
+
+A league table is a list of teams and their results with the ordering
+on everything is arranged so that the list can be sorted with the
+default `Ord` ordering to arrange the table according to PL conventions.
+
+\begin{code}
+newtype Table = Table { getTable :: [(Results,Team)] }
+  deriving (Show)
+\end{code}
+
+Teams are just Text containing the names used by the openfootball data.
+
+\begin{code}
+type Team = T.Text
+\end{code}
+
+Results contain everything we need to generate a league table.
+
+\begin{code}
+data Results =
+  Results
+    { resultsGamesPlayed  :: Int
+    , resultsGamesWon     :: Int
+    , resultsGoalsFor     :: Int
+    , resultsGoalsAgainst :: Int
+    , resultsPointsScored :: Int
+    }
+  deriving (Show)
+\end{code}
+
+These vectors have expected zeros and sums.
+
+\begin{code}
+instance Monoid Results where
+  mempty  = Results 0 0 0 0 0
+  mappend (Results gp1 gw1 gf1 ga1 ps1)
+          (Results gp2 gw2 gf2 ga2 ps2) =
+      Results (gp1+gp2)
+              (gw1+gw2)
+              (gf1+gf2)
+              (ga1+ga2)
+              (ps1+ps2)
+\end{code}
+
+PL results are ordered by (points,goal-difference,goals-scored).
+
+\begin{code}
+instance Ord Results where
+  compare = comparing $ \Results{..} ->
+      ( resultsPointsScored
+      , resultsGoalsFor - resultsGoalsAgainst
+      , resultsGoalsFor
+      )
+
+instance Eq Results where
+  (==) x y = compare x y == EQ
+\end{code}
+
+
+Executing Jobs
+--------------
+
+\begin{code}
+job :: Job -> IO ()
+job jb = top jb <$> input jb >>= output jb
+\end{code}
+
+Compute a Table from Game data according to the jobSize parameter.
+\begin{code}
+top :: Job -> [Game] -> Table
+top Job{..} mtchs = case jobSize of
+    Nothing -> full_tbl
+    Just n  -> aggregate $
+      filterGames (topTeams n full_tbl) mtchs
+  where
+    full_tbl = aggregate mtchs
+\end{code}
+
+Calculate the top n teams in a table.
+
+\begin{code}
+topTeams :: Int -> Table -> [Team]
+topTeams n = map snd . take n . getTable
+\end{code}
+
+Filter game data to only include games between the listed teams.
+
+\begin{code}
+filterGames :: [Team] -> [Game] -> [Game]
+filterGames tms = filter $ \(Game h _ _ a) ->
+    h `elem` tms && a `elem` tms
+\end{code}
+
+Aggregate game data into a table.
+
+\begin{code}
+aggregate :: [Game] -> Table
+aggregate mtchs = sortResults $
+    map homeResults mtchs ++ map awayResults mtchs
+\end{code}
+
+Generate the results for the home team from a Game result.
+
+\begin{code}
+homeResults :: Game -> (Results,Team)
+homeResults (Game h hs as _) = flip (,) h
+    Results
+      { resultsGamesPlayed  = 1
+      , resultsGamesWon     = wins   $ hs - as
+      , resultsGoalsFor     = hs
+      , resultsGoalsAgainst = as
+      , resultsPointsScored = points $ hs - as
+      }
+\end{code}
+
+Generate the results for the away team from a Game result.
+
+\begin{code}
+awayResults :: Game -> (Results,Team)
+awayResults (Game _ hs as a) = flip (,) a
+    Results
+      { resultsGamesPlayed  = 1
+      , resultsGamesWon     = wins   $ as - hs
+      , resultsGoalsFor     = as
+      , resultsGoalsAgainst = hs
+      , resultsPointsScored = points $ as - hs
+      }
+\end{code}
+
+Calculate the points accruing to a team from their goal difference
+for a game.
+
+\begin{code}
+points :: Int -> Int
+points gd = case compare gd 0 of
+  LT -> 0
+  EQ -> 1
+  GT -> 3
+\end{code}
+
+Calculate the number of wins accruing to a team (0 or 1) from their goal
+for a game.
+
+\begin{code}
+wins :: Int -> Int
+wins gd = case gd>0 of
+  True  -> 1
+  False -> 0
+\end{code}
+
+Collate a list of results into a table.
+
+\begin{code}
+sortResults :: [(Results,Team)] -> Table
+sortResults =
+    Table
+      . L.sortBy (flip $ comparing fst)
+      . groupSortBy (comparing snd) grp
+  where
+    grp (r,t) ps = (r',t)
+      where
+        r' = mconcat $ r : map fst ps
+\end{code}
+
+
+input
+-----
+
+Parse openfootball data into Game data, eliminating duplicate results.
+(For `g1` and `g2` to be recognised as a duplicate, it must be true that
+`g1==g2`.)
+
+\begin{code}
+input :: Job -> IO [Game]
+input Job{..} =
+  groupSort const . parseGames . T.concat <$> mapM T.readFile jobInputs
+\end{code}
+
+
+parseGames
+----------
+
+The Game parser has three variants that should all be equivalent.
+
+\begin{code}
+parseGames :: T.Text -> [Game]
+parseGames = case PrimParseGames of
+  SimpleParseGames -> simpleParseGames
+  FunParseGames    -> funParseGames
+  PrimParseGames   -> primParseGames
+
+data ParseGames = SimpleParseGames | FunParseGames | PrimParseGames
+\end{code}
+
+
+<h3>simpleParseGames</h3>
+
+Here we apply the `gameEdit` `SearchReplace` editor to:
+
+  1. recognise the lines that contain the match results data and
+
+  2. transform the lines into Haskell `Game` format which can be
+     parsed by `readText`.
+
+The `edit` function is a simple specialisation of the `regex` `sed'`
+function (defined below) that deletes every line in the file that edits
+every line in the file according to the given `SearchReplace`, deleting
+all other lies.
+
+
+\begin{code}
+simpleParseGames :: T.Text -> [Game]
+simpleParseGames = map readText . T.lines . edit gameEdit
+\end{code}
+
+The `[ed|` ... `///` ... `|]` `SearchReplace` editors for recognizing
+line containing matchresults and converting them to Haskell-format
+`Game` data come in two variants that should be equivalent.
+
+\begin{code}
+gameEdit :: SearchReplace RE T.Text
+gameEdit = case MacrosGameEdit of
+  SimpleGameEdit -> simpleGameEdit
+  MacrosGameEdit -> macrosGameEdit
+
+data GameEdit = SimpleGameEdit | MacrosGameEdit
+\end{code}
+
+
+<h4>simpleGameEdit</h4>
+
+\begin{code}
+simpleGameEdit :: SearchReplace RE T.Text
+simpleGameEdit =
+  [ed|^ *${ht}([A-Za-z][a-zA-Z ]*[A-Za-z]) +${hs}([0-9]+)-${as}([0-9]+) +(\([^)]+\) *)?${at}([A-Za-z][a-zA-Z ]*[A-Za-z]) *(@.*)?$///Game "${ht}" ${hs} ${as} "${at}"|]
+\end{code}
+
+
+<h4>simpleGameEdit</h4>
+
+\begin{code}
+macrosGameEdit :: SearchReplace RE T.Text
+macrosGameEdit =
+  [ed_|^ *${ht}(@{team}) +${hs}([0-9]+)-${as}([0-9]+) +(\([0-9]+-[0-9]+\) *)?${at}(@{team}) *(@.*)?$///Game "${ht}" ${hs} ${as} "${at}"|] macs
+\end{code}
+
+\begin{code}
+macs :: Macros RE
+macs = makeMacros env
+
+env :: MacroEnv
+env = makeEnv [(,) "team" teamMacro] TDFA.preludeEnv
+\end{code}
+
+\begin{code}
+teamMacro :: MacroEnv -> MacroID -> MacroDescriptor
+teamMacro ev mid =
+  runTests TDFA.regexType Just (map dup samples) ev mid
+    MacroDescriptor
+      { macroSource          = RegexSource "([a-zA-Z]+ ?)*[A-Za-z]" -- the RE to be substituted for the macro
+      , macroSamples         = samples                              -- list of strings that should match the above macro RE
+      , macroCounterSamples  = counter_samples                      -- list of strings that should **not** match the above macro RE
+      , macroTestResults     = []                                   -- for bookkeeping
+      , macroParser          = Nothing                              -- no parser needed for this one!
+      , macroDescription     = "team names: alphabetic characters interspersed with spaces"
+      }
+  where
+    samples =
+        [ "Chelsea FC"
+        , "West Bromwich Albion"
+        , "AFC Bournemouth"
+        , "F"
+        , "AB"
+        , "A B"
+        , "AA B"
+        ]
+
+    counter_samples =
+        [ "Arsenal FC "
+        , " Liverpool FC"
+        , "West Bromwich  Albion"
+        , "F2"
+        , ""
+        ]
+
+    dup x = (x,x)
+\end{code}
+
+\begin{code}
+listMacros :: IO ()
+listMacros = do
+    hPutStr stderr $ formatMacroTable TDFA.regexType env
+    ok <- testMacroEnv "macros" TDFA.regexType env
+    M.when (not ok) $ exitWith $ ExitFailure 1
+\end{code}
+
+
+<h3>funParseGames</h3>
+
+Here we use the `regex` `grepFilter` to extract all of the lines that
+match our `rex` RE for detecting match-result data and assemble the
+`Game` data directly by extracting the `ht`, `hs`, `as` and `at`
+fields from the matched result.
+
+\begin{code}
+funParseGames :: T.Text -> [Game]
+funParseGames txt =
+    [ Game (           mtch !$$ [cp|ht|])
+           (readText $ mtch !$$ [cp|hs|])
+           (readText $ mtch !$$ [cp|as|])
+           (           mtch !$$ [cp|at|])
+        | Line{..} <- grepFilter rex txt
+        , [mtch]   <- [allMatches getLineMatches]
+        ]
+\end{code}
+
+The RE for merely recognising lines that contain match results in the
+input data come in two variants. We either extract the RE from the above
+`SearchReplace` template or rebuild the `[re|` ... `]`. (They should of
+course be equivalent.)
+
+\begin{code}
+rex :: RE
+rex = case Direct of
+  Direct  ->
+    [re_|^ *${ht}(@{team}) +${hs}([0-9]+)-${as}([0-9]+) +(\([0-9]+-[0-9]+\) *)?${at}(@{team}) *(@.*)?$|] macs
+  Recycle ->
+    getSearch gameEdit
+
+data REX = Direct | Recycle
+\end{code}
+
+
+<h3>primParseGames</h3>
+
+This variant of `funParseGames` uses `T.lines` and `?=~` instead of
+`grepFilter`.
+
+\begin{code}
+primParseGames :: T.Text -> [Game]
+primParseGames txt =
+    [ Game (           mtch !$$ [cp|ht|])
+           (readText $ mtch !$$ [cp|hs|])
+           (readText $ mtch !$$ [cp|as|])
+           (           mtch !$$ [cp|at|])
+        | mtch <- map (?=~ rex) $ T.lines txt
+        , matched mtch
+        ]
+\end{code}
+
+
+output
+------
+
+Write out/test the Table according to the Job output parameters.
+
+\begin{code}
+output :: Job -> Table -> IO ()
+output jb@Job{..} tbl = case jobIsTest of
+    True  -> test_it =<< formatTable jb tbl
+    False -> case jobOutput of
+      "-" -> T.putStr       =<< formatTable jb tbl
+      fp  -> T.writeFile fp =<< formatTable jb tbl
+  where
+    test_it txt = do
+      txt' <- T.readFile jobOutput
+      case txt == txt' of
+        True  -> putStrLn "OK"
+        False -> do
+          putStrLn "Test Failed"
+          exitWith $ ExitFailure 1
+\end{code}
+
+Generate the markdown for a table and optionally use Pandoc to generate
+the Html.
+
+\begin{code}
+formatTable :: Job -> Table -> IO T.Text
+formatTable Job{..} (Table ps) = to_html $ T.unlines $
+    [ "# " <> jobTitle
+    , ""
+    , mk_row header_row
+    , mk_row divider_row
+    ] ++ map mk_row (zipWith gen_row [1..] ps)
+  where
+    divider_row = map (T.map (const '-')) header_row
+    header_row  = map column_header [minBound..maxBound]
+
+    mk_row :: [T.Text] -> T.Text
+    mk_row = T.intercalate "|"
+
+    gen_row :: Int -> (Results,Team) -> [T.Text]
+    gen_row i (r,t) = map (gen_field i t r) [minBound..maxBound]
+
+    gen_field :: Int -> Team -> Results -> Col -> T.Text
+    gen_field i tm Results{..} col = lj $ case col of
+        Position  -> showText i
+        Club      -> tm
+        Played    -> showText   resultsGamesPlayed
+        Won       -> showText   resultsGamesWon
+        Drawn     -> showText   games_drawn
+        Lost      -> showText $ resultsGamesPlayed -
+                            (resultsGamesWon + games_drawn)
+        GF        -> showText   resultsGoalsFor
+        GA        -> showText   resultsGoalsAgainst
+        GD        -> showText $ resultsGoalsFor -
+                                        resultsGoalsAgainst
+        Points    -> showText   resultsPointsScored
+      where
+        lj = T.justifyLeft wd ' '
+        wd = T.length $ column_header col
+
+        games_drawn = resultsPointsScored - win_points
+        win_points  = resultsGamesWon * 3
+
+    to_html = case jobIsHtml of
+      True  -> pandoc jobTitle
+      False -> return
+
+data Col
+  = Position
+  | Club
+  | Played
+  | Won
+  | Drawn
+  | Lost
+  | GF
+  | GA
+  | GD
+  | Points
+  deriving (Bounded,Enum,Show)
+
+column_header :: Col -> T.Text
+column_header col = case col of
+  Position  -> "Pos"
+  Club      -> "Club                 "
+  _         -> T.justifyLeft 7 ' ' $ showText col
+\end{code}
+
+
+parseCLI
+--------
+
+The command line parser generates a list of league-table
+generating/testing jobs for execution by the above `job`
+action. Non-league-table-generating CLI commands like
+`macros` for listing our RE table macros just do their
+thing and return an empty list of jobs.
+
+\begin{code}
+parseCLI :: IO [Job]
+parseCLI = do
+  args <- getArgs
+  case args of
+    []                 -> listMacros  >> testJob      -- test with canned vectors
+    ["test"]           -> listMacros  >> testJob      --    "
+    ["setup-test"]     ->                setupTestJob -- setup the test data, generating the golden data
+    ["update"]         -> updateIndex >> updateJobs   -- update the website with latest data
+    ["table",pth]      -> discover pth   Nothing      -- write out a full league table
+    ["table",pth,sz_s]
+      | Just sz <- readMaybe sz_s
+                       -> discover pth $ Just sz      -- write out a bounded league table
+    ["macros"]         -> listMacros  >> return []    -- list the RE macros we are using to parse the data
+    _                  -> do                          -- generate the usage message and fail
+        pn <- getProgName
+        hPutStr stderr $ prog pn
+          [ "[test]"
+          , "setup-test"
+          , "update"
+          , "table   <path> [<size>]"
+          ]
+        exitWith $ ExitFailure 1
+  where
+    prog pn as = unlines $ zipWith prog_ (pn : repeat pn') as
+      where
+        pn'       = map (const ' ') pn
+
+        prog_ p a = unwords [p,a]
+
+testJob, setupTestJob :: IO [Job]
+testJob      = testJob_ True
+setupTestJob = testJob_ False
+
+testJob_ :: Bool -> IO [Job]
+testJob_ is_t = do
+  createDirectoryIfMissing True "data"
+  return
+    [ Job
+        { jobTitle  = "Premier League 2015-16: Top 7"
+        , jobSize   = Just 7
+        , jobInputs =
+            [ "data/2015-16-premierleague.txt"
+            ]
+        , jobIsTest = is_t
+        , jobIsHtml = False
+        , jobOutput = "data/league-table.md"
+        }
+    ]
+
+updateJobs :: IO [Job]
+updateJobs = do
+    dy <- utctDay <$> getCurrentTime
+    return $ concat $ map (mk dy) updateJobSpecs
+  where
+    mk dy js@JobSpec{..} =
+        [ Job
+            { jobTitle  = T.unwords $
+                [ "Premier League " <> T.pack jsSeason
+                , maybe "" (\n->"Top "<>showText n<>" ") jsSize
+                , "["<>showText dy<>"]"
+                ]
+            , jobSize   = jsSize
+            , jobInputs =
+                [ mkPath jsSeason "1-premierleague-i.txt"
+                , mkPath jsSeason "1-premierleague-ii.txt"
+                ]
+            , jobIsTest = False
+            , jobIsHtml = is_html
+            , jobOutput = leagueTablesDir </> tableFile js is_html
+            }
+        | is_html <- [True,False]
+        ]
+
+updateIndex :: IO ()
+updateIndex = pandoc title toc >>= T.writeFile index_file
+  where
+    toc = T.unlines $
+      [ "# " <> title
+      , ""
+      , mk_row ["Season", "Top-N", "Html", "Text"]
+      , mk_row ["------", "-----", "----", "----"]
+      ] ++
+      [ mk_row
+          [ T.pack jsSeason
+          , maybe "all" showText jsSize
+          , lk "HTML" $ T.pack $ tableFile js True
+          , lk "Text" $ T.pack $ tableFile js False
+          ]
+        | js@JobSpec{..} <- updateJobSpecs
+        ]
+
+    title      = "The League Tables"
+    index_file = leagueTablesDir </> "index.html"
+
+    mk_row     = T.intercalate "|"
+
+    lk lab url = "["<>lab<>"]("<>url<>")"
+
+tableFile :: JobSpec -> Bool -> FilePath
+tableFile JobSpec{..} is_html = jsSeason ++ "-" ++ sze <.> ext
+  where
+    sze = maybe "all" (("top-"++).show) jsSize
+    ext = if is_html then "html" else "txt"
+
+leagueTablesDir :: FilePath
+leagueTablesDir = "docs/league-tables"
+
+updateJobSpecs :: [JobSpec]
+updateJobSpecs =
+  [ JobSpec sn mb
+    | sn <- ["2016-17","2015-16"]
+    , mb <- Nothing : map Just [6..10]
+    ]
+
+data JobSpec =
+  JobSpec
+    { jsSeason :: String
+    , jsSize   :: Maybe Int
+    }
+  deriving (Show)
+
+discover :: FilePath -> Maybe Int -> IO [Job]
+discover fp mb = do
+  inps <- dscvr candidates
+  return
+    [ Job
+        { jobTitle  = maybe fp_t mk_ttl $
+              matchedText $ fp_t ?=~ [re|[0-9]{4}-[0-9]{2}|]
+        , jobSize   = mb
+        , jobInputs = inps
+        , jobIsTest = False
+        , jobIsHtml = False
+        , jobOutput = "-"
+        }
+    ]
+  where
+    fp_t            = T.pack fp
+
+    mk_ttl ssn      = "Premier League " <> ssn
+
+    dscvr []        = error $ fp ++ ": no data found"
+    dscvr (fps:cds) = do
+      ok <- and <$> mapM doesFileExist fps
+      case ok of
+        True  -> return fps
+        False -> dscvr cds
+
+    candidates =
+      [ [ fp
+        ]
+      , [ data_dir </> fp </> "1-premierleague.txt"
+        ]
+      , [ data_dir </> fp </> "1-premierleague-i.txt"
+        , data_dir </> fp </> "1-premierleague-ii.txt"
+        ]
+      ]
+
+mkPath :: String -> String -> FilePath
+mkPath ssn hlf = data_dir </> ssn </> hlf
+
+data_dir :: FilePath
+data_dir = "../eng-england"
+\end{code}
+
+
+Pandoc
+------
+
+Use Pandoc to generate a an Html file from a title and markdown text.
+
+\begin{code}
+pandoc :: T.Text -> T.Text -> IO T.Text
+pandoc title txt = do
+    T.writeFile inp_file   txt
+    T.writeFile mda_file $ T.unlines
+          [ "---"
+          , "title: "<>title
+          , "---"
+          ]
+    fmap (const ()) $
+      SH.shelly $ SH.verbosely $
+        SH.run "pandoc"
+          [ "-f", "markdown+grid_tables"
+          , "-t", "html5"
+          , "-T", "regex"
+          , "-s"
+          , "-c", "bs.css"
+          , "-c", "styles.css"
+          , "-c", "tabular.css"
+          , "-o", T.pack out_file
+          , T.pack mda_file
+          , T.pack inp_file
+          ]
+    T.readFile out_file
+  where
+    mda_file = "tmp/metadata.markdown"
+    inp_file = "tmp/pandoc-inp.md"
+    out_file = "tmp/pandoc-out.html"
+\end{code}
+
+
+Helpers
+-------
+
+The general helpers.
+
+<h3>edit</h3>
+
+The `edit` function is a simple specialisation of the `regex`
+`sed'` function (defined below) that deletes every line in the file
+that edits every line in the file according to the given `SearchReplace`
+template, deleting all other lines. (It should probably be added to
+regex.)
+
+\begin{code}
+edit :: SearchReplace RE T.Text -> T.Text -> T.Text
+edit sr txt = runIdentity $ flip sed' txt $
+    Select
+      [ Template sr
+      , LineEdit [re|.*|] $ \_ _ -> return Delete
+      ]
+\end{code}
+
+<h3>makeMacros and makeEnv</h3>
+
+Construct a Macros table for compiling REs from a MacroEnv. (Something
+similar  should probably be added to regex.)
+
+\begin{code}
+makeMacros :: MacroEnv -> Macros RE
+makeMacros ev = runIdentity $
+    mkMacros mk TDFA.regexType ExclCaptures ev
+  where
+    mk   = maybe oops Identity .
+                TDFA.compileRegexWithOptions TDFA.noPreludeREOptions
+
+    oops = error "makeMacros: unexpected RE compilation error"
+\end{code}
+
+Construct a a `MacroEnv` from an association list of `MacroId` and
+`MacroDescriptior` constructor functions and the base `MacroEnv`
+(the macros that can be used inside the macros). (Something
+similar  should probably be added to regex.)
+
+\begin{code}
+makeEnv :: [(MacroID,MacroEnv -> MacroID -> MacroDescriptor)]
+        -> MacroEnv
+        -> MacroEnv
+makeEnv al ev0 = ev
+  where
+    ev = ev0 `HML.union` HML.fromList
+                  [ (mid, mk ev mid) | (mid,mk) <- al ]
+\end{code}
+
+
+<h3>showText and readText</h3>
+
+Variants of the standard functions that operate over `Text`.
+
+\begin{code}
+showText :: Show a => a -> T.Text
+showText = T.pack . show
+
+readText :: Read a => T.Text -> a
+readText = fromMaybe (error "readText") . readMaybe . T.unpack
+\end{code}
diff --git a/examples/re-tutorial-tools.lhs b/examples/re-tutorial-tools.lhs
--- a/examples/re-tutorial-tools.lhs
+++ b/examples/re-tutorial-tools.lhs
@@ -155,7 +155,7 @@
 position of the first import statement in the module, where each import
 statement is in a standard form matched by the regex
 ```haskell
-[re|^import +(qualified )? *${mod}([^ ].*)$|]
+[re|^import +(qualified|         ) ${mod}([^ ].*)$|]
 ```
 
 We have reproduced `sortImports` under the name `sortImports_` here.
diff --git a/lib/cabal-masters/constraints-incl.cabal b/lib/cabal-masters/constraints-incl.cabal
--- a/lib/cabal-masters/constraints-incl.cabal
+++ b/lib/cabal-masters/constraints-incl.cabal
@@ -1,26 +1,31 @@
 %-    regex                   == <<$version$>>
 %-    regex-with-pcre         == <<$version$>>
-%-    array                   >= 0.4
-%-    base                    >= 4 && < 5
-%-    base-compat             >= 0.6.0
-%-    bytestring              >= 0.10.2.0
-%-    containers              >= 0.4
+%-    array                   >= 0.4      && < 0.6
+%-    base                    >= 4        && < 5
+%-    base-compat             >= 0.6      && < 0.10
+%-    blaze-html              >= 0.8.1.0
+%-    bytestring              == 0.10.*
+%-    containers              >= 0.4      && < 0.6
+%-    data-default            >= 0.5.3
 %-    directory               >= 1.2.1.0
-%-    hashable                >= 1.2.3.3
+%-    filepath                >= 1.3.0.2
+%-    hashable                == 1.2.*
 %-    heredoc                 >= 0.2.0.0
 %-    http-conduit            >= 2.1.7.2
-%-    regex-base              >= 0.93.2
-%-    regex-pcre-builtin      >= 0.94.4.8.8.35
-%-    regex-tdfa              >= 1.2.0
-%-    regex-tdfa-text         >= 1.0.0.3
+%-    pandoc                  >= 1.13.2.1
+%-    regex-base              == 0.93.*
+%-    regex-pcre-builtin      == 0.94.*
+%-    regex-tdfa              == 1.2.*
+%-    regex-tdfa-text         == 1.0.*
+%-    regex-pcre-text         == 0.94.*
 %-    shelly                  >= 1.6.1.2
 %-    smallcheck              >= 1.1.1
 %-    tasty                   >= 0.10.1.2
 %-    tasty-hunit             >= 0.9.2
 %-    tasty-smallcheck        >= 0.8.0.1
-%-    template-haskell        >= 2.7
-%-    text                    >= 1.2.0.6
-%-    time                    >= 1.4.2
-%-    time-locale-compat      >= 0.1.0.1
-%-    transformers            >= 0.2.2
-%-    unordered-containers    >= 0.2.5.1
+%-    template-haskell        >= 2.7      && < 2.12
+%-    text                    == 1.2.*
+%-    time                    >= 1.4.2    && < 1.9
+%-    time-locale-compat      == 0.1.*
+%-    transformers            >= 0.2.2    && < 0.6
+%-    unordered-containers    == 0.2.*
diff --git a/lib/cabal-masters/executables-incl.cabal b/lib/cabal-masters/executables-incl.cabal
--- a/lib/cabal-masters/executables-incl.cabal
+++ b/lib/cabal-masters/executables-incl.cabal
@@ -68,6 +68,16 @@
 
 %build-depends-prog regex regex-with-pcre array base base-compat bytestring containers directory filepath heredoc regex-base regex-tdfa regex-tdfa-text regex-pcre-builtin shelly smallcheck tasty tasty-hunit tasty-smallcheck template-haskell text unordered-containers
 
+%test-exe re-top
+    Hs-Source-Dirs:     examples
+
+    Main-Is:            re-top.lhs
+
+    Other-Modules:
+      TestKit
+
+%build-depends-prog regex base base-compat blaze-html bytestring data-default directory filepath shelly text time time-locale-compat transformers unordered-containers
+
 %test-exe re-tutorial
     Hs-Source-Dirs:     examples
 
diff --git a/lib/cabal-masters/library-incl.cabal b/lib/cabal-masters/library-incl.cabal
--- a/lib/cabal-masters/library-incl.cabal
+++ b/lib/cabal-masters/library-incl.cabal
@@ -7,6 +7,8 @@
       Text.RE.PCRE.ByteString.Lazy
       Text.RE.PCRE.Sequence
       Text.RE.PCRE.String
+      Text.RE.PCRE.Text
+      Text.RE.PCRE.Text.Lazy
       Text.RE.REOptions
       Text.RE.Replace
       Text.RE.Summa
@@ -42,6 +44,8 @@
       Text.RE.ZeInternals.SearchReplace.PCRE.ByteString.Lazy
       Text.RE.ZeInternals.SearchReplace.PCRE.Sequence
       Text.RE.ZeInternals.SearchReplace.PCRE.String
+      Text.RE.ZeInternals.SearchReplace.PCRE.Text
+      Text.RE.ZeInternals.SearchReplace.PCRE.Text.Lazy
       Text.RE.ZeInternals.SearchReplace.PCREEdPrime
       Text.RE.ZeInternals.SearchReplace.TDFA
       Text.RE.ZeInternals.SearchReplace.TDFA.ByteString
diff --git a/lib/cabal-masters/mega-regex.cabal b/lib/cabal-masters/mega-regex.cabal
--- a/lib/cabal-masters/mega-regex.cabal
+++ b/lib/cabal-masters/mega-regex.cabal
@@ -38,7 +38,7 @@
 
 %include "lib/cabal-masters/library-incl.cabal"
 
-%build-depends-lib array bytestring base base-compat containers hashable regex-base regex-tdfa regex-tdfa-text regex-pcre-builtin template-haskell text time time-locale-compat transformers unordered-containers
+%build-depends-lib array bytestring base base-compat containers hashable regex-base regex-tdfa regex-tdfa-text regex-pcre-builtin regex-pcre-text template-haskell text time time-locale-compat transformers unordered-containers
 
 %include "lib/cabal-masters/executables-incl.cabal"
 
diff --git a/lib/cabal-masters/test-extra-source-files-incl.cabal b/lib/cabal-masters/test-extra-source-files-incl.cabal
--- a/lib/cabal-masters/test-extra-source-files-incl.cabal
+++ b/lib/cabal-masters/test-extra-source-files-incl.cabal
@@ -1,11 +1,13 @@
 Extra-Source-Files:
     README.markdown
     changelog
+    data/2015-16-premierleague.txt
     data/access-errors.log
     data/access.log
     data/error.log
     data/events.log
     data/include-result.lhs
+    data/league-table.md
     data/pp-result-doc.lhs
     data/pp-result-gen.lhs
     data/pp-test.lhs
@@ -25,6 +27,8 @@
     src/Text/RE/PCRE/ByteString/Lazy.hs
     src/Text/RE/PCRE/Sequence.hs
     src/Text/RE/PCRE/String.hs
+    src/Text/RE/PCRE/Text.hs
+    src/Text/RE/PCRE/Text/Lazy.hs
     src/Text/RE/TDFA/ByteString.hs
     src/Text/RE/TDFA/ByteString/Lazy.hs
     src/Text/RE/TDFA/Sequence.hs
diff --git a/lib/mega-regex.cabal b/lib/mega-regex.cabal
--- a/lib/mega-regex.cabal
+++ b/lib/mega-regex.cabal
@@ -1,5 +1,5 @@
 Name:                   regex
-Version:                1.0.0.0
+Version:                1.0.1.0
 Synopsis:               Toolkit for regex-base
 Description:            A regular expression toolkit for regex-base with
                         compile-time checking of RE syntax, data types for
@@ -22,11 +22,13 @@
 Extra-Source-Files:
     README.markdown
     changelog
+    data/2015-16-premierleague.txt
     data/access-errors.log
     data/access.log
     data/error.log
     data/events.log
     data/include-result.lhs
+    data/league-table.md
     data/pp-result-doc.lhs
     data/pp-result-gen.lhs
     data/pp-test.lhs
@@ -46,6 +48,8 @@
     src/Text/RE/PCRE/ByteString/Lazy.hs
     src/Text/RE/PCRE/Sequence.hs
     src/Text/RE/PCRE/String.hs
+    src/Text/RE/PCRE/Text.hs
+    src/Text/RE/PCRE/Text/Lazy.hs
     src/Text/RE/TDFA/ByteString.hs
     src/Text/RE/TDFA/ByteString/Lazy.hs
     src/Text/RE/TDFA/Sequence.hs
@@ -64,7 +68,7 @@
 Source-Repository this
     Type:               git
     Location:           https://github.com/iconnect/regex.git
-    Tag:                1.0.0.0
+    Tag:                1.0.1.0
 
 
 
@@ -77,6 +81,8 @@
       Text.RE.PCRE.ByteString.Lazy
       Text.RE.PCRE.Sequence
       Text.RE.PCRE.String
+      Text.RE.PCRE.Text
+      Text.RE.PCRE.Text.Lazy
       Text.RE.REOptions
       Text.RE.Replace
       Text.RE.Summa
@@ -112,6 +118,8 @@
       Text.RE.ZeInternals.SearchReplace.PCRE.ByteString.Lazy
       Text.RE.ZeInternals.SearchReplace.PCRE.Sequence
       Text.RE.ZeInternals.SearchReplace.PCRE.String
+      Text.RE.ZeInternals.SearchReplace.PCRE.Text
+      Text.RE.ZeInternals.SearchReplace.PCRE.Text.Lazy
       Text.RE.ZeInternals.SearchReplace.PCREEdPrime
       Text.RE.ZeInternals.SearchReplace.TDFA
       Text.RE.ZeInternals.SearchReplace.TDFA.ByteString
@@ -167,22 +175,23 @@
       -Werror
 
     Build-depends:
-        array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
-      , hashable             >= 1.2.3.3
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+        array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
+      , hashable             == 1.2.*
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-pcre-text      == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 Executable re-gen-cabals
@@ -201,17 +210,17 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , regex-base           >= 0.93.2
-      , regex-tdfa           >= 1.2.0
+      , regex-base           == 0.93.*
+      , regex-tdfa           == 1.2.*
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 Test-Suite re-gen-cabals-test
@@ -231,17 +240,17 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , regex-base           >= 0.93.2
-      , regex-tdfa           >= 1.2.0
+      , regex-base           == 0.93.*
+      , regex-tdfa           == 1.2.*
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 
@@ -261,16 +270,16 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , regex-base           >= 0.93.2
-      , regex-tdfa           >= 1.2.0
+      , regex-base           == 0.93.*
+      , regex-tdfa           == 1.2.*
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 Test-Suite re-gen-modules-test
@@ -290,16 +299,16 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , regex-base           >= 0.93.2
-      , regex-tdfa           >= 1.2.0
+      , regex-base           == 0.93.*
+      , regex-tdfa           == 1.2.*
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 
@@ -319,13 +328,13 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 Test-Suite re-include-test
@@ -345,13 +354,13 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 
@@ -371,21 +380,21 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , filepath             
-      , regex-base           >= 0.93.2
-      , regex-tdfa           >= 1.2.0
+      , filepath             >= 1.3.0.2
+      , regex-base           == 0.93.*
+      , regex-tdfa           == 1.2.*
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 Test-Suite re-nginx-log-processor-test
@@ -405,21 +414,21 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , filepath             
-      , regex-base           >= 0.93.2
-      , regex-tdfa           >= 1.2.0
+      , filepath             >= 1.3.0.2
+      , regex-base           == 0.93.*
+      , regex-tdfa           == 1.2.*
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -439,16 +448,16 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , filepath             
+      , filepath             >= 1.3.0.2
       , heredoc              >= 0.2.0.0
       , http-conduit         >= 2.1.7.2
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 Test-Suite re-prep-test
@@ -468,16 +477,16 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , filepath             
+      , filepath             >= 1.3.0.2
       , heredoc              >= 0.2.0.0
       , http-conduit         >= 2.1.7.2
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 
@@ -497,14 +506,14 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , filepath             
+      , filepath             >= 1.3.0.2
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 Test-Suite re-sort-imports-test
@@ -524,14 +533,14 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , filepath             
+      , filepath             >= 1.3.0.2
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 
@@ -551,27 +560,27 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , filepath             
+      , filepath             >= 1.3.0.2
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , unordered-containers == 0.2.*
 
 
 Test-Suite re-tests-test
@@ -591,30 +600,96 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , filepath             
+      , filepath             >= 1.3.0.2
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , unordered-containers == 0.2.*
 
 
 
+Executable re-top
+    Hs-Source-Dirs:     examples
+
+    Main-Is:            re-top.lhs
+
+    Other-Modules:
+      TestKit
+
+    Default-Language:   Haskell2010
+
+    GHC-Options:
+      -Wall
+      -fwarn-tabs
+      -Werror
+
+    Build-depends:
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , blaze-html           >= 0.8.1.0
+      , bytestring           == 0.10.*
+      , data-default         >= 0.5.3
+      , directory            >= 1.2.1.0
+      , filepath             >= 1.3.0.2
+      , shelly               >= 1.6.1.2
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
+
+
+Test-Suite re-top-test
+    type:               exitcode-stdio-1.0
+    Hs-Source-Dirs:     examples
+
+    Main-Is:            re-top.lhs
+
+    Other-Modules:
+      TestKit
+
+    Default-Language:   Haskell2010
+
+    GHC-Options:
+      -Wall
+      -fwarn-tabs
+      -Werror
+
+    Build-depends:
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , blaze-html           >= 0.8.1.0
+      , bytestring           == 0.10.*
+      , data-default         >= 0.5.3
+      , directory            >= 1.2.1.0
+      , filepath             >= 1.3.0.2
+      , shelly               >= 1.6.1.2
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
+
+
+
 Executable re-tutorial
     Hs-Source-Dirs:     examples
 
@@ -632,30 +707,30 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 Test-Suite re-tutorial-test
@@ -676,30 +751,30 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -722,30 +797,30 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -766,30 +841,30 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 Test-Suite re-tutorial-options-test
@@ -810,30 +885,30 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -854,30 +929,30 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 Test-Suite re-tutorial-replacing-test
@@ -898,30 +973,30 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -942,30 +1017,30 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 Test-Suite re-tutorial-testbench-test
@@ -986,30 +1061,30 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -1030,30 +1105,30 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -1075,30 +1150,30 @@
       -Werror
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
diff --git a/lib/version.txt b/lib/version.txt
--- a/lib/version.txt
+++ b/lib/version.txt
@@ -1,1 +1,1 @@
-1.0.0.0
+1.0.1.0
diff --git a/regex-examples.cabal b/regex-examples.cabal
--- a/regex-examples.cabal
+++ b/regex-examples.cabal
@@ -1,5 +1,5 @@
 Name:                   regex-examples
-Version:                1.0.0.0
+Version:                1.0.1.0
 Synopsis:               Tutorial, tests and example programs for regex
 Description:            Tutorial, tests and example programs for regex,
                         a Regular Expression Toolkit for regex-base with
@@ -22,11 +22,13 @@
 Extra-Source-Files:
     README.markdown
     changelog
+    data/2015-16-premierleague.txt
     data/access-errors.log
     data/access.log
     data/error.log
     data/events.log
     data/include-result.lhs
+    data/league-table.md
     data/pp-result-doc.lhs
     data/pp-result-gen.lhs
     data/pp-test.lhs
@@ -46,6 +48,8 @@
     src/Text/RE/PCRE/ByteString/Lazy.hs
     src/Text/RE/PCRE/Sequence.hs
     src/Text/RE/PCRE/String.hs
+    src/Text/RE/PCRE/Text.hs
+    src/Text/RE/PCRE/Text/Lazy.hs
     src/Text/RE/TDFA/ByteString.hs
     src/Text/RE/TDFA/ByteString/Lazy.hs
     src/Text/RE/TDFA/Sequence.hs
@@ -64,7 +68,7 @@
 Source-Repository this
     Type:               git
     Location:           https://github.com/iconnect/regex.git
-    Tag:                1.0.0.0
+    Tag:                1.0.1.0
 
 
 Executable re-gen-cabals
@@ -83,17 +87,17 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , regex-base           >= 0.93.2
-      , regex-tdfa           >= 1.2.0
+      , regex-base           == 0.93.*
+      , regex-tdfa           == 1.2.*
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 Test-Suite re-gen-cabals-test
@@ -113,17 +117,17 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , regex-base           >= 0.93.2
-      , regex-tdfa           >= 1.2.0
+      , regex-base           == 0.93.*
+      , regex-tdfa           == 1.2.*
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 
@@ -143,16 +147,16 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , regex-base           >= 0.93.2
-      , regex-tdfa           >= 1.2.0
+      , regex-base           == 0.93.*
+      , regex-tdfa           == 1.2.*
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 Test-Suite re-gen-modules-test
@@ -172,16 +176,16 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , regex-base           >= 0.93.2
-      , regex-tdfa           >= 1.2.0
+      , regex-base           == 0.93.*
+      , regex-tdfa           == 1.2.*
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 
@@ -201,13 +205,13 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 Test-Suite re-include-test
@@ -227,13 +231,13 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 
@@ -253,22 +257,22 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , regex-with-pcre      == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , regex-with-pcre      == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , filepath             
-      , regex-base           >= 0.93.2
-      , regex-tdfa           >= 1.2.0
+      , filepath             >= 1.3.0.2
+      , regex-base           == 0.93.*
+      , regex-tdfa           == 1.2.*
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 Test-Suite re-nginx-log-processor-test
@@ -288,22 +292,22 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , regex-with-pcre      == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , regex-with-pcre      == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , filepath             
-      , regex-base           >= 0.93.2
-      , regex-tdfa           >= 1.2.0
+      , filepath             >= 1.3.0.2
+      , regex-base           == 0.93.*
+      , regex-tdfa           == 1.2.*
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -323,16 +327,16 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , filepath             
+      , filepath             >= 1.3.0.2
       , heredoc              >= 0.2.0.0
       , http-conduit         >= 2.1.7.2
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 Test-Suite re-prep-test
@@ -352,16 +356,16 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , filepath             
+      , filepath             >= 1.3.0.2
       , heredoc              >= 0.2.0.0
       , http-conduit         >= 2.1.7.2
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 
@@ -381,14 +385,14 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , filepath             
+      , filepath             >= 1.3.0.2
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 Test-Suite re-sort-imports-test
@@ -408,14 +412,14 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
       , directory            >= 1.2.1.0
-      , filepath             
+      , filepath             >= 1.3.0.2
       , shelly               >= 1.6.1.2
-      , text                 >= 1.2.0.6
+      , text                 == 1.2.*
 
 
 
@@ -435,28 +439,28 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , regex-with-pcre      == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , regex-with-pcre      == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , filepath             
+      , filepath             >= 1.3.0.2
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , unordered-containers == 0.2.*
 
 
 Test-Suite re-tests-test
@@ -476,31 +480,97 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , regex-with-pcre      == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , regex-with-pcre      == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , filepath             
+      , filepath             >= 1.3.0.2
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , unordered-containers == 0.2.*
 
 
 
+Executable re-top
+    Hs-Source-Dirs:     examples
+
+    Main-Is:            re-top.lhs
+
+    Other-Modules:
+      TestKit
+
+    Default-Language:   Haskell2010
+
+    GHC-Options:
+      -Wall
+      -fwarn-tabs
+      -Wwarn
+
+    Build-depends:
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , blaze-html           >= 0.8.1.0
+      , bytestring           == 0.10.*
+      , data-default         >= 0.5.3
+      , directory            >= 1.2.1.0
+      , filepath             >= 1.3.0.2
+      , shelly               >= 1.6.1.2
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
+
+
+Test-Suite re-top-test
+    type:               exitcode-stdio-1.0
+    Hs-Source-Dirs:     examples
+
+    Main-Is:            re-top.lhs
+
+    Other-Modules:
+      TestKit
+
+    Default-Language:   Haskell2010
+
+    GHC-Options:
+      -Wall
+      -fwarn-tabs
+      -Wwarn
+
+    Build-depends:
+        regex                == 1.0.1.0
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , blaze-html           >= 0.8.1.0
+      , bytestring           == 0.10.*
+      , data-default         >= 0.5.3
+      , directory            >= 1.2.1.0
+      , filepath             >= 1.3.0.2
+      , shelly               >= 1.6.1.2
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
+
+
+
 Executable re-tutorial
     Hs-Source-Dirs:     examples
 
@@ -518,30 +588,30 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 Test-Suite re-tutorial-test
@@ -562,30 +632,30 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -608,30 +678,30 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -652,31 +722,31 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , regex-with-pcre      == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , regex-with-pcre      == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 Test-Suite re-tutorial-options-test
@@ -697,31 +767,31 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , regex-with-pcre      == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , regex-with-pcre      == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -742,30 +812,30 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 Test-Suite re-tutorial-replacing-test
@@ -786,30 +856,30 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -830,30 +900,30 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 Test-Suite re-tutorial-testbench-test
@@ -874,30 +944,30 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -918,30 +988,30 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
@@ -963,30 +1033,30 @@
       -Wwarn
 
     Build-depends:
-        regex                == 1.0.0.0
-      , array                >= 0.4
-      , base                 >= 4 && < 5
-      , base-compat          >= 0.6.0
-      , bytestring           >= 0.10.2.0
-      , containers           >= 0.4
+        regex                == 1.0.1.0
+      , array                >= 0.4      && < 0.6
+      , base                 >= 4        && < 5
+      , base-compat          >= 0.6      && < 0.10
+      , bytestring           == 0.10.*
+      , containers           >= 0.4      && < 0.6
       , directory            >= 1.2.1.0
-      , hashable             >= 1.2.3.3
+      , hashable             == 1.2.*
       , heredoc              >= 0.2.0.0
-      , regex-base           >= 0.93.2
-      , regex-pcre-builtin   >= 0.94.4.8.8.35
-      , regex-tdfa           >= 1.2.0
-      , regex-tdfa-text      >= 1.0.0.3
+      , regex-base           == 0.93.*
+      , regex-pcre-builtin   == 0.94.*
+      , regex-tdfa           == 1.2.*
+      , regex-tdfa-text      == 1.0.*
       , shelly               >= 1.6.1.2
       , smallcheck           >= 1.1.1
       , tasty                >= 0.10.1.2
       , tasty-hunit          >= 0.9.2
       , tasty-smallcheck     >= 0.8.0.1
-      , template-haskell     >= 2.7
-      , text                 >= 1.2.0.6
-      , time                 >= 1.4.2
-      , time-locale-compat   >= 0.1.0.1
-      , transformers         >= 0.2.2
-      , unordered-containers >= 0.2.5.1
+      , template-haskell     >= 2.7      && < 2.12
+      , text                 == 1.2.*
+      , time                 >= 1.4.2    && < 1.9
+      , time-locale-compat   == 0.1.*
+      , transformers         >= 0.2.2    && < 0.6
+      , unordered-containers == 0.2.*
 
 
 
diff --git a/src/Text/RE/PCRE/ByteString.hs b/src/Text/RE/PCRE/ByteString.hs
--- a/src/Text/RE/PCRE/ByteString.hs
+++ b/src/Text/RE/PCRE/ByteString.hs
@@ -96,7 +96,7 @@
 import           Text.RE.ZeInternals.SearchReplace.PCRE.ByteString
 import           Text.Regex.Base
 import qualified Text.Regex.PCRE               as PCRE
-
+-- NB regex-base instance imports maybe be needed for for some API modules
 
 -- | find all the matches in the argument text; e.g., to count the number
 -- of naturals in s:
diff --git a/src/Text/RE/PCRE/ByteString/Lazy.hs b/src/Text/RE/PCRE/ByteString/Lazy.hs
--- a/src/Text/RE/PCRE/ByteString/Lazy.hs
+++ b/src/Text/RE/PCRE/ByteString/Lazy.hs
@@ -96,7 +96,7 @@
 import           Text.RE.ZeInternals.SearchReplace.PCRE.ByteString.Lazy
 import           Text.Regex.Base
 import qualified Text.Regex.PCRE               as PCRE
-
+-- NB regex-base instance imports maybe be needed for for some API modules
 
 -- | find all the matches in the argument text; e.g., to count the number
 -- of naturals in s:
diff --git a/src/Text/RE/PCRE/Sequence.hs b/src/Text/RE/PCRE/Sequence.hs
--- a/src/Text/RE/PCRE/Sequence.hs
+++ b/src/Text/RE/PCRE/Sequence.hs
@@ -96,7 +96,7 @@
 import           Text.RE.ZeInternals.SearchReplace.PCRE.Sequence
 import           Text.Regex.Base
 import qualified Text.Regex.PCRE               as PCRE
-
+-- NB regex-base instance imports maybe be needed for for some API modules
 
 -- | find all the matches in the argument text; e.g., to count the number
 -- of naturals in s:
diff --git a/src/Text/RE/PCRE/String.hs b/src/Text/RE/PCRE/String.hs
--- a/src/Text/RE/PCRE/String.hs
+++ b/src/Text/RE/PCRE/String.hs
@@ -96,7 +96,7 @@
 import           Text.RE.ZeInternals.SearchReplace.PCRE.String
 import           Text.Regex.Base
 import qualified Text.Regex.PCRE               as PCRE
-
+-- NB regex-base instance imports maybe be needed for for some API modules
 
 -- | find all the matches in the argument text; e.g., to count the number
 -- of naturals in s:
diff --git a/src/Text/RE/PCRE/Text.hs b/src/Text/RE/PCRE/Text.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/RE/PCRE/Text.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE NoImplicitPrelude              #-}
+{-# LANGUAGE MultiParamTypeClasses          #-}
+{-# LANGUAGE FlexibleContexts               #-}
+{-# LANGUAGE FlexibleInstances              #-}
+{-# OPTIONS_GHC -fno-warn-orphans           #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# LANGUAGE CPP                            #-}
+#if __GLASGOW_HASKELL__ >= 800
+{-# OPTIONS_GHC -fno-warn-redundant-constraints #-}
+#endif
+
+module Text.RE.PCRE.Text
+  (
+  -- * Tutorial
+  -- $tutorial
+
+  -- * The 'Matches' and 'Match' Operators
+    (*=~)
+  , (?=~)
+  -- * The 'SearchReplace' Operators
+  , (*=~/)
+  , (?=~/)
+  -- * The 'Matches' Type
+  , Matches
+  , matchesSource
+  , allMatches
+  , anyMatches
+  , countMatches
+  , matches
+  -- * The 'Match' Type
+  , Match
+  , matchSource
+  , matched
+  , matchedText
+  -- * The Macros and Parsers
+  -- $macros
+  , module Text.RE.TestBench.Parsers
+  -- * The 'RE' Type
+  , RE
+  , reSource
+  -- * Options
+  -- $options
+  , SimpleREOptions(..)
+  -- * Compiling and Escaping REs
+  , SearchReplace(..)
+  , compileRegex
+  , compileRegexWith
+  , compileSearchReplace
+  , compileSearchReplaceWith
+  , escape
+  , escapeWith
+  , escapeREString
+  -- * The Classic regex-base Match Operators
+  , (=~)
+  , (=~~)
+  -- * The re Quasi Quoters
+  -- $re
+  , re
+  , reMultilineSensitive
+  , reMultilineInsensitive
+  , reBlockSensitive
+  , reBlockInsensitive
+  , reMS
+  , reMI
+  , reBS
+  , reBI
+  , re_
+  -- * The Ed Quasi Quoters
+  -- $ed
+  , edMultilineSensitive
+  , edMultilineInsensitive
+  , edBlockSensitive
+  , edBlockInsensitive
+  , ed
+  , edMS
+  , edMI
+  , edBS
+  , edBI
+  , ed_
+  -- * The cp Quasi Quoters
+  , cp
+  -- * IsRegex
+  -- $isregex
+  , module Text.RE.Tools.IsRegex
+  ) where
+
+import qualified Data.Text                     as T
+import           Data.Typeable
+import           Prelude.Compat
+import           Text.RE.REOptions
+import           Text.RE.Replace
+import           Text.RE.TestBench.Parsers
+import           Text.RE.Tools.IsRegex
+import           Text.RE.ZeInternals
+import           Text.RE.ZeInternals.PCRE
+import           Text.RE.ZeInternals.SearchReplace.PCRE.Text
+import           Text.Regex.Base
+import qualified Text.Regex.PCRE               as PCRE
+import           Text.Regex.PCRE.Text()
+
+-- | find all the matches in the argument text; e.g., to count the number
+-- of naturals in s:
+--
+--   @countMatches $ s *=~ [re|[0-9]+|]@
+--
+(*=~) :: T.Text
+      -> RE
+      -> Matches T.Text
+(*=~) bs rex = addCaptureNamesToMatches (reCaptureNames rex) $ match (reRegex rex) bs
+
+-- | find the first match in the argument text; e.g., to test if there
+-- is a natural number in the input text:
+--
+--   @matched $ s ?=~ [re|[0-9]+|]@
+--
+(?=~) :: T.Text
+      -> RE
+      -> Match T.Text
+(?=~) bs rex = addCaptureNamesToMatch (reCaptureNames rex) $ match (reRegex rex) bs
+
+-- | search and replace all matches in the argument text; e.g., this section
+-- will convert every YYYY-MM-DD format date in its argument text into a
+-- DD\/MM\/YYYY date:
+--
+--   @(*=~\/ [ed|${y}([0-9]{4})-0*${m}([0-9]{2})-0*${d}([0-9]{2})\/\/\/${d}\/${m}\/${y}|])@
+--
+(*=~/) :: T.Text -> SearchReplace RE T.Text -> T.Text
+(*=~/) = flip searchReplaceAll
+
+-- | search and replace the first occurrence only (if any) in the input text
+-- e.g., to prefix the first string of four hex digits in the input text,
+-- if any, with @0x@:
+--
+--  @(?=~\/ [ed|[0-9A-Fa-f]{4}\/\/\/0x$0|])@
+--
+(?=~/) :: T.Text -> SearchReplace RE T.Text -> T.Text
+(?=~/) = flip searchReplaceFirst
+
+-- | the `regex-base` polymorphic match operator
+(=~) :: ( Typeable a
+        , RegexContext PCRE.Regex T.Text a
+        )
+     => T.Text
+     -> RE
+     -> a
+(=~) bs rex = addCaptureNames (reCaptureNames rex) $ match (reRegex rex) bs
+
+-- | the `regex-base` monadic, polymorphic match operator
+(=~~) :: ( Monad m
+         , Functor m
+         , Typeable a
+         , RegexContext PCRE.Regex T.Text a
+         )
+      => T.Text
+      -> RE
+      -> m a
+(=~~) bs rex = addCaptureNames (reCaptureNames rex) <$> matchM (reRegex rex) bs
+
+instance IsRegex RE T.Text where
+  matchOnce             = flip (?=~)
+  matchMany             = flip (*=~)
+  makeRegexWith         = \o -> compileRegexWith o . unpackR
+  makeSearchReplaceWith = \o r t -> compileSearchReplaceWith o (unpackR r) (unpackR t)
+  regexSource           = packR . reSource
+
+-- $tutorial
+-- We have a regex tutorial at <http://tutorial.regex.uk>.
+
+-- $macros
+-- There are a number of RE macros and corresponding Haskell parsers
+-- for parsing the matched text into appropriate Haskell types. See
+-- the [Macros Tables](http://regex.uk/macros) for details.
+
+-- $options
+-- You can specify different compilation options by appending a
+-- to the name of an [re| ... |] or [ed| ... \/\/\/ ... |] quasi quoter
+-- to select the corresponding compilation option. For example, the
+-- section,
+--
+--  @(?=~/ [edBlockInsensitive|foo$\/\/\/bar|])@
+--
+-- will replace a @foo@ suffix of the argument text, of any
+-- capitalisation, with a (lower case) @bar@. If you need to specify the
+-- options dynamically, use the @[re_| ... |]@ and @[ed_| ... \/\/\/ ... |]@
+-- quasi quoters, which generate functions that take an 'IsOption' option
+-- (e.g., a 'SimpleReOptions' value) and yields a 'RE' or 'SearchReplace'
+-- as apropriate. For example if you have a 'SimpleReOptions' value in
+-- @sro@ then
+--
+--  @(?=~/ [ed_|foo$\/\/\/bar|] sro)@
+--
+-- will compile the @foo$@ RE according to the value of @sro@. For more
+-- on specifying RE options see "Text.RE.REOptions".
+
+-- $re
+-- The @[re|.*|]@ quasi quoters, with variants for specifing different
+-- options to the RE compiler (see "Text.RE.REOptions"), and the
+-- specialised back-end types and functions.
+
+-- $ed
+-- The @[ed|.*\/\/\/foo|]@ quasi quoters, with variants for specifing different
+-- options to the RE compiler (see "Text.RE.REOptions").
+
+-- $ed
+-- The -- | the @[ed| ... \/\/\/ ... |]@ quasi quoters; for example,
+--
+--  @[ed|${y}([0-9]{4})-0*${m}([0-9]{2})-0*${d}([0-9]{2})\/\/\/${d}\/${m}\/${y}|])@
+--
+-- represents a @SearchReplace@ that will convert a YYYY-MM-DD format date
+-- into a DD\/MM\/YYYY format date.
+--
+-- The only difference betweem these quasi quoters is the RE options that are set,
+-- using the same conventions as the @[re| ... |]@ quasi quoters.
+
+-- $isregex
+-- The 'IsRegex' class is used to abstact over the different regex back ends and
+-- the text types they work with -- see "Text.RE.Tools.IsRegex" for details.
diff --git a/src/Text/RE/PCRE/Text/Lazy.hs b/src/Text/RE/PCRE/Text/Lazy.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/RE/PCRE/Text/Lazy.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE NoImplicitPrelude              #-}
+{-# LANGUAGE MultiParamTypeClasses          #-}
+{-# LANGUAGE FlexibleContexts               #-}
+{-# LANGUAGE FlexibleInstances              #-}
+{-# OPTIONS_GHC -fno-warn-orphans           #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# LANGUAGE CPP                            #-}
+#if __GLASGOW_HASKELL__ >= 800
+{-# OPTIONS_GHC -fno-warn-redundant-constraints #-}
+#endif
+
+module Text.RE.PCRE.Text.Lazy
+  (
+  -- * Tutorial
+  -- $tutorial
+
+  -- * The 'Matches' and 'Match' Operators
+    (*=~)
+  , (?=~)
+  -- * The 'SearchReplace' Operators
+  , (*=~/)
+  , (?=~/)
+  -- * The 'Matches' Type
+  , Matches
+  , matchesSource
+  , allMatches
+  , anyMatches
+  , countMatches
+  , matches
+  -- * The 'Match' Type
+  , Match
+  , matchSource
+  , matched
+  , matchedText
+  -- * The Macros and Parsers
+  -- $macros
+  , module Text.RE.TestBench.Parsers
+  -- * The 'RE' Type
+  , RE
+  , reSource
+  -- * Options
+  -- $options
+  , SimpleREOptions(..)
+  -- * Compiling and Escaping REs
+  , SearchReplace(..)
+  , compileRegex
+  , compileRegexWith
+  , compileSearchReplace
+  , compileSearchReplaceWith
+  , escape
+  , escapeWith
+  , escapeREString
+  -- * The Classic regex-base Match Operators
+  , (=~)
+  , (=~~)
+  -- * The re Quasi Quoters
+  -- $re
+  , re
+  , reMultilineSensitive
+  , reMultilineInsensitive
+  , reBlockSensitive
+  , reBlockInsensitive
+  , reMS
+  , reMI
+  , reBS
+  , reBI
+  , re_
+  -- * The Ed Quasi Quoters
+  -- $ed
+  , edMultilineSensitive
+  , edMultilineInsensitive
+  , edBlockSensitive
+  , edBlockInsensitive
+  , ed
+  , edMS
+  , edMI
+  , edBS
+  , edBI
+  , ed_
+  -- * The cp Quasi Quoters
+  , cp
+  -- * IsRegex
+  -- $isregex
+  , module Text.RE.Tools.IsRegex
+  ) where
+
+import qualified Data.Text.Lazy                as TL
+import           Data.Typeable
+import           Prelude.Compat
+import           Text.RE.REOptions
+import           Text.RE.Replace
+import           Text.RE.TestBench.Parsers
+import           Text.RE.Tools.IsRegex
+import           Text.RE.ZeInternals
+import           Text.RE.ZeInternals.PCRE
+import           Text.RE.ZeInternals.SearchReplace.PCRE.Text.Lazy
+import           Text.Regex.Base
+import qualified Text.Regex.PCRE               as PCRE
+import           Text.Regex.PCRE.Text.Lazy()
+
+-- | find all the matches in the argument text; e.g., to count the number
+-- of naturals in s:
+--
+--   @countMatches $ s *=~ [re|[0-9]+|]@
+--
+(*=~) :: TL.Text
+      -> RE
+      -> Matches TL.Text
+(*=~) bs rex = addCaptureNamesToMatches (reCaptureNames rex) $ match (reRegex rex) bs
+
+-- | find the first match in the argument text; e.g., to test if there
+-- is a natural number in the input text:
+--
+--   @matched $ s ?=~ [re|[0-9]+|]@
+--
+(?=~) :: TL.Text
+      -> RE
+      -> Match TL.Text
+(?=~) bs rex = addCaptureNamesToMatch (reCaptureNames rex) $ match (reRegex rex) bs
+
+-- | search and replace all matches in the argument text; e.g., this section
+-- will convert every YYYY-MM-DD format date in its argument text into a
+-- DD\/MM\/YYYY date:
+--
+--   @(*=~\/ [ed|${y}([0-9]{4})-0*${m}([0-9]{2})-0*${d}([0-9]{2})\/\/\/${d}\/${m}\/${y}|])@
+--
+(*=~/) :: TL.Text -> SearchReplace RE TL.Text -> TL.Text
+(*=~/) = flip searchReplaceAll
+
+-- | search and replace the first occurrence only (if any) in the input text
+-- e.g., to prefix the first string of four hex digits in the input text,
+-- if any, with @0x@:
+--
+--  @(?=~\/ [ed|[0-9A-Fa-f]{4}\/\/\/0x$0|])@
+--
+(?=~/) :: TL.Text -> SearchReplace RE TL.Text -> TL.Text
+(?=~/) = flip searchReplaceFirst
+
+-- | the `regex-base` polymorphic match operator
+(=~) :: ( Typeable a
+        , RegexContext PCRE.Regex TL.Text a
+        )
+     => TL.Text
+     -> RE
+     -> a
+(=~) bs rex = addCaptureNames (reCaptureNames rex) $ match (reRegex rex) bs
+
+-- | the `regex-base` monadic, polymorphic match operator
+(=~~) :: ( Monad m
+         , Functor m
+         , Typeable a
+         , RegexContext PCRE.Regex TL.Text a
+         )
+      => TL.Text
+      -> RE
+      -> m a
+(=~~) bs rex = addCaptureNames (reCaptureNames rex) <$> matchM (reRegex rex) bs
+
+instance IsRegex RE TL.Text where
+  matchOnce             = flip (?=~)
+  matchMany             = flip (*=~)
+  makeRegexWith         = \o -> compileRegexWith o . unpackR
+  makeSearchReplaceWith = \o r t -> compileSearchReplaceWith o (unpackR r) (unpackR t)
+  regexSource           = packR . reSource
+
+-- $tutorial
+-- We have a regex tutorial at <http://tutorial.regex.uk>.
+
+-- $macros
+-- There are a number of RE macros and corresponding Haskell parsers
+-- for parsing the matched text into appropriate Haskell types. See
+-- the [Macros Tables](http://regex.uk/macros) for details.
+
+-- $options
+-- You can specify different compilation options by appending a
+-- to the name of an [re| ... |] or [ed| ... \/\/\/ ... |] quasi quoter
+-- to select the corresponding compilation option. For example, the
+-- section,
+--
+--  @(?=~/ [edBlockInsensitive|foo$\/\/\/bar|])@
+--
+-- will replace a @foo@ suffix of the argument text, of any
+-- capitalisation, with a (lower case) @bar@. If you need to specify the
+-- options dynamically, use the @[re_| ... |]@ and @[ed_| ... \/\/\/ ... |]@
+-- quasi quoters, which generate functions that take an 'IsOption' option
+-- (e.g., a 'SimpleReOptions' value) and yields a 'RE' or 'SearchReplace'
+-- as apropriate. For example if you have a 'SimpleReOptions' value in
+-- @sro@ then
+--
+--  @(?=~/ [ed_|foo$\/\/\/bar|] sro)@
+--
+-- will compile the @foo$@ RE according to the value of @sro@. For more
+-- on specifying RE options see "Text.RE.REOptions".
+
+-- $re
+-- The @[re|.*|]@ quasi quoters, with variants for specifing different
+-- options to the RE compiler (see "Text.RE.REOptions"), and the
+-- specialised back-end types and functions.
+
+-- $ed
+-- The @[ed|.*\/\/\/foo|]@ quasi quoters, with variants for specifing different
+-- options to the RE compiler (see "Text.RE.REOptions").
+
+-- $ed
+-- The -- | the @[ed| ... \/\/\/ ... |]@ quasi quoters; for example,
+--
+--  @[ed|${y}([0-9]{4})-0*${m}([0-9]{2})-0*${d}([0-9]{2})\/\/\/${d}\/${m}\/${y}|])@
+--
+-- represents a @SearchReplace@ that will convert a YYYY-MM-DD format date
+-- into a DD\/MM\/YYYY format date.
+--
+-- The only difference betweem these quasi quoters is the RE options that are set,
+-- using the same conventions as the @[re| ... |]@ quasi quoters.
+
+-- $isregex
+-- The 'IsRegex' class is used to abstact over the different regex back ends and
+-- the text types they work with -- see "Text.RE.Tools.IsRegex" for details.
diff --git a/src/Text/RE/TDFA/ByteString.hs b/src/Text/RE/TDFA/ByteString.hs
--- a/src/Text/RE/TDFA/ByteString.hs
+++ b/src/Text/RE/TDFA/ByteString.hs
@@ -96,7 +96,7 @@
 import           Text.RE.ZeInternals.TDFA
 import           Text.Regex.Base
 import qualified Text.Regex.TDFA               as TDFA
-
+-- NB regex-base instance imports maybe be needed for for some API modules
 
 -- | find all the matches in the argument text; e.g., to count the number
 -- of naturals in s:
diff --git a/src/Text/RE/TDFA/ByteString/Lazy.hs b/src/Text/RE/TDFA/ByteString/Lazy.hs
--- a/src/Text/RE/TDFA/ByteString/Lazy.hs
+++ b/src/Text/RE/TDFA/ByteString/Lazy.hs
@@ -96,7 +96,7 @@
 import           Text.RE.ZeInternals.TDFA
 import           Text.Regex.Base
 import qualified Text.Regex.TDFA               as TDFA
-
+-- NB regex-base instance imports maybe be needed for for some API modules
 
 -- | find all the matches in the argument text; e.g., to count the number
 -- of naturals in s:
diff --git a/src/Text/RE/TDFA/Sequence.hs b/src/Text/RE/TDFA/Sequence.hs
--- a/src/Text/RE/TDFA/Sequence.hs
+++ b/src/Text/RE/TDFA/Sequence.hs
@@ -96,7 +96,7 @@
 import           Text.RE.ZeInternals.TDFA
 import           Text.Regex.Base
 import qualified Text.Regex.TDFA               as TDFA
-
+-- NB regex-base instance imports maybe be needed for for some API modules
 
 -- | find all the matches in the argument text; e.g., to count the number
 -- of naturals in s:
diff --git a/src/Text/RE/TDFA/String.hs b/src/Text/RE/TDFA/String.hs
--- a/src/Text/RE/TDFA/String.hs
+++ b/src/Text/RE/TDFA/String.hs
@@ -96,7 +96,7 @@
 import           Text.RE.ZeInternals.TDFA
 import           Text.Regex.Base
 import qualified Text.Regex.TDFA               as TDFA
-
+-- NB regex-base instance imports maybe be needed for for some API modules
 
 -- | find all the matches in the argument text; e.g., to count the number
 -- of naturals in s:
diff --git a/src/Text/RE/TDFA/Text.hs b/src/Text/RE/TDFA/Text.hs
--- a/src/Text/RE/TDFA/Text.hs
+++ b/src/Text/RE/TDFA/Text.hs
@@ -96,7 +96,7 @@
 import           Text.RE.ZeInternals.TDFA
 import           Text.Regex.Base
 import qualified Text.Regex.TDFA               as TDFA
-
+-- NB regex-base instance imports maybe be needed for for some API modules
 
 -- | find all the matches in the argument text; e.g., to count the number
 -- of naturals in s:
diff --git a/src/Text/RE/TDFA/Text/Lazy.hs b/src/Text/RE/TDFA/Text/Lazy.hs
--- a/src/Text/RE/TDFA/Text/Lazy.hs
+++ b/src/Text/RE/TDFA/Text/Lazy.hs
@@ -96,7 +96,7 @@
 import           Text.RE.ZeInternals.TDFA
 import           Text.Regex.Base
 import qualified Text.Regex.TDFA               as TDFA
-
+-- NB regex-base instance imports maybe be needed for for some API modules
 
 -- | find all the matches in the argument text; e.g., to count the number
 -- of naturals in s:
diff --git a/stack-8.0.yaml b/stack-8.0.yaml
--- a/stack-8.0.yaml
+++ b/stack-8.0.yaml
@@ -1,7 +1,8 @@
-resolver: lts-8.6
+resolver: lts-8.16
 install-ghc: true
 flags: {}
 packages:
 - '.'
 system-ghc: false
-extra-deps: []
+extra-deps:
+  - regex-pcre-text-0.94.0.0
