diff --git a/NEWS b/NEWS
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,39 @@
+Darcs 2.5.2, 14 March 2011
+
+ * Important changes in Darcs 2.5.2
+
+   * compatible with Haskell Platform 2011.2.0.0
+   * bump parsec dependency for HP compatibility
+   * fix regression allowing to add files inside boring directories
+
+ * Issues resolved in Darcs 2.5.2
+
+   * 2049: Darcs regression: 2.5 creates a broken patch
+
+Darcs 2.5.1, 10 February 2011
+
+ * Important changes in Darcs 2.5.1
+
+   * original text is included in conflict marks
+   * GHC 7.0 is supported
+   * the version of GHC is restricted in the cabal file
+   * warning message about old-fashioned repositories points to wiki
+   * non-repository paths are guarded
+   * library API: program name is configurable
+   * darcs send prints the remote repository address right away
+   * informational message about --set-default is disabled with --no-set
+   * _darcs/format is correctly handled on get
+   * linking libdarcs on Windows is fixed
+
+ * Issues resolved in Darcs 2.5.1
+
+   * 1978: get does not correctly treat _darcs/format
+   * 2003: Message about --set-default should be optional
+   * 2008: build with GHC 7.0
+   * 2015: linking with libdarcs broken under Windows (2.5.0)
+   * 2019: allow building with mtl 2
+   * 2035: darcs accepts fake subpaths (relative paths outside of the repo)
+
 Darcs 2.5, 30 October 2010:
 
  * Important changes in Darcs 2.5
diff --git a/contrib/darcs_completion b/contrib/darcs_completion
--- a/contrib/darcs_completion
+++ b/contrib/darcs_completion
@@ -12,12 +12,12 @@
     COMPREPLY=()
 
     if (($COMP_CWORD == 1)); then
-        COMPREPLY=( $( darcs --commands | grep "^$cur" ) )
+        COMPREPLY=( $( darcs --commands | command grep "^$cur" ) )
         return 0
     fi
 
     local IFS=$'\n' # So that the following "command-output to array" operation splits only at newlines, not at each space, tab or newline.
-    COMPREPLY=( $( darcs ${COMP_WORDS[1]} --list-option | grep "^${cur//./\\.}") )
+    COMPREPLY=( $( darcs ${COMP_WORDS[1]} --list-option | command grep "^${cur//./\\.}") )
 
 	# Then, we adapt the resulting strings to be reusable by bash. If we don't
 	# do this, in the case where we have two repositories named
diff --git a/darcs-beta.cabal b/darcs-beta.cabal
--- a/darcs-beta.cabal
+++ b/darcs-beta.cabal
@@ -1,5 +1,5 @@
 Name: darcs-beta
-version:        2.7.98.1
+version:        2.7.98.2
 License:        GPL
 License-file:   COPYING
 Author:         David Roundy <droundy@darcs.net>, <darcs-users@darcs.net>
@@ -95,6 +95,10 @@
   description: Build darcs library
   default:     True
 
+flag executable
+  description: Build darcs executable
+  default:     True
+
 flag color
   description: Use ansi color escapes.
 
@@ -104,10 +108,6 @@
 flag hpc
   default:     False
 
-flag deps-only
-  default:     False
-  description: A cunning trick to have cabal install build dependencies
-
 flag test
   default:     False
   description: Build test harness
@@ -121,6 +121,15 @@
   default:     False
   description: Build with warnings-as-errors
 
+-- If base >= 4.4 is used, the standard directory functions
+-- do Unicode translation. Use an explicit flag so we can
+-- detect this situation and use a workaround.
+flag base44
+  default:     False
+  -- once we have a workaround remove the manual: line
+  manual:      True
+  description: Allow base 4.4 or above: note, there are known problems with Unicode filenames (http://bugs.darcs.net/issue2095)
+
 -- ----------------------------------------------------------------------
 -- darcs library
 -- ----------------------------------------------------------------------
@@ -131,6 +140,8 @@
   else
     buildable: True
 
+    build-tools: ghc >= 6.10 && < 7.6
+
     hs-source-dirs:   src
     include-dirs:     src
 
@@ -234,6 +245,15 @@
                       Darcs.Patch.Prim.V1.Details
                       Darcs.Patch.Prim.V1.Read
                       Darcs.Patch.Prim.V1.Show
+                      Darcs.Patch.Prim.V3
+                      Darcs.Patch.Prim.V3.ObjectMap
+                      Darcs.Patch.Prim.V3.Apply
+                      Darcs.Patch.Prim.V3.Coalesce
+                      Darcs.Patch.Prim.V3.Commute
+                      Darcs.Patch.Prim.V3.Core
+                      Darcs.Patch.Prim.V3.Details
+                      Darcs.Patch.Prim.V3.Read
+                      Darcs.Patch.Prim.V3.Show
                       Darcs.Patch.Read
                       Darcs.Patch.ReadMonads
                       Darcs.Patch.RegChars
@@ -280,6 +300,7 @@
                       Darcs.RunCommand
                       Darcs.SelectChanges
                       Darcs.SignalHandler
+                      Darcs.Ssh
                       Darcs.Test
                       Darcs.TheCommands
                       Darcs.URL
@@ -294,15 +315,16 @@
                       English
                       Exec
                       ByteStringUtils
-                      HTTP
                       IsoDate
                       Lcs
                       Printer
                       Progress
                       Ratified
                       SHA1
-                      Ssh
                       URL
+                      URL.Request
+                      URL.Curl
+                      URL.HTTP
                       Workaround
 
     other-modules:    Version
@@ -312,6 +334,8 @@
                       src/maybe_relink.c
                       src/umask.c
                       src/Crypt/sha2.c
+                      src/system_encoding.c
+
     cc-options:       -D_REENTRANT
 
     if os(windows)
@@ -329,29 +353,32 @@
     if os(solaris)
       cc-options:     -DHAVE_SIGINFO_H
 
-    build-depends:   base          >= 4 && < 5,
-                     extensible-exceptions >= 0.1 && < 0.2,
+    if flag(base44)
+      build-depends: base >= 4 && < 4.6
+    else
+      build-depends: base >= 4 && < 4.4
+
+    build-depends:   extensible-exceptions >= 0.1 && < 0.2,
                      regex-compat >= 0.95.1,
                      mtl          >= 1.0 && < 2.1,
                      parsec       >= 2.0 && < 3.2,
                      html         == 1.0.*,
-                     filepath     >= 1.1.0.0 && < 1.3.0.0,
+                     filepath     >= 1.1.0.0 && < 1.5.0.0,
                      haskeline    >= 0.6.3 && < 0.7,
                      hashed-storage >= 0.5.6 && < 0.6,
                      vector       >= 0.7,
                      tar          == 0.3.*
 
     if !os(windows)
-      build-depends: unix >= 1.0 && < 2.5
+      build-depends: unix >= 1.0 && < 2.6
 
-    build-depends: base >= 4 && < 5,
-                   bytestring >= 0.9.0 && < 0.10,
-                   text == 0.11.*,
-                   old-time   == 1.0.*,
+    build-depends: bytestring >= 0.9.0 && < 0.10,
+                   text       >= 0.11.0.6 && < 0.12.0.0,
+                   old-time   >= 1.0 && < 1.2,
                    directory  >= 1.0.0.0 && < 1.2.0.0,
-                   process    == 1.0.*,
+                   process    >= 1.0.0.0 && < 1.2.0.0,
                    containers >= 0.1 && < 0.5,
-                   array      >= 0.1 && < 0.4,
+                   array      >= 0.1 && < 0.5,
                    random     == 1.0.*
 
 
@@ -381,11 +408,11 @@
 
     if flag(http)
         build-depends:    network >= 2.2 && < 2.4,
-                          HTTP    >= 3000.0 && < 4000.2
+                          HTTP    >= 4000.0.8 && < 4000.3
         cpp-options:      -DHAVE_HTTP
         x-have-http:
 
-    if (!flag(curl) && !flag(http)) || flag(deps-only)
+    if (!flag(curl) && !flag(http))
         buildable: False
 
     if flag(mmap) && !os(windows)
@@ -426,6 +453,12 @@
 -- ----------------------------------------------------------------------
 
 Executable          darcs
+  if !flag(executable)
+    buildable: False
+  else
+    buildable: True
+  build-tools: ghc >= 6.10 && < 7.6
+
   main-is:          darcs.hs
   hs-source-dirs:   src
   include-dirs:     src
@@ -434,6 +467,7 @@
                     src/maybe_relink.c
                     src/umask.c
                     src/Crypt/sha2.c
+                    src/system_encoding.c
 
 
   if flag(optimize)
@@ -476,29 +510,32 @@
   if os(solaris)
     cc-options:     -DHAVE_SIGINFO_H
 
-  build-depends:   base          >= 4 && < 5,
-                   extensible-exceptions >= 0.1 && < 0.2,
+  if flag(base44)
+    build-depends: base >= 4 && < 4.6
+  else
+    build-depends: base >= 4 && < 4.4
+
+  build-depends:   extensible-exceptions >= 0.1 && < 0.2,
                    regex-compat >= 0.95.1,
                    mtl          >= 1.0 && < 2.1,
                    parsec       >= 2.0 && < 3.2,
                    html         == 1.0.*,
-                   filepath     >= 1.1.0.0 && < 1.3.0.0,
+                   filepath     >= 1.1.0.0 && < 1.5.0.0,
                    haskeline    >= 0.6.3 && < 0.7,
                    hashed-storage >= 0.5.6 && < 0.6,
                    vector       >= 0.7,
                    tar          == 0.3.*
 
   if !os(windows)
-    build-depends: unix >= 1.0 && < 2.5
+    build-depends: unix >= 1.0 && < 2.6
 
-  build-depends: base >= 4 && < 5,
-                 bytestring >= 0.9.0 && < 0.10,
-                 text == 0.11.*,
-                   old-time   == 1.0.*,
+  build-depends:   bytestring >= 0.9.0 && < 0.10,
+                   text       >= 0.11.0.6 && < 0.12.0.0,
+                   old-time   >= 1.0 && < 1.2,
                    directory  >= 1.0.0.0 && < 1.2.0.0,
-                   process    == 1.0.*,
+                   process    >= 1.0.0.0 && < 1.2.0.0,
                    containers >= 0.1 && < 0.5,
-                   array      >= 0.1 && < 0.4,
+                   array      >= 0.1 && < 0.5,
                    random     == 1.0.*
 
   if flag(curl)
@@ -510,11 +547,11 @@
 
   if flag(http)
       build-depends:    network >= 2.2 && < 2.4,
-                        HTTP    >= 3000.0 && < 4000.2
+                        HTTP    >= 4000.0.8 && < 4000.3
       cpp-options:      -DHAVE_HTTP
       x-have-http:
 
-  if (!flag(curl) && !flag(http)) || flag(deps-only)
+  if (!flag(curl) && !flag(http))
       buildable: False
 
   if flag(mmap) && !os(windows)
@@ -557,17 +594,20 @@
 Executable          darcs-test
   main-is:          test.hs
 
+  build-tools: ghc >= 6.10 && < 7.2
+
+
   if !flag(test)
     buildable: False
   else
     buildable: True
-    build-depends:   base          < 5,
-                     extensible-exceptions >= 0.1 && < 0.2,
+
+    build-depends:   extensible-exceptions >= 0.1 && < 0.2,
                      regex-compat >= 0.95.1,
                      mtl          >= 1.0 && < 2.1,
                      parsec       >= 2.0 && < 3.2,
                      html         == 1.0.*,
-                     filepath     >= 1.1.0.0 && < 1.3.0.0,
+                     filepath     >= 1.1.0.0 && < 1.5.0.0,
                      QuickCheck   >= 2.3,
                      HUnit        >= 1.0,
                      cmdlib       >= 0.2.1 && < 0.4,
@@ -583,22 +623,30 @@
                       src/maybe_relink.c
                       src/umask.c
                       src/Crypt/sha2.c
+                      src/system_encoding.c
     -- list all unit test modules not exported by libdarcs; otherwise Cabal won't
     -- include them in the tarball
     other-modules:    Darcs.Test.Email
                       Darcs.Test.Patch.Check
-                      Darcs.Test.Patch.Examples
-                      Darcs.Test.Patch.Examples2
+                      Darcs.Test.Patch.Examples.Set1
+                      Darcs.Test.Patch.Examples.Set2Unwitnessed
+                      Darcs.Test.Patch.WSub
                       Darcs.Test.Patch.Info
-                      Darcs.Test.Patch.Prim.V1
-                      Darcs.Test.Patch.Properties
-                      Darcs.Test.Patch.Properties2
-                      Darcs.Test.Patch.QuickCheck
+                      Darcs.Test.Patch.Properties.V1Set1
+                      Darcs.Test.Patch.Properties.V1Set2
+                      Darcs.Test.Patch.Properties.Generic
+                      Darcs.Test.Patch.Properties.GenericUnwitnessed
+                      Darcs.Test.Patch.Properties.Check
+                      Darcs.Test.Patch.Properties.Real
+                      Darcs.Test.Patch.Arbitrary.Generic
+                      Darcs.Test.Patch.Arbitrary.Real
+                      Darcs.Test.Patch.Arbitrary.PrimV1
+                      Darcs.Test.Patch.Arbitrary.PrimV3
+                      Darcs.Test.Patch.Arbitrary.PatchV1
                       Darcs.Test.Patch.RepoModel
-                      Darcs.Test.Patch.Test
-                      Darcs.Test.Patch.Unit
-                      Darcs.Test.Patch.Unit2
                       Darcs.Test.Patch.Utils
+                      Darcs.Test.Patch.V1Model
+                      Darcs.Test.Patch.V3Model
                       Darcs.Test.Patch.WithState
                       Darcs.Test.Patch
                       Darcs.Test.Misc
@@ -643,18 +691,22 @@
     if os(solaris)
       cc-options:     -DHAVE_SIGINFO_H
 
+    if flag(base44)
+      build-depends: base >= 4 && < 4.6
+    else
+      build-depends: base >= 4 && < 4.4
+
     if !os(windows)
-      build-depends: unix >= 1.0 && < 2.5
+      build-depends: unix >= 1.0 && < 2.6
 
-    build-depends: base >= 4 && < 5,
-                   bytestring >= 0.9.0 && < 0.10,
+    build-depends: bytestring >= 0.9.0 && < 0.10,
                    haskeline    >= 0.6.3 && < 0.7,
-                   text == 0.11.*,
-                   old-time   == 1.0.*,
+                   text       >= 0.11.0.6 && < 0.12.0.0,
+                   old-time   >= 1.0 && < 1.2,
                    directory  >= 1.0.0.0 && < 1.2.0.0,
-                   process    == 1.0.*,
+                   process    >= 1.0.0.0 && < 1.2.0.0,
                    containers >= 0.1 && < 0.5,
-                   array      >= 0.1 && < 0.4,
+                   array      >= 0.1 && < 0.5,
                    hashed-storage >= 0.5.6 && < 0.6,
                    vector       >= 0.7,
                    tar        == 0.3.*,
@@ -673,7 +725,7 @@
 
     if flag(http)
         build-depends:    network >= 2.2 && < 2.4,
-                          HTTP    >= 3000.0 && < 4000.2
+                          HTTP    >= 4000.0.8 && < 4000.3
 
     if flag(color)
       x-use-color:
diff --git a/dist/build/ByteStringUtils.hi b/dist/build/ByteStringUtils.hi
Binary files a/dist/build/ByteStringUtils.hi and b/dist/build/ByteStringUtils.hi differ
diff --git a/dist/build/ByteStringUtils.o b/dist/build/ByteStringUtils.o
Binary files a/dist/build/ByteStringUtils.o and b/dist/build/ByteStringUtils.o differ
diff --git a/dist/build/CommandLine.hi b/dist/build/CommandLine.hi
Binary files a/dist/build/CommandLine.hi and b/dist/build/CommandLine.hi differ
diff --git a/dist/build/CommandLine.o b/dist/build/CommandLine.o
Binary files a/dist/build/CommandLine.o and b/dist/build/CommandLine.o differ
diff --git a/dist/build/Crypt/SHA256.hi b/dist/build/Crypt/SHA256.hi
Binary files a/dist/build/Crypt/SHA256.hi and b/dist/build/Crypt/SHA256.hi differ
diff --git a/dist/build/Crypt/SHA256.o b/dist/build/Crypt/SHA256.o
Binary files a/dist/build/Crypt/SHA256.o and b/dist/build/Crypt/SHA256.o differ
diff --git a/dist/build/Darcs/Annotate.hi b/dist/build/Darcs/Annotate.hi
Binary files a/dist/build/Darcs/Annotate.hi and b/dist/build/Darcs/Annotate.hi differ
diff --git a/dist/build/Darcs/Annotate.o b/dist/build/Darcs/Annotate.o
Binary files a/dist/build/Darcs/Annotate.o and b/dist/build/Darcs/Annotate.o differ
diff --git a/dist/build/Darcs/ArgumentDefaults.hi b/dist/build/Darcs/ArgumentDefaults.hi
Binary files a/dist/build/Darcs/ArgumentDefaults.hi and b/dist/build/Darcs/ArgumentDefaults.hi differ
diff --git a/dist/build/Darcs/ArgumentDefaults.o b/dist/build/Darcs/ArgumentDefaults.o
Binary files a/dist/build/Darcs/ArgumentDefaults.o and b/dist/build/Darcs/ArgumentDefaults.o differ
diff --git a/dist/build/Darcs/Arguments.hi b/dist/build/Darcs/Arguments.hi
Binary files a/dist/build/Darcs/Arguments.hi and b/dist/build/Darcs/Arguments.hi differ
diff --git a/dist/build/Darcs/Arguments.o b/dist/build/Darcs/Arguments.o
Binary files a/dist/build/Darcs/Arguments.o and b/dist/build/Darcs/Arguments.o differ
diff --git a/dist/build/Darcs/Bug.hi b/dist/build/Darcs/Bug.hi
Binary files a/dist/build/Darcs/Bug.hi and b/dist/build/Darcs/Bug.hi differ
diff --git a/dist/build/Darcs/Bug.o b/dist/build/Darcs/Bug.o
Binary files a/dist/build/Darcs/Bug.o and b/dist/build/Darcs/Bug.o differ
diff --git a/dist/build/Darcs/ColorPrinter.hi b/dist/build/Darcs/ColorPrinter.hi
Binary files a/dist/build/Darcs/ColorPrinter.hi and b/dist/build/Darcs/ColorPrinter.hi differ
diff --git a/dist/build/Darcs/ColorPrinter.o b/dist/build/Darcs/ColorPrinter.o
Binary files a/dist/build/Darcs/ColorPrinter.o and b/dist/build/Darcs/ColorPrinter.o differ
diff --git a/dist/build/Darcs/Commands.hi b/dist/build/Darcs/Commands.hi
Binary files a/dist/build/Darcs/Commands.hi and b/dist/build/Darcs/Commands.hi differ
diff --git a/dist/build/Darcs/Commands.o b/dist/build/Darcs/Commands.o
Binary files a/dist/build/Darcs/Commands.o and b/dist/build/Darcs/Commands.o differ
diff --git a/dist/build/Darcs/Commands/Add.hi b/dist/build/Darcs/Commands/Add.hi
Binary files a/dist/build/Darcs/Commands/Add.hi and b/dist/build/Darcs/Commands/Add.hi differ
diff --git a/dist/build/Darcs/Commands/Add.o b/dist/build/Darcs/Commands/Add.o
Binary files a/dist/build/Darcs/Commands/Add.o and b/dist/build/Darcs/Commands/Add.o differ
diff --git a/dist/build/Darcs/Commands/AmendRecord.hi b/dist/build/Darcs/Commands/AmendRecord.hi
Binary files a/dist/build/Darcs/Commands/AmendRecord.hi and b/dist/build/Darcs/Commands/AmendRecord.hi differ
diff --git a/dist/build/Darcs/Commands/AmendRecord.o b/dist/build/Darcs/Commands/AmendRecord.o
Binary files a/dist/build/Darcs/Commands/AmendRecord.o and b/dist/build/Darcs/Commands/AmendRecord.o differ
diff --git a/dist/build/Darcs/Commands/Annotate.hi b/dist/build/Darcs/Commands/Annotate.hi
Binary files a/dist/build/Darcs/Commands/Annotate.hi and b/dist/build/Darcs/Commands/Annotate.hi differ
diff --git a/dist/build/Darcs/Commands/Annotate.o b/dist/build/Darcs/Commands/Annotate.o
Binary files a/dist/build/Darcs/Commands/Annotate.o and b/dist/build/Darcs/Commands/Annotate.o differ
diff --git a/dist/build/Darcs/Commands/Apply.hi b/dist/build/Darcs/Commands/Apply.hi
Binary files a/dist/build/Darcs/Commands/Apply.hi and b/dist/build/Darcs/Commands/Apply.hi differ
diff --git a/dist/build/Darcs/Commands/Apply.o b/dist/build/Darcs/Commands/Apply.o
Binary files a/dist/build/Darcs/Commands/Apply.o and b/dist/build/Darcs/Commands/Apply.o differ
diff --git a/dist/build/Darcs/Commands/Changes.hi b/dist/build/Darcs/Commands/Changes.hi
Binary files a/dist/build/Darcs/Commands/Changes.hi and b/dist/build/Darcs/Commands/Changes.hi differ
diff --git a/dist/build/Darcs/Commands/Changes.o b/dist/build/Darcs/Commands/Changes.o
Binary files a/dist/build/Darcs/Commands/Changes.o and b/dist/build/Darcs/Commands/Changes.o differ
diff --git a/dist/build/Darcs/Commands/Check.hi b/dist/build/Darcs/Commands/Check.hi
Binary files a/dist/build/Darcs/Commands/Check.hi and b/dist/build/Darcs/Commands/Check.hi differ
diff --git a/dist/build/Darcs/Commands/Check.o b/dist/build/Darcs/Commands/Check.o
Binary files a/dist/build/Darcs/Commands/Check.o and b/dist/build/Darcs/Commands/Check.o differ
diff --git a/dist/build/Darcs/Commands/Convert.hi b/dist/build/Darcs/Commands/Convert.hi
Binary files a/dist/build/Darcs/Commands/Convert.hi and b/dist/build/Darcs/Commands/Convert.hi differ
diff --git a/dist/build/Darcs/Commands/Convert.o b/dist/build/Darcs/Commands/Convert.o
Binary files a/dist/build/Darcs/Commands/Convert.o and b/dist/build/Darcs/Commands/Convert.o differ
diff --git a/dist/build/Darcs/Commands/Diff.hi b/dist/build/Darcs/Commands/Diff.hi
Binary files a/dist/build/Darcs/Commands/Diff.hi and b/dist/build/Darcs/Commands/Diff.hi differ
diff --git a/dist/build/Darcs/Commands/Diff.o b/dist/build/Darcs/Commands/Diff.o
Binary files a/dist/build/Darcs/Commands/Diff.o and b/dist/build/Darcs/Commands/Diff.o differ
diff --git a/dist/build/Darcs/Commands/Dist.hi b/dist/build/Darcs/Commands/Dist.hi
Binary files a/dist/build/Darcs/Commands/Dist.hi and b/dist/build/Darcs/Commands/Dist.hi differ
diff --git a/dist/build/Darcs/Commands/Dist.o b/dist/build/Darcs/Commands/Dist.o
Binary files a/dist/build/Darcs/Commands/Dist.o and b/dist/build/Darcs/Commands/Dist.o differ
diff --git a/dist/build/Darcs/Commands/GZCRCs.hi b/dist/build/Darcs/Commands/GZCRCs.hi
Binary files a/dist/build/Darcs/Commands/GZCRCs.hi and b/dist/build/Darcs/Commands/GZCRCs.hi differ
diff --git a/dist/build/Darcs/Commands/GZCRCs.o b/dist/build/Darcs/Commands/GZCRCs.o
Binary files a/dist/build/Darcs/Commands/GZCRCs.o and b/dist/build/Darcs/Commands/GZCRCs.o differ
diff --git a/dist/build/Darcs/Commands/Get.hi b/dist/build/Darcs/Commands/Get.hi
Binary files a/dist/build/Darcs/Commands/Get.hi and b/dist/build/Darcs/Commands/Get.hi differ
diff --git a/dist/build/Darcs/Commands/Get.o b/dist/build/Darcs/Commands/Get.o
Binary files a/dist/build/Darcs/Commands/Get.o and b/dist/build/Darcs/Commands/Get.o differ
diff --git a/dist/build/Darcs/Commands/Help.hi b/dist/build/Darcs/Commands/Help.hi
Binary files a/dist/build/Darcs/Commands/Help.hi and b/dist/build/Darcs/Commands/Help.hi differ
diff --git a/dist/build/Darcs/Commands/Help.o b/dist/build/Darcs/Commands/Help.o
Binary files a/dist/build/Darcs/Commands/Help.o and b/dist/build/Darcs/Commands/Help.o differ
diff --git a/dist/build/Darcs/Commands/Init.hi b/dist/build/Darcs/Commands/Init.hi
Binary files a/dist/build/Darcs/Commands/Init.hi and b/dist/build/Darcs/Commands/Init.hi differ
diff --git a/dist/build/Darcs/Commands/Init.o b/dist/build/Darcs/Commands/Init.o
Binary files a/dist/build/Darcs/Commands/Init.o and b/dist/build/Darcs/Commands/Init.o differ
diff --git a/dist/build/Darcs/Commands/MarkConflicts.hi b/dist/build/Darcs/Commands/MarkConflicts.hi
Binary files a/dist/build/Darcs/Commands/MarkConflicts.hi and b/dist/build/Darcs/Commands/MarkConflicts.hi differ
diff --git a/dist/build/Darcs/Commands/MarkConflicts.o b/dist/build/Darcs/Commands/MarkConflicts.o
Binary files a/dist/build/Darcs/Commands/MarkConflicts.o and b/dist/build/Darcs/Commands/MarkConflicts.o differ
diff --git a/dist/build/Darcs/Commands/Move.hi b/dist/build/Darcs/Commands/Move.hi
Binary files a/dist/build/Darcs/Commands/Move.hi and b/dist/build/Darcs/Commands/Move.hi differ
diff --git a/dist/build/Darcs/Commands/Move.o b/dist/build/Darcs/Commands/Move.o
Binary files a/dist/build/Darcs/Commands/Move.o and b/dist/build/Darcs/Commands/Move.o differ
diff --git a/dist/build/Darcs/Commands/Optimize.hi b/dist/build/Darcs/Commands/Optimize.hi
Binary files a/dist/build/Darcs/Commands/Optimize.hi and b/dist/build/Darcs/Commands/Optimize.hi differ
diff --git a/dist/build/Darcs/Commands/Optimize.o b/dist/build/Darcs/Commands/Optimize.o
Binary files a/dist/build/Darcs/Commands/Optimize.o and b/dist/build/Darcs/Commands/Optimize.o differ
diff --git a/dist/build/Darcs/Commands/Pull.hi b/dist/build/Darcs/Commands/Pull.hi
Binary files a/dist/build/Darcs/Commands/Pull.hi and b/dist/build/Darcs/Commands/Pull.hi differ
diff --git a/dist/build/Darcs/Commands/Pull.o b/dist/build/Darcs/Commands/Pull.o
Binary files a/dist/build/Darcs/Commands/Pull.o and b/dist/build/Darcs/Commands/Pull.o differ
diff --git a/dist/build/Darcs/Commands/Push.hi b/dist/build/Darcs/Commands/Push.hi
Binary files a/dist/build/Darcs/Commands/Push.hi and b/dist/build/Darcs/Commands/Push.hi differ
diff --git a/dist/build/Darcs/Commands/Push.o b/dist/build/Darcs/Commands/Push.o
Binary files a/dist/build/Darcs/Commands/Push.o and b/dist/build/Darcs/Commands/Push.o differ
diff --git a/dist/build/Darcs/Commands/Put.hi b/dist/build/Darcs/Commands/Put.hi
Binary files a/dist/build/Darcs/Commands/Put.hi and b/dist/build/Darcs/Commands/Put.hi differ
diff --git a/dist/build/Darcs/Commands/Put.o b/dist/build/Darcs/Commands/Put.o
Binary files a/dist/build/Darcs/Commands/Put.o and b/dist/build/Darcs/Commands/Put.o differ
diff --git a/dist/build/Darcs/Commands/Record.hi b/dist/build/Darcs/Commands/Record.hi
Binary files a/dist/build/Darcs/Commands/Record.hi and b/dist/build/Darcs/Commands/Record.hi differ
diff --git a/dist/build/Darcs/Commands/Record.o b/dist/build/Darcs/Commands/Record.o
Binary files a/dist/build/Darcs/Commands/Record.o and b/dist/build/Darcs/Commands/Record.o differ
diff --git a/dist/build/Darcs/Commands/Remove.hi b/dist/build/Darcs/Commands/Remove.hi
Binary files a/dist/build/Darcs/Commands/Remove.hi and b/dist/build/Darcs/Commands/Remove.hi differ
diff --git a/dist/build/Darcs/Commands/Remove.o b/dist/build/Darcs/Commands/Remove.o
Binary files a/dist/build/Darcs/Commands/Remove.o and b/dist/build/Darcs/Commands/Remove.o differ
diff --git a/dist/build/Darcs/Commands/Replace.hi b/dist/build/Darcs/Commands/Replace.hi
Binary files a/dist/build/Darcs/Commands/Replace.hi and b/dist/build/Darcs/Commands/Replace.hi differ
diff --git a/dist/build/Darcs/Commands/Replace.o b/dist/build/Darcs/Commands/Replace.o
Binary files a/dist/build/Darcs/Commands/Replace.o and b/dist/build/Darcs/Commands/Replace.o differ
diff --git a/dist/build/Darcs/Commands/Revert.hi b/dist/build/Darcs/Commands/Revert.hi
Binary files a/dist/build/Darcs/Commands/Revert.hi and b/dist/build/Darcs/Commands/Revert.hi differ
diff --git a/dist/build/Darcs/Commands/Revert.o b/dist/build/Darcs/Commands/Revert.o
Binary files a/dist/build/Darcs/Commands/Revert.o and b/dist/build/Darcs/Commands/Revert.o differ
diff --git a/dist/build/Darcs/Commands/Rollback.hi b/dist/build/Darcs/Commands/Rollback.hi
Binary files a/dist/build/Darcs/Commands/Rollback.hi and b/dist/build/Darcs/Commands/Rollback.hi differ
diff --git a/dist/build/Darcs/Commands/Rollback.o b/dist/build/Darcs/Commands/Rollback.o
Binary files a/dist/build/Darcs/Commands/Rollback.o and b/dist/build/Darcs/Commands/Rollback.o differ
diff --git a/dist/build/Darcs/Commands/Send.hi b/dist/build/Darcs/Commands/Send.hi
Binary files a/dist/build/Darcs/Commands/Send.hi and b/dist/build/Darcs/Commands/Send.hi differ
diff --git a/dist/build/Darcs/Commands/Send.o b/dist/build/Darcs/Commands/Send.o
Binary files a/dist/build/Darcs/Commands/Send.o and b/dist/build/Darcs/Commands/Send.o differ
diff --git a/dist/build/Darcs/Commands/SetPref.hi b/dist/build/Darcs/Commands/SetPref.hi
Binary files a/dist/build/Darcs/Commands/SetPref.hi and b/dist/build/Darcs/Commands/SetPref.hi differ
diff --git a/dist/build/Darcs/Commands/SetPref.o b/dist/build/Darcs/Commands/SetPref.o
Binary files a/dist/build/Darcs/Commands/SetPref.o and b/dist/build/Darcs/Commands/SetPref.o differ
diff --git a/dist/build/Darcs/Commands/Show.hi b/dist/build/Darcs/Commands/Show.hi
Binary files a/dist/build/Darcs/Commands/Show.hi and b/dist/build/Darcs/Commands/Show.hi differ
diff --git a/dist/build/Darcs/Commands/Show.o b/dist/build/Darcs/Commands/Show.o
Binary files a/dist/build/Darcs/Commands/Show.o and b/dist/build/Darcs/Commands/Show.o differ
diff --git a/dist/build/Darcs/Commands/ShowAuthors.hi b/dist/build/Darcs/Commands/ShowAuthors.hi
Binary files a/dist/build/Darcs/Commands/ShowAuthors.hi and b/dist/build/Darcs/Commands/ShowAuthors.hi differ
diff --git a/dist/build/Darcs/Commands/ShowAuthors.o b/dist/build/Darcs/Commands/ShowAuthors.o
Binary files a/dist/build/Darcs/Commands/ShowAuthors.o and b/dist/build/Darcs/Commands/ShowAuthors.o differ
diff --git a/dist/build/Darcs/Commands/ShowBug.hi b/dist/build/Darcs/Commands/ShowBug.hi
Binary files a/dist/build/Darcs/Commands/ShowBug.hi and b/dist/build/Darcs/Commands/ShowBug.hi differ
diff --git a/dist/build/Darcs/Commands/ShowBug.o b/dist/build/Darcs/Commands/ShowBug.o
Binary files a/dist/build/Darcs/Commands/ShowBug.o and b/dist/build/Darcs/Commands/ShowBug.o differ
diff --git a/dist/build/Darcs/Commands/ShowContents.hi b/dist/build/Darcs/Commands/ShowContents.hi
Binary files a/dist/build/Darcs/Commands/ShowContents.hi and b/dist/build/Darcs/Commands/ShowContents.hi differ
diff --git a/dist/build/Darcs/Commands/ShowContents.o b/dist/build/Darcs/Commands/ShowContents.o
Binary files a/dist/build/Darcs/Commands/ShowContents.o and b/dist/build/Darcs/Commands/ShowContents.o differ
diff --git a/dist/build/Darcs/Commands/ShowFiles.hi b/dist/build/Darcs/Commands/ShowFiles.hi
Binary files a/dist/build/Darcs/Commands/ShowFiles.hi and b/dist/build/Darcs/Commands/ShowFiles.hi differ
diff --git a/dist/build/Darcs/Commands/ShowFiles.o b/dist/build/Darcs/Commands/ShowFiles.o
Binary files a/dist/build/Darcs/Commands/ShowFiles.o and b/dist/build/Darcs/Commands/ShowFiles.o differ
diff --git a/dist/build/Darcs/Commands/ShowIndex.hi b/dist/build/Darcs/Commands/ShowIndex.hi
Binary files a/dist/build/Darcs/Commands/ShowIndex.hi and b/dist/build/Darcs/Commands/ShowIndex.hi differ
diff --git a/dist/build/Darcs/Commands/ShowIndex.o b/dist/build/Darcs/Commands/ShowIndex.o
Binary files a/dist/build/Darcs/Commands/ShowIndex.o and b/dist/build/Darcs/Commands/ShowIndex.o differ
diff --git a/dist/build/Darcs/Commands/ShowRepo.hi b/dist/build/Darcs/Commands/ShowRepo.hi
Binary files a/dist/build/Darcs/Commands/ShowRepo.hi and b/dist/build/Darcs/Commands/ShowRepo.hi differ
diff --git a/dist/build/Darcs/Commands/ShowRepo.o b/dist/build/Darcs/Commands/ShowRepo.o
Binary files a/dist/build/Darcs/Commands/ShowRepo.o and b/dist/build/Darcs/Commands/ShowRepo.o differ
diff --git a/dist/build/Darcs/Commands/ShowTags.hi b/dist/build/Darcs/Commands/ShowTags.hi
Binary files a/dist/build/Darcs/Commands/ShowTags.hi and b/dist/build/Darcs/Commands/ShowTags.hi differ
diff --git a/dist/build/Darcs/Commands/ShowTags.o b/dist/build/Darcs/Commands/ShowTags.o
Binary files a/dist/build/Darcs/Commands/ShowTags.o and b/dist/build/Darcs/Commands/ShowTags.o differ
diff --git a/dist/build/Darcs/Commands/Tag.hi b/dist/build/Darcs/Commands/Tag.hi
Binary files a/dist/build/Darcs/Commands/Tag.hi and b/dist/build/Darcs/Commands/Tag.hi differ
diff --git a/dist/build/Darcs/Commands/Tag.o b/dist/build/Darcs/Commands/Tag.o
Binary files a/dist/build/Darcs/Commands/Tag.o and b/dist/build/Darcs/Commands/Tag.o differ
diff --git a/dist/build/Darcs/Commands/TrackDown.hi b/dist/build/Darcs/Commands/TrackDown.hi
Binary files a/dist/build/Darcs/Commands/TrackDown.hi and b/dist/build/Darcs/Commands/TrackDown.hi differ
diff --git a/dist/build/Darcs/Commands/TrackDown.o b/dist/build/Darcs/Commands/TrackDown.o
Binary files a/dist/build/Darcs/Commands/TrackDown.o and b/dist/build/Darcs/Commands/TrackDown.o differ
diff --git a/dist/build/Darcs/Commands/TransferMode.hi b/dist/build/Darcs/Commands/TransferMode.hi
Binary files a/dist/build/Darcs/Commands/TransferMode.hi and b/dist/build/Darcs/Commands/TransferMode.hi differ
diff --git a/dist/build/Darcs/Commands/TransferMode.o b/dist/build/Darcs/Commands/TransferMode.o
Binary files a/dist/build/Darcs/Commands/TransferMode.o and b/dist/build/Darcs/Commands/TransferMode.o differ
diff --git a/dist/build/Darcs/Commands/Unrecord.hi b/dist/build/Darcs/Commands/Unrecord.hi
Binary files a/dist/build/Darcs/Commands/Unrecord.hi and b/dist/build/Darcs/Commands/Unrecord.hi differ
diff --git a/dist/build/Darcs/Commands/Unrecord.o b/dist/build/Darcs/Commands/Unrecord.o
Binary files a/dist/build/Darcs/Commands/Unrecord.o and b/dist/build/Darcs/Commands/Unrecord.o differ
diff --git a/dist/build/Darcs/Commands/Unrevert.hi b/dist/build/Darcs/Commands/Unrevert.hi
Binary files a/dist/build/Darcs/Commands/Unrevert.hi and b/dist/build/Darcs/Commands/Unrevert.hi differ
diff --git a/dist/build/Darcs/Commands/Unrevert.o b/dist/build/Darcs/Commands/Unrevert.o
Binary files a/dist/build/Darcs/Commands/Unrevert.o and b/dist/build/Darcs/Commands/Unrevert.o differ
diff --git a/dist/build/Darcs/Commands/Util.hi b/dist/build/Darcs/Commands/Util.hi
Binary files a/dist/build/Darcs/Commands/Util.hi and b/dist/build/Darcs/Commands/Util.hi differ
diff --git a/dist/build/Darcs/Commands/Util.o b/dist/build/Darcs/Commands/Util.o
Binary files a/dist/build/Darcs/Commands/Util.o and b/dist/build/Darcs/Commands/Util.o differ
diff --git a/dist/build/Darcs/Commands/WhatsNew.hi b/dist/build/Darcs/Commands/WhatsNew.hi
Binary files a/dist/build/Darcs/Commands/WhatsNew.hi and b/dist/build/Darcs/Commands/WhatsNew.hi differ
diff --git a/dist/build/Darcs/Commands/WhatsNew.o b/dist/build/Darcs/Commands/WhatsNew.o
Binary files a/dist/build/Darcs/Commands/WhatsNew.o and b/dist/build/Darcs/Commands/WhatsNew.o differ
diff --git a/dist/build/Darcs/CommandsAux.hi b/dist/build/Darcs/CommandsAux.hi
Binary files a/dist/build/Darcs/CommandsAux.hi and b/dist/build/Darcs/CommandsAux.hi differ
diff --git a/dist/build/Darcs/CommandsAux.o b/dist/build/Darcs/CommandsAux.o
Binary files a/dist/build/Darcs/CommandsAux.o and b/dist/build/Darcs/CommandsAux.o differ
diff --git a/dist/build/Darcs/Compat.hi b/dist/build/Darcs/Compat.hi
Binary files a/dist/build/Darcs/Compat.hi and b/dist/build/Darcs/Compat.hi differ
diff --git a/dist/build/Darcs/Compat.o b/dist/build/Darcs/Compat.o
Binary files a/dist/build/Darcs/Compat.o and b/dist/build/Darcs/Compat.o differ
diff --git a/dist/build/Darcs/Diff.hi b/dist/build/Darcs/Diff.hi
Binary files a/dist/build/Darcs/Diff.hi and b/dist/build/Darcs/Diff.hi differ
diff --git a/dist/build/Darcs/Diff.o b/dist/build/Darcs/Diff.o
Binary files a/dist/build/Darcs/Diff.o and b/dist/build/Darcs/Diff.o differ
diff --git a/dist/build/Darcs/Email.hi b/dist/build/Darcs/Email.hi
Binary files a/dist/build/Darcs/Email.hi and b/dist/build/Darcs/Email.hi differ
diff --git a/dist/build/Darcs/Email.o b/dist/build/Darcs/Email.o
Binary files a/dist/build/Darcs/Email.o and b/dist/build/Darcs/Email.o differ
diff --git a/dist/build/Darcs/External.hi b/dist/build/Darcs/External.hi
Binary files a/dist/build/Darcs/External.hi and b/dist/build/Darcs/External.hi differ
diff --git a/dist/build/Darcs/External.o b/dist/build/Darcs/External.o
Binary files a/dist/build/Darcs/External.o and b/dist/build/Darcs/External.o differ
diff --git a/dist/build/Darcs/Flags.hi b/dist/build/Darcs/Flags.hi
Binary files a/dist/build/Darcs/Flags.hi and b/dist/build/Darcs/Flags.hi differ
diff --git a/dist/build/Darcs/Flags.o b/dist/build/Darcs/Flags.o
Binary files a/dist/build/Darcs/Flags.o and b/dist/build/Darcs/Flags.o differ
diff --git a/dist/build/Darcs/Global.hi b/dist/build/Darcs/Global.hi
Binary files a/dist/build/Darcs/Global.hi and b/dist/build/Darcs/Global.hi differ
diff --git a/dist/build/Darcs/Global.o b/dist/build/Darcs/Global.o
Binary files a/dist/build/Darcs/Global.o and b/dist/build/Darcs/Global.o differ
diff --git a/dist/build/Darcs/IO.hi b/dist/build/Darcs/IO.hi
Binary files a/dist/build/Darcs/IO.hi and b/dist/build/Darcs/IO.hi differ
diff --git a/dist/build/Darcs/IO.o b/dist/build/Darcs/IO.o
Binary files a/dist/build/Darcs/IO.o and b/dist/build/Darcs/IO.o differ
diff --git a/dist/build/Darcs/Lock.hi b/dist/build/Darcs/Lock.hi
Binary files a/dist/build/Darcs/Lock.hi and b/dist/build/Darcs/Lock.hi differ
diff --git a/dist/build/Darcs/Lock.o b/dist/build/Darcs/Lock.o
Binary files a/dist/build/Darcs/Lock.o and b/dist/build/Darcs/Lock.o differ
diff --git a/dist/build/Darcs/Match.hi b/dist/build/Darcs/Match.hi
Binary files a/dist/build/Darcs/Match.hi and b/dist/build/Darcs/Match.hi differ
diff --git a/dist/build/Darcs/Match.o b/dist/build/Darcs/Match.o
Binary files a/dist/build/Darcs/Match.o and b/dist/build/Darcs/Match.o differ
diff --git a/dist/build/Darcs/MonadProgress.hi b/dist/build/Darcs/MonadProgress.hi
Binary files a/dist/build/Darcs/MonadProgress.hi and b/dist/build/Darcs/MonadProgress.hi differ
diff --git a/dist/build/Darcs/MonadProgress.o b/dist/build/Darcs/MonadProgress.o
Binary files a/dist/build/Darcs/MonadProgress.o and b/dist/build/Darcs/MonadProgress.o differ
diff --git a/dist/build/Darcs/Patch.hi b/dist/build/Darcs/Patch.hi
Binary files a/dist/build/Darcs/Patch.hi and b/dist/build/Darcs/Patch.hi differ
diff --git a/dist/build/Darcs/Patch.o b/dist/build/Darcs/Patch.o
Binary files a/dist/build/Darcs/Patch.o and b/dist/build/Darcs/Patch.o differ
diff --git a/dist/build/Darcs/Patch/Apply.hi b/dist/build/Darcs/Patch/Apply.hi
Binary files a/dist/build/Darcs/Patch/Apply.hi and b/dist/build/Darcs/Patch/Apply.hi differ
diff --git a/dist/build/Darcs/Patch/Apply.o b/dist/build/Darcs/Patch/Apply.o
Binary files a/dist/build/Darcs/Patch/Apply.o and b/dist/build/Darcs/Patch/Apply.o differ
diff --git a/dist/build/Darcs/Patch/ApplyMonad.hi b/dist/build/Darcs/Patch/ApplyMonad.hi
Binary files a/dist/build/Darcs/Patch/ApplyMonad.hi and b/dist/build/Darcs/Patch/ApplyMonad.hi differ
diff --git a/dist/build/Darcs/Patch/ApplyMonad.o b/dist/build/Darcs/Patch/ApplyMonad.o
Binary files a/dist/build/Darcs/Patch/ApplyMonad.o and b/dist/build/Darcs/Patch/ApplyMonad.o differ
diff --git a/dist/build/Darcs/Patch/Bracketed.hi b/dist/build/Darcs/Patch/Bracketed.hi
Binary files a/dist/build/Darcs/Patch/Bracketed.hi and b/dist/build/Darcs/Patch/Bracketed.hi differ
diff --git a/dist/build/Darcs/Patch/Bracketed.o b/dist/build/Darcs/Patch/Bracketed.o
Binary files a/dist/build/Darcs/Patch/Bracketed.o and b/dist/build/Darcs/Patch/Bracketed.o differ
diff --git a/dist/build/Darcs/Patch/Bracketed/Instances.hi b/dist/build/Darcs/Patch/Bracketed/Instances.hi
Binary files a/dist/build/Darcs/Patch/Bracketed/Instances.hi and b/dist/build/Darcs/Patch/Bracketed/Instances.hi differ
diff --git a/dist/build/Darcs/Patch/Bracketed/Instances.o b/dist/build/Darcs/Patch/Bracketed/Instances.o
Binary files a/dist/build/Darcs/Patch/Bracketed/Instances.o and b/dist/build/Darcs/Patch/Bracketed/Instances.o differ
diff --git a/dist/build/Darcs/Patch/Bundle.hi b/dist/build/Darcs/Patch/Bundle.hi
Binary files a/dist/build/Darcs/Patch/Bundle.hi and b/dist/build/Darcs/Patch/Bundle.hi differ
diff --git a/dist/build/Darcs/Patch/Bundle.o b/dist/build/Darcs/Patch/Bundle.o
Binary files a/dist/build/Darcs/Patch/Bundle.o and b/dist/build/Darcs/Patch/Bundle.o differ
diff --git a/dist/build/Darcs/Patch/Choices.hi b/dist/build/Darcs/Patch/Choices.hi
Binary files a/dist/build/Darcs/Patch/Choices.hi and b/dist/build/Darcs/Patch/Choices.hi differ
diff --git a/dist/build/Darcs/Patch/Choices.o b/dist/build/Darcs/Patch/Choices.o
Binary files a/dist/build/Darcs/Patch/Choices.o and b/dist/build/Darcs/Patch/Choices.o differ
diff --git a/dist/build/Darcs/Patch/Commute.hi b/dist/build/Darcs/Patch/Commute.hi
Binary files a/dist/build/Darcs/Patch/Commute.hi and b/dist/build/Darcs/Patch/Commute.hi differ
diff --git a/dist/build/Darcs/Patch/Commute.o b/dist/build/Darcs/Patch/Commute.o
Binary files a/dist/build/Darcs/Patch/Commute.o and b/dist/build/Darcs/Patch/Commute.o differ
diff --git a/dist/build/Darcs/Patch/Conflict.hi b/dist/build/Darcs/Patch/Conflict.hi
Binary files a/dist/build/Darcs/Patch/Conflict.hi and b/dist/build/Darcs/Patch/Conflict.hi differ
diff --git a/dist/build/Darcs/Patch/Conflict.o b/dist/build/Darcs/Patch/Conflict.o
Binary files a/dist/build/Darcs/Patch/Conflict.o and b/dist/build/Darcs/Patch/Conflict.o differ
diff --git a/dist/build/Darcs/Patch/ConflictMarking.hi b/dist/build/Darcs/Patch/ConflictMarking.hi
Binary files a/dist/build/Darcs/Patch/ConflictMarking.hi and b/dist/build/Darcs/Patch/ConflictMarking.hi differ
diff --git a/dist/build/Darcs/Patch/ConflictMarking.o b/dist/build/Darcs/Patch/ConflictMarking.o
Binary files a/dist/build/Darcs/Patch/ConflictMarking.o and b/dist/build/Darcs/Patch/ConflictMarking.o differ
diff --git a/dist/build/Darcs/Patch/Depends.hi b/dist/build/Darcs/Patch/Depends.hi
Binary files a/dist/build/Darcs/Patch/Depends.hi and b/dist/build/Darcs/Patch/Depends.hi differ
diff --git a/dist/build/Darcs/Patch/Depends.o b/dist/build/Darcs/Patch/Depends.o
Binary files a/dist/build/Darcs/Patch/Depends.o and b/dist/build/Darcs/Patch/Depends.o differ
diff --git a/dist/build/Darcs/Patch/Dummy.hi b/dist/build/Darcs/Patch/Dummy.hi
Binary files a/dist/build/Darcs/Patch/Dummy.hi and b/dist/build/Darcs/Patch/Dummy.hi differ
diff --git a/dist/build/Darcs/Patch/Dummy.o b/dist/build/Darcs/Patch/Dummy.o
Binary files a/dist/build/Darcs/Patch/Dummy.o and b/dist/build/Darcs/Patch/Dummy.o differ
diff --git a/dist/build/Darcs/Patch/Effect.hi b/dist/build/Darcs/Patch/Effect.hi
Binary files a/dist/build/Darcs/Patch/Effect.hi and b/dist/build/Darcs/Patch/Effect.hi differ
diff --git a/dist/build/Darcs/Patch/Effect.o b/dist/build/Darcs/Patch/Effect.o
Binary files a/dist/build/Darcs/Patch/Effect.o and b/dist/build/Darcs/Patch/Effect.o differ
diff --git a/dist/build/Darcs/Patch/FileHunk.hi b/dist/build/Darcs/Patch/FileHunk.hi
Binary files a/dist/build/Darcs/Patch/FileHunk.hi and b/dist/build/Darcs/Patch/FileHunk.hi differ
diff --git a/dist/build/Darcs/Patch/FileHunk.o b/dist/build/Darcs/Patch/FileHunk.o
Binary files a/dist/build/Darcs/Patch/FileHunk.o and b/dist/build/Darcs/Patch/FileHunk.o differ
diff --git a/dist/build/Darcs/Patch/FileName.hi b/dist/build/Darcs/Patch/FileName.hi
Binary files a/dist/build/Darcs/Patch/FileName.hi and b/dist/build/Darcs/Patch/FileName.hi differ
diff --git a/dist/build/Darcs/Patch/FileName.o b/dist/build/Darcs/Patch/FileName.o
Binary files a/dist/build/Darcs/Patch/FileName.o and b/dist/build/Darcs/Patch/FileName.o differ
diff --git a/dist/build/Darcs/Patch/Format.hi b/dist/build/Darcs/Patch/Format.hi
Binary files a/dist/build/Darcs/Patch/Format.hi and b/dist/build/Darcs/Patch/Format.hi differ
diff --git a/dist/build/Darcs/Patch/Format.o b/dist/build/Darcs/Patch/Format.o
Binary files a/dist/build/Darcs/Patch/Format.o and b/dist/build/Darcs/Patch/Format.o differ
diff --git a/dist/build/Darcs/Patch/Info.hi b/dist/build/Darcs/Patch/Info.hi
Binary files a/dist/build/Darcs/Patch/Info.hi and b/dist/build/Darcs/Patch/Info.hi differ
diff --git a/dist/build/Darcs/Patch/Info.o b/dist/build/Darcs/Patch/Info.o
Binary files a/dist/build/Darcs/Patch/Info.o and b/dist/build/Darcs/Patch/Info.o differ
diff --git a/dist/build/Darcs/Patch/Inspect.hi b/dist/build/Darcs/Patch/Inspect.hi
Binary files a/dist/build/Darcs/Patch/Inspect.hi and b/dist/build/Darcs/Patch/Inspect.hi differ
diff --git a/dist/build/Darcs/Patch/Inspect.o b/dist/build/Darcs/Patch/Inspect.o
Binary files a/dist/build/Darcs/Patch/Inspect.o and b/dist/build/Darcs/Patch/Inspect.o differ
diff --git a/dist/build/Darcs/Patch/Invert.hi b/dist/build/Darcs/Patch/Invert.hi
Binary files a/dist/build/Darcs/Patch/Invert.hi and b/dist/build/Darcs/Patch/Invert.hi differ
diff --git a/dist/build/Darcs/Patch/Invert.o b/dist/build/Darcs/Patch/Invert.o
Binary files a/dist/build/Darcs/Patch/Invert.o and b/dist/build/Darcs/Patch/Invert.o differ
diff --git a/dist/build/Darcs/Patch/Match.hi b/dist/build/Darcs/Patch/Match.hi
Binary files a/dist/build/Darcs/Patch/Match.hi and b/dist/build/Darcs/Patch/Match.hi differ
diff --git a/dist/build/Darcs/Patch/Match.o b/dist/build/Darcs/Patch/Match.o
Binary files a/dist/build/Darcs/Patch/Match.o and b/dist/build/Darcs/Patch/Match.o differ
diff --git a/dist/build/Darcs/Patch/MatchData.hi b/dist/build/Darcs/Patch/MatchData.hi
Binary files a/dist/build/Darcs/Patch/MatchData.hi and b/dist/build/Darcs/Patch/MatchData.hi differ
diff --git a/dist/build/Darcs/Patch/MatchData.o b/dist/build/Darcs/Patch/MatchData.o
Binary files a/dist/build/Darcs/Patch/MatchData.o and b/dist/build/Darcs/Patch/MatchData.o differ
diff --git a/dist/build/Darcs/Patch/Merge.hi b/dist/build/Darcs/Patch/Merge.hi
Binary files a/dist/build/Darcs/Patch/Merge.hi and b/dist/build/Darcs/Patch/Merge.hi differ
diff --git a/dist/build/Darcs/Patch/Merge.o b/dist/build/Darcs/Patch/Merge.o
Binary files a/dist/build/Darcs/Patch/Merge.o and b/dist/build/Darcs/Patch/Merge.o differ
diff --git a/dist/build/Darcs/Patch/Named.hi b/dist/build/Darcs/Patch/Named.hi
Binary files a/dist/build/Darcs/Patch/Named.hi and b/dist/build/Darcs/Patch/Named.hi differ
diff --git a/dist/build/Darcs/Patch/Named.o b/dist/build/Darcs/Patch/Named.o
Binary files a/dist/build/Darcs/Patch/Named.o and b/dist/build/Darcs/Patch/Named.o differ
diff --git a/dist/build/Darcs/Patch/OldDate.hi b/dist/build/Darcs/Patch/OldDate.hi
Binary files a/dist/build/Darcs/Patch/OldDate.hi and b/dist/build/Darcs/Patch/OldDate.hi differ
diff --git a/dist/build/Darcs/Patch/OldDate.o b/dist/build/Darcs/Patch/OldDate.o
Binary files a/dist/build/Darcs/Patch/OldDate.o and b/dist/build/Darcs/Patch/OldDate.o differ
diff --git a/dist/build/Darcs/Patch/PatchInfoAnd.hi b/dist/build/Darcs/Patch/PatchInfoAnd.hi
Binary files a/dist/build/Darcs/Patch/PatchInfoAnd.hi and b/dist/build/Darcs/Patch/PatchInfoAnd.hi differ
diff --git a/dist/build/Darcs/Patch/PatchInfoAnd.o b/dist/build/Darcs/Patch/PatchInfoAnd.o
Binary files a/dist/build/Darcs/Patch/PatchInfoAnd.o and b/dist/build/Darcs/Patch/PatchInfoAnd.o differ
diff --git a/dist/build/Darcs/Patch/Patchy.hi b/dist/build/Darcs/Patch/Patchy.hi
Binary files a/dist/build/Darcs/Patch/Patchy.hi and b/dist/build/Darcs/Patch/Patchy.hi differ
diff --git a/dist/build/Darcs/Patch/Patchy.o b/dist/build/Darcs/Patch/Patchy.o
Binary files a/dist/build/Darcs/Patch/Patchy.o and b/dist/build/Darcs/Patch/Patchy.o differ
diff --git a/dist/build/Darcs/Patch/Patchy/Instances.hi b/dist/build/Darcs/Patch/Patchy/Instances.hi
Binary files a/dist/build/Darcs/Patch/Patchy/Instances.hi and b/dist/build/Darcs/Patch/Patchy/Instances.hi differ
diff --git a/dist/build/Darcs/Patch/Patchy/Instances.o b/dist/build/Darcs/Patch/Patchy/Instances.o
Binary files a/dist/build/Darcs/Patch/Patchy/Instances.o and b/dist/build/Darcs/Patch/Patchy/Instances.o differ
diff --git a/dist/build/Darcs/Patch/Permutations.hi b/dist/build/Darcs/Patch/Permutations.hi
Binary files a/dist/build/Darcs/Patch/Permutations.hi and b/dist/build/Darcs/Patch/Permutations.hi differ
diff --git a/dist/build/Darcs/Patch/Permutations.o b/dist/build/Darcs/Patch/Permutations.o
Binary files a/dist/build/Darcs/Patch/Permutations.o and b/dist/build/Darcs/Patch/Permutations.o differ
diff --git a/dist/build/Darcs/Patch/Prim.hi b/dist/build/Darcs/Patch/Prim.hi
Binary files a/dist/build/Darcs/Patch/Prim.hi and b/dist/build/Darcs/Patch/Prim.hi differ
diff --git a/dist/build/Darcs/Patch/Prim.o b/dist/build/Darcs/Patch/Prim.o
Binary files a/dist/build/Darcs/Patch/Prim.o and b/dist/build/Darcs/Patch/Prim.o differ
diff --git a/dist/build/Darcs/Patch/Prim/Class.hi b/dist/build/Darcs/Patch/Prim/Class.hi
Binary files a/dist/build/Darcs/Patch/Prim/Class.hi and b/dist/build/Darcs/Patch/Prim/Class.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/Class.o b/dist/build/Darcs/Patch/Prim/Class.o
Binary files a/dist/build/Darcs/Patch/Prim/Class.o and b/dist/build/Darcs/Patch/Prim/Class.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V1.hi b/dist/build/Darcs/Patch/Prim/V1.hi
Binary files a/dist/build/Darcs/Patch/Prim/V1.hi and b/dist/build/Darcs/Patch/Prim/V1.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V1.o b/dist/build/Darcs/Patch/Prim/V1.o
Binary files a/dist/build/Darcs/Patch/Prim/V1.o and b/dist/build/Darcs/Patch/Prim/V1.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Apply.hi b/dist/build/Darcs/Patch/Prim/V1/Apply.hi
Binary files a/dist/build/Darcs/Patch/Prim/V1/Apply.hi and b/dist/build/Darcs/Patch/Prim/V1/Apply.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Apply.o b/dist/build/Darcs/Patch/Prim/V1/Apply.o
Binary files a/dist/build/Darcs/Patch/Prim/V1/Apply.o and b/dist/build/Darcs/Patch/Prim/V1/Apply.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Coalesce.hi b/dist/build/Darcs/Patch/Prim/V1/Coalesce.hi
Binary files a/dist/build/Darcs/Patch/Prim/V1/Coalesce.hi and b/dist/build/Darcs/Patch/Prim/V1/Coalesce.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Coalesce.o b/dist/build/Darcs/Patch/Prim/V1/Coalesce.o
Binary files a/dist/build/Darcs/Patch/Prim/V1/Coalesce.o and b/dist/build/Darcs/Patch/Prim/V1/Coalesce.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Commute.hi b/dist/build/Darcs/Patch/Prim/V1/Commute.hi
Binary files a/dist/build/Darcs/Patch/Prim/V1/Commute.hi and b/dist/build/Darcs/Patch/Prim/V1/Commute.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Commute.o b/dist/build/Darcs/Patch/Prim/V1/Commute.o
Binary files a/dist/build/Darcs/Patch/Prim/V1/Commute.o and b/dist/build/Darcs/Patch/Prim/V1/Commute.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Core.hi b/dist/build/Darcs/Patch/Prim/V1/Core.hi
Binary files a/dist/build/Darcs/Patch/Prim/V1/Core.hi and b/dist/build/Darcs/Patch/Prim/V1/Core.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Core.o b/dist/build/Darcs/Patch/Prim/V1/Core.o
Binary files a/dist/build/Darcs/Patch/Prim/V1/Core.o and b/dist/build/Darcs/Patch/Prim/V1/Core.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Details.hi b/dist/build/Darcs/Patch/Prim/V1/Details.hi
Binary files a/dist/build/Darcs/Patch/Prim/V1/Details.hi and b/dist/build/Darcs/Patch/Prim/V1/Details.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Details.o b/dist/build/Darcs/Patch/Prim/V1/Details.o
Binary files a/dist/build/Darcs/Patch/Prim/V1/Details.o and b/dist/build/Darcs/Patch/Prim/V1/Details.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Read.hi b/dist/build/Darcs/Patch/Prim/V1/Read.hi
Binary files a/dist/build/Darcs/Patch/Prim/V1/Read.hi and b/dist/build/Darcs/Patch/Prim/V1/Read.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Read.o b/dist/build/Darcs/Patch/Prim/V1/Read.o
Binary files a/dist/build/Darcs/Patch/Prim/V1/Read.o and b/dist/build/Darcs/Patch/Prim/V1/Read.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Show.hi b/dist/build/Darcs/Patch/Prim/V1/Show.hi
Binary files a/dist/build/Darcs/Patch/Prim/V1/Show.hi and b/dist/build/Darcs/Patch/Prim/V1/Show.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V1/Show.o b/dist/build/Darcs/Patch/Prim/V1/Show.o
Binary files a/dist/build/Darcs/Patch/Prim/V1/Show.o and b/dist/build/Darcs/Patch/Prim/V1/Show.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V3.hi b/dist/build/Darcs/Patch/Prim/V3.hi
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V3.o b/dist/build/Darcs/Patch/Prim/V3.o
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Apply.hi b/dist/build/Darcs/Patch/Prim/V3/Apply.hi
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Apply.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Apply.o b/dist/build/Darcs/Patch/Prim/V3/Apply.o
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Apply.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Coalesce.hi b/dist/build/Darcs/Patch/Prim/V3/Coalesce.hi
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Coalesce.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Coalesce.o b/dist/build/Darcs/Patch/Prim/V3/Coalesce.o
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Coalesce.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Commute.hi b/dist/build/Darcs/Patch/Prim/V3/Commute.hi
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Commute.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Commute.o b/dist/build/Darcs/Patch/Prim/V3/Commute.o
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Commute.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Core.hi b/dist/build/Darcs/Patch/Prim/V3/Core.hi
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Core.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Core.o b/dist/build/Darcs/Patch/Prim/V3/Core.o
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Core.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Details.hi b/dist/build/Darcs/Patch/Prim/V3/Details.hi
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Details.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Details.o b/dist/build/Darcs/Patch/Prim/V3/Details.o
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Details.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/ObjectMap.hi b/dist/build/Darcs/Patch/Prim/V3/ObjectMap.hi
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/ObjectMap.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/ObjectMap.o b/dist/build/Darcs/Patch/Prim/V3/ObjectMap.o
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/ObjectMap.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Read.hi b/dist/build/Darcs/Patch/Prim/V3/Read.hi
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Read.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Read.o b/dist/build/Darcs/Patch/Prim/V3/Read.o
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Read.o differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Show.hi b/dist/build/Darcs/Patch/Prim/V3/Show.hi
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Show.hi differ
diff --git a/dist/build/Darcs/Patch/Prim/V3/Show.o b/dist/build/Darcs/Patch/Prim/V3/Show.o
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Patch/Prim/V3/Show.o differ
diff --git a/dist/build/Darcs/Patch/Read.hi b/dist/build/Darcs/Patch/Read.hi
Binary files a/dist/build/Darcs/Patch/Read.hi and b/dist/build/Darcs/Patch/Read.hi differ
diff --git a/dist/build/Darcs/Patch/Read.o b/dist/build/Darcs/Patch/Read.o
Binary files a/dist/build/Darcs/Patch/Read.o and b/dist/build/Darcs/Patch/Read.o differ
diff --git a/dist/build/Darcs/Patch/ReadMonads.hi b/dist/build/Darcs/Patch/ReadMonads.hi
Binary files a/dist/build/Darcs/Patch/ReadMonads.hi and b/dist/build/Darcs/Patch/ReadMonads.hi differ
diff --git a/dist/build/Darcs/Patch/ReadMonads.o b/dist/build/Darcs/Patch/ReadMonads.o
Binary files a/dist/build/Darcs/Patch/ReadMonads.o and b/dist/build/Darcs/Patch/ReadMonads.o differ
diff --git a/dist/build/Darcs/Patch/RegChars.hi b/dist/build/Darcs/Patch/RegChars.hi
Binary files a/dist/build/Darcs/Patch/RegChars.hi and b/dist/build/Darcs/Patch/RegChars.hi differ
diff --git a/dist/build/Darcs/Patch/RegChars.o b/dist/build/Darcs/Patch/RegChars.o
Binary files a/dist/build/Darcs/Patch/RegChars.o and b/dist/build/Darcs/Patch/RegChars.o differ
diff --git a/dist/build/Darcs/Patch/Repair.hi b/dist/build/Darcs/Patch/Repair.hi
Binary files a/dist/build/Darcs/Patch/Repair.hi and b/dist/build/Darcs/Patch/Repair.hi differ
diff --git a/dist/build/Darcs/Patch/Repair.o b/dist/build/Darcs/Patch/Repair.o
Binary files a/dist/build/Darcs/Patch/Repair.o and b/dist/build/Darcs/Patch/Repair.o differ
diff --git a/dist/build/Darcs/Patch/RepoPatch.hi b/dist/build/Darcs/Patch/RepoPatch.hi
Binary files a/dist/build/Darcs/Patch/RepoPatch.hi and b/dist/build/Darcs/Patch/RepoPatch.hi differ
diff --git a/dist/build/Darcs/Patch/RepoPatch.o b/dist/build/Darcs/Patch/RepoPatch.o
Binary files a/dist/build/Darcs/Patch/RepoPatch.o and b/dist/build/Darcs/Patch/RepoPatch.o differ
diff --git a/dist/build/Darcs/Patch/Set.hi b/dist/build/Darcs/Patch/Set.hi
Binary files a/dist/build/Darcs/Patch/Set.hi and b/dist/build/Darcs/Patch/Set.hi differ
diff --git a/dist/build/Darcs/Patch/Set.o b/dist/build/Darcs/Patch/Set.o
Binary files a/dist/build/Darcs/Patch/Set.o and b/dist/build/Darcs/Patch/Set.o differ
diff --git a/dist/build/Darcs/Patch/Show.hi b/dist/build/Darcs/Patch/Show.hi
Binary files a/dist/build/Darcs/Patch/Show.hi and b/dist/build/Darcs/Patch/Show.hi differ
diff --git a/dist/build/Darcs/Patch/Show.o b/dist/build/Darcs/Patch/Show.o
Binary files a/dist/build/Darcs/Patch/Show.o and b/dist/build/Darcs/Patch/Show.o differ
diff --git a/dist/build/Darcs/Patch/Split.hi b/dist/build/Darcs/Patch/Split.hi
Binary files a/dist/build/Darcs/Patch/Split.hi and b/dist/build/Darcs/Patch/Split.hi differ
diff --git a/dist/build/Darcs/Patch/Split.o b/dist/build/Darcs/Patch/Split.o
Binary files a/dist/build/Darcs/Patch/Split.o and b/dist/build/Darcs/Patch/Split.o differ
diff --git a/dist/build/Darcs/Patch/Summary.hi b/dist/build/Darcs/Patch/Summary.hi
Binary files a/dist/build/Darcs/Patch/Summary.hi and b/dist/build/Darcs/Patch/Summary.hi differ
diff --git a/dist/build/Darcs/Patch/Summary.o b/dist/build/Darcs/Patch/Summary.o
Binary files a/dist/build/Darcs/Patch/Summary.o and b/dist/build/Darcs/Patch/Summary.o differ
diff --git a/dist/build/Darcs/Patch/SummaryData.hi b/dist/build/Darcs/Patch/SummaryData.hi
Binary files a/dist/build/Darcs/Patch/SummaryData.hi and b/dist/build/Darcs/Patch/SummaryData.hi differ
diff --git a/dist/build/Darcs/Patch/SummaryData.o b/dist/build/Darcs/Patch/SummaryData.o
Binary files a/dist/build/Darcs/Patch/SummaryData.o and b/dist/build/Darcs/Patch/SummaryData.o differ
diff --git a/dist/build/Darcs/Patch/TokenReplace.hi b/dist/build/Darcs/Patch/TokenReplace.hi
Binary files a/dist/build/Darcs/Patch/TokenReplace.hi and b/dist/build/Darcs/Patch/TokenReplace.hi differ
diff --git a/dist/build/Darcs/Patch/TokenReplace.o b/dist/build/Darcs/Patch/TokenReplace.o
Binary files a/dist/build/Darcs/Patch/TokenReplace.o and b/dist/build/Darcs/Patch/TokenReplace.o differ
diff --git a/dist/build/Darcs/Patch/TouchesFiles.hi b/dist/build/Darcs/Patch/TouchesFiles.hi
Binary files a/dist/build/Darcs/Patch/TouchesFiles.hi and b/dist/build/Darcs/Patch/TouchesFiles.hi differ
diff --git a/dist/build/Darcs/Patch/TouchesFiles.o b/dist/build/Darcs/Patch/TouchesFiles.o
Binary files a/dist/build/Darcs/Patch/TouchesFiles.o and b/dist/build/Darcs/Patch/TouchesFiles.o differ
diff --git a/dist/build/Darcs/Patch/V1.hi b/dist/build/Darcs/Patch/V1.hi
Binary files a/dist/build/Darcs/Patch/V1.hi and b/dist/build/Darcs/Patch/V1.hi differ
diff --git a/dist/build/Darcs/Patch/V1.o b/dist/build/Darcs/Patch/V1.o
Binary files a/dist/build/Darcs/Patch/V1.o and b/dist/build/Darcs/Patch/V1.o differ
diff --git a/dist/build/Darcs/Patch/V1/Apply.hi b/dist/build/Darcs/Patch/V1/Apply.hi
Binary files a/dist/build/Darcs/Patch/V1/Apply.hi and b/dist/build/Darcs/Patch/V1/Apply.hi differ
diff --git a/dist/build/Darcs/Patch/V1/Apply.o b/dist/build/Darcs/Patch/V1/Apply.o
Binary files a/dist/build/Darcs/Patch/V1/Apply.o and b/dist/build/Darcs/Patch/V1/Apply.o differ
diff --git a/dist/build/Darcs/Patch/V1/Commute.hi b/dist/build/Darcs/Patch/V1/Commute.hi
Binary files a/dist/build/Darcs/Patch/V1/Commute.hi and b/dist/build/Darcs/Patch/V1/Commute.hi differ
diff --git a/dist/build/Darcs/Patch/V1/Commute.o b/dist/build/Darcs/Patch/V1/Commute.o
Binary files a/dist/build/Darcs/Patch/V1/Commute.o and b/dist/build/Darcs/Patch/V1/Commute.o differ
diff --git a/dist/build/Darcs/Patch/V1/Core.hi b/dist/build/Darcs/Patch/V1/Core.hi
Binary files a/dist/build/Darcs/Patch/V1/Core.hi and b/dist/build/Darcs/Patch/V1/Core.hi differ
diff --git a/dist/build/Darcs/Patch/V1/Core.o b/dist/build/Darcs/Patch/V1/Core.o
Binary files a/dist/build/Darcs/Patch/V1/Core.o and b/dist/build/Darcs/Patch/V1/Core.o differ
diff --git a/dist/build/Darcs/Patch/V1/Read.hi b/dist/build/Darcs/Patch/V1/Read.hi
Binary files a/dist/build/Darcs/Patch/V1/Read.hi and b/dist/build/Darcs/Patch/V1/Read.hi differ
diff --git a/dist/build/Darcs/Patch/V1/Read.o b/dist/build/Darcs/Patch/V1/Read.o
Binary files a/dist/build/Darcs/Patch/V1/Read.o and b/dist/build/Darcs/Patch/V1/Read.o differ
diff --git a/dist/build/Darcs/Patch/V1/Show.hi b/dist/build/Darcs/Patch/V1/Show.hi
Binary files a/dist/build/Darcs/Patch/V1/Show.hi and b/dist/build/Darcs/Patch/V1/Show.hi differ
diff --git a/dist/build/Darcs/Patch/V1/Show.o b/dist/build/Darcs/Patch/V1/Show.o
Binary files a/dist/build/Darcs/Patch/V1/Show.o and b/dist/build/Darcs/Patch/V1/Show.o differ
diff --git a/dist/build/Darcs/Patch/V1/Viewing.hi b/dist/build/Darcs/Patch/V1/Viewing.hi
Binary files a/dist/build/Darcs/Patch/V1/Viewing.hi and b/dist/build/Darcs/Patch/V1/Viewing.hi differ
diff --git a/dist/build/Darcs/Patch/V1/Viewing.o b/dist/build/Darcs/Patch/V1/Viewing.o
Binary files a/dist/build/Darcs/Patch/V1/Viewing.o and b/dist/build/Darcs/Patch/V1/Viewing.o differ
diff --git a/dist/build/Darcs/Patch/V2.hi b/dist/build/Darcs/Patch/V2.hi
Binary files a/dist/build/Darcs/Patch/V2.hi and b/dist/build/Darcs/Patch/V2.hi differ
diff --git a/dist/build/Darcs/Patch/V2.o b/dist/build/Darcs/Patch/V2.o
Binary files a/dist/build/Darcs/Patch/V2.o and b/dist/build/Darcs/Patch/V2.o differ
diff --git a/dist/build/Darcs/Patch/V2/Non.hi b/dist/build/Darcs/Patch/V2/Non.hi
Binary files a/dist/build/Darcs/Patch/V2/Non.hi and b/dist/build/Darcs/Patch/V2/Non.hi differ
diff --git a/dist/build/Darcs/Patch/V2/Non.o b/dist/build/Darcs/Patch/V2/Non.o
Binary files a/dist/build/Darcs/Patch/V2/Non.o and b/dist/build/Darcs/Patch/V2/Non.o differ
diff --git a/dist/build/Darcs/Patch/V2/Real.hi b/dist/build/Darcs/Patch/V2/Real.hi
Binary files a/dist/build/Darcs/Patch/V2/Real.hi and b/dist/build/Darcs/Patch/V2/Real.hi differ
diff --git a/dist/build/Darcs/Patch/V2/Real.o b/dist/build/Darcs/Patch/V2/Real.o
Binary files a/dist/build/Darcs/Patch/V2/Real.o and b/dist/build/Darcs/Patch/V2/Real.o differ
diff --git a/dist/build/Darcs/Patch/Viewing.hi b/dist/build/Darcs/Patch/Viewing.hi
Binary files a/dist/build/Darcs/Patch/Viewing.hi and b/dist/build/Darcs/Patch/Viewing.hi differ
diff --git a/dist/build/Darcs/Patch/Viewing.o b/dist/build/Darcs/Patch/Viewing.o
Binary files a/dist/build/Darcs/Patch/Viewing.o and b/dist/build/Darcs/Patch/Viewing.o differ
diff --git a/dist/build/Darcs/PrintPatch.hi b/dist/build/Darcs/PrintPatch.hi
Binary files a/dist/build/Darcs/PrintPatch.hi and b/dist/build/Darcs/PrintPatch.hi differ
diff --git a/dist/build/Darcs/PrintPatch.o b/dist/build/Darcs/PrintPatch.o
Binary files a/dist/build/Darcs/PrintPatch.o and b/dist/build/Darcs/PrintPatch.o differ
diff --git a/dist/build/Darcs/ProgressPatches.hi b/dist/build/Darcs/ProgressPatches.hi
Binary files a/dist/build/Darcs/ProgressPatches.hi and b/dist/build/Darcs/ProgressPatches.hi differ
diff --git a/dist/build/Darcs/ProgressPatches.o b/dist/build/Darcs/ProgressPatches.o
Binary files a/dist/build/Darcs/ProgressPatches.o and b/dist/build/Darcs/ProgressPatches.o differ
diff --git a/dist/build/Darcs/RemoteApply.hi b/dist/build/Darcs/RemoteApply.hi
Binary files a/dist/build/Darcs/RemoteApply.hi and b/dist/build/Darcs/RemoteApply.hi differ
diff --git a/dist/build/Darcs/RemoteApply.o b/dist/build/Darcs/RemoteApply.o
Binary files a/dist/build/Darcs/RemoteApply.o and b/dist/build/Darcs/RemoteApply.o differ
diff --git a/dist/build/Darcs/RepoPath.hi b/dist/build/Darcs/RepoPath.hi
Binary files a/dist/build/Darcs/RepoPath.hi and b/dist/build/Darcs/RepoPath.hi differ
diff --git a/dist/build/Darcs/RepoPath.o b/dist/build/Darcs/RepoPath.o
Binary files a/dist/build/Darcs/RepoPath.o and b/dist/build/Darcs/RepoPath.o differ
diff --git a/dist/build/Darcs/Repository.hi b/dist/build/Darcs/Repository.hi
Binary files a/dist/build/Darcs/Repository.hi and b/dist/build/Darcs/Repository.hi differ
diff --git a/dist/build/Darcs/Repository.o b/dist/build/Darcs/Repository.o
Binary files a/dist/build/Darcs/Repository.o and b/dist/build/Darcs/Repository.o differ
diff --git a/dist/build/Darcs/Repository/ApplyPatches.hi b/dist/build/Darcs/Repository/ApplyPatches.hi
Binary files a/dist/build/Darcs/Repository/ApplyPatches.hi and b/dist/build/Darcs/Repository/ApplyPatches.hi differ
diff --git a/dist/build/Darcs/Repository/ApplyPatches.o b/dist/build/Darcs/Repository/ApplyPatches.o
Binary files a/dist/build/Darcs/Repository/ApplyPatches.o and b/dist/build/Darcs/Repository/ApplyPatches.o differ
diff --git a/dist/build/Darcs/Repository/Cache.hi b/dist/build/Darcs/Repository/Cache.hi
Binary files a/dist/build/Darcs/Repository/Cache.hi and b/dist/build/Darcs/Repository/Cache.hi differ
diff --git a/dist/build/Darcs/Repository/Cache.o b/dist/build/Darcs/Repository/Cache.o
Binary files a/dist/build/Darcs/Repository/Cache.o and b/dist/build/Darcs/Repository/Cache.o differ
diff --git a/dist/build/Darcs/Repository/Format.hi b/dist/build/Darcs/Repository/Format.hi
Binary files a/dist/build/Darcs/Repository/Format.hi and b/dist/build/Darcs/Repository/Format.hi differ
diff --git a/dist/build/Darcs/Repository/Format.o b/dist/build/Darcs/Repository/Format.o
Binary files a/dist/build/Darcs/Repository/Format.o and b/dist/build/Darcs/Repository/Format.o differ
diff --git a/dist/build/Darcs/Repository/HashedIO.hi b/dist/build/Darcs/Repository/HashedIO.hi
Binary files a/dist/build/Darcs/Repository/HashedIO.hi and b/dist/build/Darcs/Repository/HashedIO.hi differ
diff --git a/dist/build/Darcs/Repository/HashedIO.o b/dist/build/Darcs/Repository/HashedIO.o
Binary files a/dist/build/Darcs/Repository/HashedIO.o and b/dist/build/Darcs/Repository/HashedIO.o differ
diff --git a/dist/build/Darcs/Repository/HashedRepo.hi b/dist/build/Darcs/Repository/HashedRepo.hi
Binary files a/dist/build/Darcs/Repository/HashedRepo.hi and b/dist/build/Darcs/Repository/HashedRepo.hi differ
diff --git a/dist/build/Darcs/Repository/HashedRepo.o b/dist/build/Darcs/Repository/HashedRepo.o
Binary files a/dist/build/Darcs/Repository/HashedRepo.o and b/dist/build/Darcs/Repository/HashedRepo.o differ
diff --git a/dist/build/Darcs/Repository/Internal.hi b/dist/build/Darcs/Repository/Internal.hi
Binary files a/dist/build/Darcs/Repository/Internal.hi and b/dist/build/Darcs/Repository/Internal.hi differ
diff --git a/dist/build/Darcs/Repository/Internal.o b/dist/build/Darcs/Repository/Internal.o
Binary files a/dist/build/Darcs/Repository/Internal.o and b/dist/build/Darcs/Repository/Internal.o differ
diff --git a/dist/build/Darcs/Repository/InternalTypes.hi b/dist/build/Darcs/Repository/InternalTypes.hi
Binary files a/dist/build/Darcs/Repository/InternalTypes.hi and b/dist/build/Darcs/Repository/InternalTypes.hi differ
diff --git a/dist/build/Darcs/Repository/InternalTypes.o b/dist/build/Darcs/Repository/InternalTypes.o
Binary files a/dist/build/Darcs/Repository/InternalTypes.o and b/dist/build/Darcs/Repository/InternalTypes.o differ
diff --git a/dist/build/Darcs/Repository/LowLevel.hi b/dist/build/Darcs/Repository/LowLevel.hi
Binary files a/dist/build/Darcs/Repository/LowLevel.hi and b/dist/build/Darcs/Repository/LowLevel.hi differ
diff --git a/dist/build/Darcs/Repository/LowLevel.o b/dist/build/Darcs/Repository/LowLevel.o
Binary files a/dist/build/Darcs/Repository/LowLevel.o and b/dist/build/Darcs/Repository/LowLevel.o differ
diff --git a/dist/build/Darcs/Repository/Merge.hi b/dist/build/Darcs/Repository/Merge.hi
Binary files a/dist/build/Darcs/Repository/Merge.hi and b/dist/build/Darcs/Repository/Merge.hi differ
diff --git a/dist/build/Darcs/Repository/Merge.o b/dist/build/Darcs/Repository/Merge.o
Binary files a/dist/build/Darcs/Repository/Merge.o and b/dist/build/Darcs/Repository/Merge.o differ
diff --git a/dist/build/Darcs/Repository/Motd.hi b/dist/build/Darcs/Repository/Motd.hi
Binary files a/dist/build/Darcs/Repository/Motd.hi and b/dist/build/Darcs/Repository/Motd.hi differ
diff --git a/dist/build/Darcs/Repository/Motd.o b/dist/build/Darcs/Repository/Motd.o
Binary files a/dist/build/Darcs/Repository/Motd.o and b/dist/build/Darcs/Repository/Motd.o differ
diff --git a/dist/build/Darcs/Repository/Old.hi b/dist/build/Darcs/Repository/Old.hi
Binary files a/dist/build/Darcs/Repository/Old.hi and b/dist/build/Darcs/Repository/Old.hi differ
diff --git a/dist/build/Darcs/Repository/Old.o b/dist/build/Darcs/Repository/Old.o
Binary files a/dist/build/Darcs/Repository/Old.o and b/dist/build/Darcs/Repository/Old.o differ
diff --git a/dist/build/Darcs/Repository/Prefs.hi b/dist/build/Darcs/Repository/Prefs.hi
Binary files a/dist/build/Darcs/Repository/Prefs.hi and b/dist/build/Darcs/Repository/Prefs.hi differ
diff --git a/dist/build/Darcs/Repository/Prefs.o b/dist/build/Darcs/Repository/Prefs.o
Binary files a/dist/build/Darcs/Repository/Prefs.o and b/dist/build/Darcs/Repository/Prefs.o differ
diff --git a/dist/build/Darcs/Repository/Repair.hi b/dist/build/Darcs/Repository/Repair.hi
Binary files a/dist/build/Darcs/Repository/Repair.hi and b/dist/build/Darcs/Repository/Repair.hi differ
diff --git a/dist/build/Darcs/Repository/Repair.o b/dist/build/Darcs/Repository/Repair.o
Binary files a/dist/build/Darcs/Repository/Repair.o and b/dist/build/Darcs/Repository/Repair.o differ
diff --git a/dist/build/Darcs/Repository/State.hi b/dist/build/Darcs/Repository/State.hi
Binary files a/dist/build/Darcs/Repository/State.hi and b/dist/build/Darcs/Repository/State.hi differ
diff --git a/dist/build/Darcs/Repository/State.o b/dist/build/Darcs/Repository/State.o
Binary files a/dist/build/Darcs/Repository/State.o and b/dist/build/Darcs/Repository/State.o differ
diff --git a/dist/build/Darcs/Resolution.hi b/dist/build/Darcs/Resolution.hi
Binary files a/dist/build/Darcs/Resolution.hi and b/dist/build/Darcs/Resolution.hi differ
diff --git a/dist/build/Darcs/Resolution.o b/dist/build/Darcs/Resolution.o
Binary files a/dist/build/Darcs/Resolution.o and b/dist/build/Darcs/Resolution.o differ
diff --git a/dist/build/Darcs/RunCommand.hi b/dist/build/Darcs/RunCommand.hi
Binary files a/dist/build/Darcs/RunCommand.hi and b/dist/build/Darcs/RunCommand.hi differ
diff --git a/dist/build/Darcs/RunCommand.o b/dist/build/Darcs/RunCommand.o
Binary files a/dist/build/Darcs/RunCommand.o and b/dist/build/Darcs/RunCommand.o differ
diff --git a/dist/build/Darcs/SelectChanges.hi b/dist/build/Darcs/SelectChanges.hi
Binary files a/dist/build/Darcs/SelectChanges.hi and b/dist/build/Darcs/SelectChanges.hi differ
diff --git a/dist/build/Darcs/SelectChanges.o b/dist/build/Darcs/SelectChanges.o
Binary files a/dist/build/Darcs/SelectChanges.o and b/dist/build/Darcs/SelectChanges.o differ
diff --git a/dist/build/Darcs/SignalHandler.hi b/dist/build/Darcs/SignalHandler.hi
Binary files a/dist/build/Darcs/SignalHandler.hi and b/dist/build/Darcs/SignalHandler.hi differ
diff --git a/dist/build/Darcs/SignalHandler.o b/dist/build/Darcs/SignalHandler.o
Binary files a/dist/build/Darcs/SignalHandler.o and b/dist/build/Darcs/SignalHandler.o differ
diff --git a/dist/build/Darcs/Ssh.hi b/dist/build/Darcs/Ssh.hi
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Ssh.hi differ
diff --git a/dist/build/Darcs/Ssh.o b/dist/build/Darcs/Ssh.o
new file mode 100644
Binary files /dev/null and b/dist/build/Darcs/Ssh.o differ
diff --git a/dist/build/Darcs/Test.hi b/dist/build/Darcs/Test.hi
Binary files a/dist/build/Darcs/Test.hi and b/dist/build/Darcs/Test.hi differ
diff --git a/dist/build/Darcs/Test.o b/dist/build/Darcs/Test.o
Binary files a/dist/build/Darcs/Test.o and b/dist/build/Darcs/Test.o differ
diff --git a/dist/build/Darcs/TheCommands.hi b/dist/build/Darcs/TheCommands.hi
Binary files a/dist/build/Darcs/TheCommands.hi and b/dist/build/Darcs/TheCommands.hi differ
diff --git a/dist/build/Darcs/TheCommands.o b/dist/build/Darcs/TheCommands.o
Binary files a/dist/build/Darcs/TheCommands.o and b/dist/build/Darcs/TheCommands.o differ
diff --git a/dist/build/Darcs/URL.hi b/dist/build/Darcs/URL.hi
Binary files a/dist/build/Darcs/URL.hi and b/dist/build/Darcs/URL.hi differ
diff --git a/dist/build/Darcs/URL.o b/dist/build/Darcs/URL.o
Binary files a/dist/build/Darcs/URL.o and b/dist/build/Darcs/URL.o differ
diff --git a/dist/build/Darcs/Utils.hi b/dist/build/Darcs/Utils.hi
Binary files a/dist/build/Darcs/Utils.hi and b/dist/build/Darcs/Utils.hi differ
diff --git a/dist/build/Darcs/Utils.o b/dist/build/Darcs/Utils.o
Binary files a/dist/build/Darcs/Utils.o and b/dist/build/Darcs/Utils.o differ
diff --git a/dist/build/Darcs/Witnesses/Eq.hi b/dist/build/Darcs/Witnesses/Eq.hi
Binary files a/dist/build/Darcs/Witnesses/Eq.hi and b/dist/build/Darcs/Witnesses/Eq.hi differ
diff --git a/dist/build/Darcs/Witnesses/Eq.o b/dist/build/Darcs/Witnesses/Eq.o
Binary files a/dist/build/Darcs/Witnesses/Eq.o and b/dist/build/Darcs/Witnesses/Eq.o differ
diff --git a/dist/build/Darcs/Witnesses/Ordered.hi b/dist/build/Darcs/Witnesses/Ordered.hi
Binary files a/dist/build/Darcs/Witnesses/Ordered.hi and b/dist/build/Darcs/Witnesses/Ordered.hi differ
diff --git a/dist/build/Darcs/Witnesses/Ordered.o b/dist/build/Darcs/Witnesses/Ordered.o
Binary files a/dist/build/Darcs/Witnesses/Ordered.o and b/dist/build/Darcs/Witnesses/Ordered.o differ
diff --git a/dist/build/Darcs/Witnesses/Sealed.hi b/dist/build/Darcs/Witnesses/Sealed.hi
Binary files a/dist/build/Darcs/Witnesses/Sealed.hi and b/dist/build/Darcs/Witnesses/Sealed.hi differ
diff --git a/dist/build/Darcs/Witnesses/Sealed.o b/dist/build/Darcs/Witnesses/Sealed.o
Binary files a/dist/build/Darcs/Witnesses/Sealed.o and b/dist/build/Darcs/Witnesses/Sealed.o differ
diff --git a/dist/build/Darcs/Witnesses/Show.hi b/dist/build/Darcs/Witnesses/Show.hi
Binary files a/dist/build/Darcs/Witnesses/Show.hi and b/dist/build/Darcs/Witnesses/Show.hi differ
diff --git a/dist/build/Darcs/Witnesses/Show.o b/dist/build/Darcs/Witnesses/Show.o
Binary files a/dist/build/Darcs/Witnesses/Show.o and b/dist/build/Darcs/Witnesses/Show.o differ
diff --git a/dist/build/Darcs/Witnesses/Unsafe.hi b/dist/build/Darcs/Witnesses/Unsafe.hi
Binary files a/dist/build/Darcs/Witnesses/Unsafe.hi and b/dist/build/Darcs/Witnesses/Unsafe.hi differ
diff --git a/dist/build/Darcs/Witnesses/Unsafe.o b/dist/build/Darcs/Witnesses/Unsafe.o
Binary files a/dist/build/Darcs/Witnesses/Unsafe.o and b/dist/build/Darcs/Witnesses/Unsafe.o differ
diff --git a/dist/build/Darcs/Witnesses/WZipper.hi b/dist/build/Darcs/Witnesses/WZipper.hi
Binary files a/dist/build/Darcs/Witnesses/WZipper.hi and b/dist/build/Darcs/Witnesses/WZipper.hi differ
diff --git a/dist/build/Darcs/Witnesses/WZipper.o b/dist/build/Darcs/Witnesses/WZipper.o
Binary files a/dist/build/Darcs/Witnesses/WZipper.o and b/dist/build/Darcs/Witnesses/WZipper.o differ
diff --git a/dist/build/DateMatcher.hi b/dist/build/DateMatcher.hi
Binary files a/dist/build/DateMatcher.hi and b/dist/build/DateMatcher.hi differ
diff --git a/dist/build/DateMatcher.o b/dist/build/DateMatcher.o
Binary files a/dist/build/DateMatcher.o and b/dist/build/DateMatcher.o differ
diff --git a/dist/build/English.hi b/dist/build/English.hi
Binary files a/dist/build/English.hi and b/dist/build/English.hi differ
diff --git a/dist/build/English.o b/dist/build/English.o
Binary files a/dist/build/English.o and b/dist/build/English.o differ
diff --git a/dist/build/Exec.hi b/dist/build/Exec.hi
Binary files a/dist/build/Exec.hi and b/dist/build/Exec.hi differ
diff --git a/dist/build/Exec.o b/dist/build/Exec.o
Binary files a/dist/build/Exec.o and b/dist/build/Exec.o differ
diff --git a/dist/build/HSdarcs-beta-2.7.98.1.o b/dist/build/HSdarcs-beta-2.7.98.1.o
deleted file mode 100644
# file too large to diff: dist/build/HSdarcs-beta-2.7.98.1.o
diff --git a/dist/build/HSdarcs-beta-2.7.98.2.o b/dist/build/HSdarcs-beta-2.7.98.2.o
new file mode 100644
# file too large to diff: dist/build/HSdarcs-beta-2.7.98.2.o
diff --git a/dist/build/HTTP.hi b/dist/build/HTTP.hi
deleted file mode 100644
Binary files a/dist/build/HTTP.hi and /dev/null differ
diff --git a/dist/build/HTTP.o b/dist/build/HTTP.o
deleted file mode 100644
Binary files a/dist/build/HTTP.o and /dev/null differ
diff --git a/dist/build/IsoDate.hi b/dist/build/IsoDate.hi
Binary files a/dist/build/IsoDate.hi and b/dist/build/IsoDate.hi differ
diff --git a/dist/build/IsoDate.o b/dist/build/IsoDate.o
Binary files a/dist/build/IsoDate.o and b/dist/build/IsoDate.o differ
diff --git a/dist/build/Lcs.hi b/dist/build/Lcs.hi
Binary files a/dist/build/Lcs.hi and b/dist/build/Lcs.hi differ
diff --git a/dist/build/Lcs.o b/dist/build/Lcs.o
Binary files a/dist/build/Lcs.o and b/dist/build/Lcs.o differ
diff --git a/dist/build/Printer.hi b/dist/build/Printer.hi
Binary files a/dist/build/Printer.hi and b/dist/build/Printer.hi differ
diff --git a/dist/build/Printer.o b/dist/build/Printer.o
Binary files a/dist/build/Printer.o and b/dist/build/Printer.o differ
diff --git a/dist/build/Progress.hi b/dist/build/Progress.hi
Binary files a/dist/build/Progress.hi and b/dist/build/Progress.hi differ
diff --git a/dist/build/Progress.o b/dist/build/Progress.o
Binary files a/dist/build/Progress.o and b/dist/build/Progress.o differ
diff --git a/dist/build/Ratified.hi b/dist/build/Ratified.hi
Binary files a/dist/build/Ratified.hi and b/dist/build/Ratified.hi differ
diff --git a/dist/build/Ratified.o b/dist/build/Ratified.o
Binary files a/dist/build/Ratified.o and b/dist/build/Ratified.o differ
diff --git a/dist/build/SHA1.hi b/dist/build/SHA1.hi
Binary files a/dist/build/SHA1.hi and b/dist/build/SHA1.hi differ
diff --git a/dist/build/SHA1.o b/dist/build/SHA1.o
Binary files a/dist/build/SHA1.o and b/dist/build/SHA1.o differ
diff --git a/dist/build/Ssh.hi b/dist/build/Ssh.hi
deleted file mode 100644
Binary files a/dist/build/Ssh.hi and /dev/null differ
diff --git a/dist/build/Ssh.o b/dist/build/Ssh.o
deleted file mode 100644
Binary files a/dist/build/Ssh.o and /dev/null differ
diff --git a/dist/build/URL.hi b/dist/build/URL.hi
Binary files a/dist/build/URL.hi and b/dist/build/URL.hi differ
diff --git a/dist/build/URL.o b/dist/build/URL.o
Binary files a/dist/build/URL.o and b/dist/build/URL.o differ
diff --git a/dist/build/URL/Curl.hi b/dist/build/URL/Curl.hi
new file mode 100644
Binary files /dev/null and b/dist/build/URL/Curl.hi differ
diff --git a/dist/build/URL/Curl.o b/dist/build/URL/Curl.o
new file mode 100644
Binary files /dev/null and b/dist/build/URL/Curl.o differ
diff --git a/dist/build/URL/HTTP.hi b/dist/build/URL/HTTP.hi
new file mode 100644
Binary files /dev/null and b/dist/build/URL/HTTP.hi differ
diff --git a/dist/build/URL/HTTP.o b/dist/build/URL/HTTP.o
new file mode 100644
Binary files /dev/null and b/dist/build/URL/HTTP.o differ
diff --git a/dist/build/URL/Request.hi b/dist/build/URL/Request.hi
new file mode 100644
Binary files /dev/null and b/dist/build/URL/Request.hi differ
diff --git a/dist/build/URL/Request.o b/dist/build/URL/Request.o
new file mode 100644
Binary files /dev/null and b/dist/build/URL/Request.o differ
diff --git a/dist/build/Version.hi b/dist/build/Version.hi
Binary files a/dist/build/Version.hi and b/dist/build/Version.hi differ
diff --git a/dist/build/Version.o b/dist/build/Version.o
Binary files a/dist/build/Version.o and b/dist/build/Version.o differ
diff --git a/dist/build/Workaround.hi b/dist/build/Workaround.hi
Binary files a/dist/build/Workaround.hi and b/dist/build/Workaround.hi differ
diff --git a/dist/build/Workaround.o b/dist/build/Workaround.o
Binary files a/dist/build/Workaround.o and b/dist/build/Workaround.o differ
diff --git a/dist/build/autogen/Paths_darcs_beta.hs b/dist/build/autogen/Paths_darcs_beta.hs
--- a/dist/build/autogen/Paths_darcs_beta.hs
+++ b/dist/build/autogen/Paths_darcs_beta.hs
@@ -4,24 +4,27 @@
     getDataFileName
   ) where
 
+import qualified Control.Exception as Exception
 import Data.Version (Version(..))
 import System.Environment (getEnv)
+catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a
+catchIO = Exception.catch
 
-version :: Version
-version = Version {versionBranch = [2,7,98,1], versionTags = []}
 
+version :: Version
+version = Version {versionBranch = [2,7,98,2], versionTags = []}
 bindir, libdir, datadir, libexecdir :: FilePath
 
-bindir     = "/home/florent/.cabal/bin"
-libdir     = "/home/florent/.cabal/lib/darcs-beta-2.7.98.1/ghc-7.0.3"
-datadir    = "/home/florent/.cabal/share/darcs-beta-2.7.98.1"
-libexecdir = "/home/florent/.cabal/libexec"
+bindir     = "/home/ganesh/.cabal/bin"
+libdir     = "/home/ganesh/.cabal/lib/darcs-beta-2.7.98.2/ghc-7.0.4"
+datadir    = "/home/ganesh/.cabal/share/darcs-beta-2.7.98.2"
+libexecdir = "/home/ganesh/.cabal/libexec"
 
 getBinDir, getLibDir, getDataDir, getLibexecDir :: IO FilePath
-getBinDir = catch (getEnv "darcs_beta_bindir") (\_ -> return bindir)
-getLibDir = catch (getEnv "darcs_beta_libdir") (\_ -> return libdir)
-getDataDir = catch (getEnv "darcs_beta_datadir") (\_ -> return datadir)
-getLibexecDir = catch (getEnv "darcs_beta_libexecdir") (\_ -> return libexecdir)
+getBinDir = catchIO (getEnv "darcs_beta_bindir") (\_ -> return bindir)
+getLibDir = catchIO (getEnv "darcs_beta_libdir") (\_ -> return libdir)
+getDataDir = catchIO (getEnv "darcs_beta_datadir") (\_ -> return datadir)
+getLibexecDir = catchIO (getEnv "darcs_beta_libexecdir") (\_ -> return libexecdir)
 
 getDataFileName :: FilePath -> IO FilePath
 getDataFileName name = do
diff --git a/dist/build/autogen/Version.hs b/dist/build/autogen/Version.hs
--- a/dist/build/autogen/Version.hs
+++ b/dist/build/autogen/Version.hs
@@ -1,5 +1,5 @@
 module Version where
 builddeps, version, context :: String
-version = "2.7.98.1 (+ 7 patches)"
-builddeps = "HTTP-4000.1.1\narray-0.3.0.2\nbase-4.3.1.0\nbytestring-0.9.1.10\ncontainers-0.4.0.0\ndirectory-1.1.0.0\nextensible-exceptions-0.1.1.2\nfilepath-1.2.0.0\nhashed-storage-0.5.7\nhaskeline-0.6.4.0\nhtml-1.0.1.2\nmmap-0.5.7\nmtl-2.0.1.0\nnetwork-2.3.0.2\nold-time-1.0.0.6\nparsec-3.1.1\nprocess-1.0.1.5\nrandom-1.0.0.3\nregex-compat-0.95.1\ntar-0.3.1.0\nterminfo-0.3.1.3\ntext-0.11.0.6\nunix-2.4.2.0\nvector-0.7.0.1\nzlib-0.5.3.1\nHUnit-1.2.2.3\nQuickCheck-2.4.1.1\ncmdlib-0.3\nshellish-0.1.4\ntest-framework-0.4.0\ntest-framework-hunit-0.2.6\ntest-framework-quickcheck2-0.2.10\n"
-context = "\nContext:\n\n[use shell harness to run unit tests\nFlorent Becker <florent.becker@ens-lyon.org>**20110622121539\n Ignore-this: 90d1278826a355d026a1d1031328001\n] \n\n[allow shell harness to run unit tests\nFlorent Becker <florent.becker@ens-lyon.org>**20110622121520\n Ignore-this: 75a60c8708eab52ca96757c096843fdf\n] \n\n[add .dpatch test data\nFlorent Becker <florent.becker@ens-lyon.org>**20110621095836\n Ignore-this: fff511bd3980260ad03e9781dec4c384\n] \n\n[do not use dots in filenames for test/data, it confuses cabal sdist\nFlorent Becker <florent.becker@ens-lyon.org>**20110621095753\n Ignore-this: 8b50b23e13e63ba5eb9069763c7dd0df\n] \n\n[Remove ShellHarness in darcs.cabal\nFlorent Becker <florent.becker@ens-lyon.org>**20110621090001\n Ignore-this: f619960851f793c75bc0c29a7193d1fb\n] \n\n[Correct documentation files location in darcs.cabal\nFlorent Becker <florent.becker@ens-lyon.org>**20110621085512\n Ignore-this: 867399fa63cbb8f93fe988e409f0720f\n] \n\n[Remove test_stub.hs since it freaks cabal sdist out :-(\nFlorent Becker <florent.becker@ens-lyon.org>**20110621084645\n Ignore-this: 13f57c2e2035b5f429195abecda6abf\n] \n\n[TAG 2.7.98.1\nFlorent Becker <florent.becker@ens-lyon.org>**20110620163546\n Ignore-this: e91e53fb1f42bf61544c256a2e411e3d\n] \n"
+version = "2.7.98.2 (beta 2)"
+builddeps = "HTTP-4000.1.1\narray-0.3.0.2\nbase-4.3.1.0\nbytestring-0.9.1.10\ncontainers-0.4.0.0\ndirectory-1.1.0.0\nextensible-exceptions-0.1.1.2\nfilepath-1.2.0.0\nhashed-storage-0.5.7\nhaskeline-0.6.4.0\nhtml-1.0.1.2\nmmap-0.5.7\nmtl-2.0.1.0\nnetwork-2.3.0.4\nold-time-1.0.0.6\nparsec-3.1.1\nprocess-1.0.1.5\nrandom-1.0.0.3\nregex-compat-0.95.1\ntar-0.3.1.0\nterminfo-0.3.1.3\ntext-0.11.1.1\nunix-2.4.2.0\nvector-0.7.1\nzlib-0.5.3.1\nHUnit-1.2.2.3\nQuickCheck-2.4.1.1\ncmdlib-0.3.3\nshellish-0.1.4\ntest-framework-0.3.3\ntest-framework-hunit-0.2.6\ntest-framework-quickcheck2-0.2.10\n"
+context = "\nContext:\n\n[TAG 2.7.98.2\nGanesh Sittampalam <ganesh@earth.li>**20120115212754\n Ignore-this: 7329beca64c1b145a773b4cbf037f171\n] \n"
diff --git a/dist/build/autogen/cabal_macros.h b/dist/build/autogen/cabal_macros.h
--- a/dist/build/autogen/cabal_macros.h
+++ b/dist/build/autogen/cabal_macros.h
@@ -91,8 +91,8 @@
   (major1) == 2 && (major2) <  0 || \
   (major1) == 2 && (major2) == 0 && (minor) <= 1)
 
-/* package network-2.3.0.2 */
-#define VERSION_network "2.3.0.2"
+/* package network-2.3.0.4 */
+#define VERSION_network "2.3.0.4"
 #define MIN_VERSION_network(major1,major2,minor) (\
   (major1) <  2 || \
   (major1) == 2 && (major2) <  3 || \
@@ -147,12 +147,12 @@
   (major1) == 0 && (major2) <  3 || \
   (major1) == 0 && (major2) == 3 && (minor) <= 1)
 
-/* package text-0.11.0.6 */
-#define VERSION_text "0.11.0.6"
+/* package text-0.11.1.1 */
+#define VERSION_text "0.11.1.1"
 #define MIN_VERSION_text(major1,major2,minor) (\
   (major1) <  0 || \
   (major1) == 0 && (major2) <  11 || \
-  (major1) == 0 && (major2) == 11 && (minor) <= 0)
+  (major1) == 0 && (major2) == 11 && (minor) <= 1)
 
 /* package unix-2.4.2.0 */
 #define VERSION_unix "2.4.2.0"
@@ -161,12 +161,12 @@
   (major1) == 2 && (major2) <  4 || \
   (major1) == 2 && (major2) == 4 && (minor) <= 2)
 
-/* package vector-0.7.0.1 */
-#define VERSION_vector "0.7.0.1"
+/* package vector-0.7.1 */
+#define VERSION_vector "0.7.1"
 #define MIN_VERSION_vector(major1,major2,minor) (\
   (major1) <  0 || \
   (major1) == 0 && (major2) <  7 || \
-  (major1) == 0 && (major2) == 7 && (minor) <= 0)
+  (major1) == 0 && (major2) == 7 && (minor) <= 1)
 
 /* package zlib-0.5.3.1 */
 #define VERSION_zlib "0.5.3.1"
@@ -189,12 +189,12 @@
   (major1) == 2 && (major2) <  4 || \
   (major1) == 2 && (major2) == 4 && (minor) <= 1)
 
-/* package cmdlib-0.3 */
-#define VERSION_cmdlib "0.3"
+/* package cmdlib-0.3.3 */
+#define VERSION_cmdlib "0.3.3"
 #define MIN_VERSION_cmdlib(major1,major2,minor) (\
   (major1) <  0 || \
   (major1) == 0 && (major2) <  3 || \
-  (major1) == 0 && (major2) == 3 && (minor) <= 0)
+  (major1) == 0 && (major2) == 3 && (minor) <= 3)
 
 /* package shellish-0.1.4 */
 #define VERSION_shellish "0.1.4"
@@ -203,12 +203,12 @@
   (major1) == 0 && (major2) <  1 || \
   (major1) == 0 && (major2) == 1 && (minor) <= 4)
 
-/* package test-framework-0.4.0 */
-#define VERSION_test_framework "0.4.0"
+/* package test-framework-0.3.3 */
+#define VERSION_test_framework "0.3.3"
 #define MIN_VERSION_test_framework(major1,major2,minor) (\
   (major1) <  0 || \
-  (major1) == 0 && (major2) <  4 || \
-  (major1) == 0 && (major2) == 4 && (minor) <= 0)
+  (major1) == 0 && (major2) <  3 || \
+  (major1) == 0 && (major2) == 3 && (minor) <= 3)
 
 /* package test-framework-hunit-0.2.6 */
 #define VERSION_test_framework_hunit "0.2.6"
diff --git a/dist/build/darcs-test/darcs-test b/dist/build/darcs-test/darcs-test
# file too large to diff: dist/build/darcs-test/darcs-test
diff --git a/dist/build/darcs-test/darcs-test-tmp/ByteStringUtils.hi b/dist/build/darcs-test/darcs-test-tmp/ByteStringUtils.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/ByteStringUtils.hi and b/dist/build/darcs-test/darcs-test-tmp/ByteStringUtils.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/ByteStringUtils.o b/dist/build/darcs-test/darcs-test-tmp/ByteStringUtils.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/ByteStringUtils.o and b/dist/build/darcs-test/darcs-test-tmp/ByteStringUtils.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/CommandLine.hi b/dist/build/darcs-test/darcs-test-tmp/CommandLine.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/CommandLine.hi and b/dist/build/darcs-test/darcs-test-tmp/CommandLine.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/CommandLine.o b/dist/build/darcs-test/darcs-test-tmp/CommandLine.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/CommandLine.o and b/dist/build/darcs-test/darcs-test-tmp/CommandLine.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Crypt/SHA256.hi b/dist/build/darcs-test/darcs-test-tmp/Crypt/SHA256.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Crypt/SHA256.hi and b/dist/build/darcs-test/darcs-test-tmp/Crypt/SHA256.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Crypt/SHA256.o b/dist/build/darcs-test/darcs-test-tmp/Crypt/SHA256.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Crypt/SHA256.o and b/dist/build/darcs-test/darcs-test-tmp/Crypt/SHA256.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Arguments.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Arguments.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Arguments.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Arguments.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Arguments.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Arguments.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Arguments.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Arguments.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Bug.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Bug.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Bug.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Bug.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Bug.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Bug.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Bug.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Bug.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/ColorPrinter.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/ColorPrinter.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/ColorPrinter.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/ColorPrinter.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/ColorPrinter.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/ColorPrinter.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/ColorPrinter.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/ColorPrinter.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands/Replace.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands/Replace.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands/Replace.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands/Replace.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands/Replace.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands/Replace.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands/Replace.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Commands/Replace.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/CommandsAux.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/CommandsAux.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/CommandsAux.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/CommandsAux.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/CommandsAux.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/CommandsAux.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/CommandsAux.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/CommandsAux.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Compat.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Compat.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Compat.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Compat.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Compat.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Compat.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Compat.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Compat.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Diff.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Diff.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Diff.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Diff.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Diff.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Diff.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Diff.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Diff.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Email.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Email.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Email.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Email.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Email.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Email.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Email.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Email.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/External.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/External.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/External.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/External.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/External.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/External.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/External.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/External.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Flags.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Flags.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Flags.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Flags.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Flags.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Flags.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Flags.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Flags.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Global.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Global.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Global.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Global.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Global.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Global.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Global.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Global.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/IO.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/IO.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/IO.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/IO.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/IO.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/IO.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/IO.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/IO.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Lock.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Lock.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Lock.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Lock.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Lock.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Lock.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Lock.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Lock.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/MonadProgress.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/MonadProgress.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/MonadProgress.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/MonadProgress.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/MonadProgress.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/MonadProgress.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/MonadProgress.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/MonadProgress.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Apply.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Apply.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Apply.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Apply.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Apply.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Apply.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Apply.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Apply.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ApplyMonad.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ApplyMonad.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ApplyMonad.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ApplyMonad.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ApplyMonad.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ApplyMonad.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ApplyMonad.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ApplyMonad.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed/Instances.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed/Instances.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed/Instances.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed/Instances.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed/Instances.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed/Instances.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed/Instances.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bracketed/Instances.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bundle.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bundle.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bundle.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bundle.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bundle.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bundle.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bundle.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Bundle.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Commute.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Commute.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Commute.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Commute.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Commute.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Commute.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Commute.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Commute.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Conflict.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Conflict.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Conflict.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Conflict.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Conflict.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Conflict.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Conflict.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Conflict.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ConflictMarking.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ConflictMarking.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ConflictMarking.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ConflictMarking.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ConflictMarking.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ConflictMarking.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ConflictMarking.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ConflictMarking.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Depends.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Depends.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Depends.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Depends.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Depends.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Depends.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Depends.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Depends.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Dummy.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Dummy.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Dummy.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Dummy.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Dummy.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Dummy.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Dummy.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Dummy.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Effect.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Effect.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Effect.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Effect.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Effect.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Effect.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Effect.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Effect.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileHunk.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileHunk.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileHunk.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileHunk.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileHunk.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileHunk.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileHunk.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileHunk.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileName.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileName.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileName.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileName.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileName.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileName.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileName.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/FileName.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Format.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Format.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Format.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Format.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Format.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Format.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Format.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Format.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Info.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Info.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Info.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Info.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Info.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Info.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Info.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Info.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Inspect.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Inspect.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Inspect.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Inspect.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Inspect.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Inspect.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Inspect.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Inspect.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Invert.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Invert.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Invert.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Invert.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Invert.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Invert.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Invert.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Invert.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/MatchData.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/MatchData.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/MatchData.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/MatchData.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/MatchData.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/MatchData.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/MatchData.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/MatchData.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Merge.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Merge.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Merge.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Merge.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Merge.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Merge.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Merge.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Merge.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Named.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Named.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Named.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Named.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Named.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Named.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Named.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Named.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/OldDate.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/OldDate.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/OldDate.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/OldDate.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/OldDate.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/OldDate.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/OldDate.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/OldDate.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/PatchInfoAnd.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/PatchInfoAnd.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/PatchInfoAnd.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/PatchInfoAnd.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/PatchInfoAnd.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/PatchInfoAnd.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/PatchInfoAnd.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/PatchInfoAnd.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy/Instances.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy/Instances.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy/Instances.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy/Instances.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy/Instances.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy/Instances.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy/Instances.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Patchy/Instances.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Permutations.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Permutations.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Permutations.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Permutations.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Permutations.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Permutations.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Permutations.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Permutations.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/Class.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/Class.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/Class.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/Class.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/Class.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/Class.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/Class.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/Class.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Apply.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Apply.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Apply.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Apply.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Apply.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Apply.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Apply.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Apply.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Coalesce.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Coalesce.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Coalesce.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Coalesce.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Coalesce.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Coalesce.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Coalesce.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Coalesce.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Commute.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Commute.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Commute.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Commute.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Commute.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Commute.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Commute.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Commute.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Core.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Core.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Core.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Core.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Core.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Core.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Core.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Core.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Details.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Details.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Details.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Details.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Details.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Details.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Details.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Details.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Read.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Read.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Read.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Read.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Read.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Read.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Read.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Read.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Show.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Show.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Show.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Show.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Show.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Show.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Show.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V1/Show.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Apply.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Apply.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Apply.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Apply.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Apply.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Apply.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Coalesce.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Coalesce.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Coalesce.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Coalesce.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Coalesce.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Coalesce.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Commute.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Commute.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Commute.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Commute.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Commute.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Commute.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Core.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Core.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Core.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Core.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Core.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Core.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Details.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Details.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Details.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Details.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Details.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Details.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/ObjectMap.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/ObjectMap.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/ObjectMap.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/ObjectMap.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/ObjectMap.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/ObjectMap.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Read.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Read.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Read.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Read.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Read.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Read.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Show.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Show.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Show.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Show.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Show.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Prim/V3/Show.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Read.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Read.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Read.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Read.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Read.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Read.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Read.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Read.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ReadMonads.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ReadMonads.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ReadMonads.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ReadMonads.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ReadMonads.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ReadMonads.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ReadMonads.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/ReadMonads.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RegChars.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RegChars.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RegChars.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RegChars.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RegChars.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RegChars.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RegChars.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RegChars.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Repair.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Repair.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Repair.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Repair.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Repair.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Repair.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Repair.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Repair.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RepoPatch.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RepoPatch.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RepoPatch.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RepoPatch.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RepoPatch.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RepoPatch.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RepoPatch.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/RepoPatch.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Set.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Set.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Set.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Set.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Set.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Set.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Set.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Set.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Show.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Show.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Show.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Show.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Show.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Show.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Show.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Show.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Summary.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Summary.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Summary.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Summary.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Summary.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Summary.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Summary.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Summary.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/SummaryData.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/SummaryData.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/SummaryData.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/SummaryData.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/SummaryData.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/SummaryData.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/SummaryData.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/SummaryData.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/TokenReplace.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/TokenReplace.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/TokenReplace.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/TokenReplace.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/TokenReplace.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/TokenReplace.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/TokenReplace.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/TokenReplace.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Apply.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Apply.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Apply.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Apply.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Apply.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Apply.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Apply.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Apply.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Commute.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Commute.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Commute.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Commute.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Commute.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Commute.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Commute.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Commute.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Core.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Core.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Core.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Core.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Core.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Core.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Core.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Core.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Read.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Read.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Read.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Read.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Read.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Read.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Read.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Read.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Show.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Show.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Show.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Show.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Show.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Show.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Show.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Show.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Viewing.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Viewing.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Viewing.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Viewing.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Viewing.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Viewing.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Viewing.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V1/Viewing.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Non.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Non.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Non.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Non.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Non.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Non.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Non.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Non.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Real.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Real.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Real.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Real.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Real.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Real.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Real.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/V2/Real.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Viewing.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Viewing.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Viewing.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Viewing.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Viewing.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Viewing.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Viewing.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Patch/Viewing.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/ProgressPatches.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/ProgressPatches.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/ProgressPatches.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/ProgressPatches.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/ProgressPatches.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/ProgressPatches.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/ProgressPatches.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/ProgressPatches.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/RepoPath.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/RepoPath.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/RepoPath.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/RepoPath.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/RepoPath.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/RepoPath.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/RepoPath.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/RepoPath.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/ApplyPatches.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/ApplyPatches.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/ApplyPatches.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/ApplyPatches.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/ApplyPatches.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/ApplyPatches.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/ApplyPatches.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/ApplyPatches.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Cache.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Cache.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Cache.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Cache.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Cache.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Cache.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Cache.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Cache.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Format.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Format.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Format.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Format.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Format.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Format.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Format.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Format.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedIO.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedIO.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedIO.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedIO.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedIO.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedIO.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedIO.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedIO.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedRepo.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedRepo.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedRepo.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedRepo.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedRepo.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedRepo.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedRepo.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/HashedRepo.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Internal.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Internal.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Internal.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Internal.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Internal.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Internal.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Internal.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Internal.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/InternalTypes.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/InternalTypes.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/InternalTypes.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/InternalTypes.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/InternalTypes.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/InternalTypes.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/InternalTypes.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/InternalTypes.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/LowLevel.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/LowLevel.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/LowLevel.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/LowLevel.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/LowLevel.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/LowLevel.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/LowLevel.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/LowLevel.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Merge.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Merge.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Merge.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Merge.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Merge.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Merge.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Merge.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Merge.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Old.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Old.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Old.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Old.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Old.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Old.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Old.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Old.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Prefs.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Prefs.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Prefs.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Prefs.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Prefs.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Prefs.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Prefs.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/Prefs.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/State.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/State.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/State.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/State.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/State.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/State.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/State.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Repository/State.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Resolution.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Resolution.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Resolution.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Resolution.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Resolution.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Resolution.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Resolution.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Resolution.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/SignalHandler.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/SignalHandler.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/SignalHandler.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/SignalHandler.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/SignalHandler.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/SignalHandler.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/SignalHandler.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/SignalHandler.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Ssh.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Ssh.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Ssh.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Ssh.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Ssh.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Ssh.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Email.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Email.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Email.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Email.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Email.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Email.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Email.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Email.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Misc.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Misc.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Misc.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Misc.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Misc.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Misc.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Misc.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Misc.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/Generic.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/Generic.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/Generic.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/Generic.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/Generic.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/Generic.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PatchV1.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PatchV1.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PatchV1.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PatchV1.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PatchV1.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PatchV1.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PrimV1.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PrimV1.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PrimV1.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PrimV1.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PrimV1.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PrimV1.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PrimV3.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PrimV3.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PrimV3.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PrimV3.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PrimV3.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/PrimV3.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/Real.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/Real.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/Real.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/Real.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/Real.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Arbitrary/Real.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Check.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Check.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Check.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Check.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Check.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Check.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Check.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Check.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples.hi
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples.hi and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples.o
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples.o and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples/Set1.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples/Set1.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples/Set1.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples/Set1.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples/Set1.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples/Set1.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples/Set2Unwitnessed.h b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples/Set2Unwitnessed.h
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples/Set2Unwitnessed.h differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples/Set2Unwitnessed.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples/Set2Unwitnessed.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples/Set2Unwitnessed.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples2.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples2.hi
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples2.hi and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples2.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples2.o
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Examples2.o and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Info.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Info.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Info.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Info.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Info.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Info.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Info.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Info.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Prim/V1.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Prim/V1.hi
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Prim/V1.hi and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Prim/V1.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Prim/V1.o
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Prim/V1.o and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties.hi
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties.hi and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties.o
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties.o and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Check.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Check.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Check.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Check.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Check.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Check.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Generic.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Generic.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Generic.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Generic.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Generic.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Generic.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/GenericUnwitnes b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/GenericUnwitnes
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/GenericUnwitnes differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Real.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Real.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Real.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Real.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Real.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/Real.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/V1Set1.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/V1Set1.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/V1Set1.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/V1Set1.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/V1Set1.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/V1Set1.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/V1Set2.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/V1Set2.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/V1Set2.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/V1Set2.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/V1Set2.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties/V1Set2.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties2.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties2.hi
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties2.hi and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties2.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties2.o
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Properties2.o and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/QuickCheck.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/QuickCheck.hi
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/QuickCheck.hi and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/QuickCheck.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/QuickCheck.o
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/QuickCheck.o and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/RepoModel.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/RepoModel.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/RepoModel.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/RepoModel.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/RepoModel.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/RepoModel.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/RepoModel.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/RepoModel.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Test.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Test.hi
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Test.hi and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Test.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Test.o
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Test.o and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Unit.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Unit.hi
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Unit.hi and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Unit.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Unit.o
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Unit.o and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Unit2.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Unit2.hi
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Unit2.hi and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Unit2.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Unit2.o
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Unit2.o and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Utils.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Utils.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Utils.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Utils.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Utils.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Utils.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Utils.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/Utils.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/V1Model.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/V1Model.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/V1Model.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/V1Model.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/V1Model.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/V1Model.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/V3Model.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/V3Model.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/V3Model.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/V3Model.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/V3Model.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/V3Model.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WSub.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WSub.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WSub.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WSub.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WSub.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WSub.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WithState.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WithState.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WithState.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WithState.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WithState.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WithState.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WithState.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Patch/WithState.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/QuickCheck.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/QuickCheck.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/QuickCheck.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/QuickCheck.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/QuickCheck.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/QuickCheck.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/QuickCheck.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/QuickCheck.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/TestResult.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/TestResult.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/TestResult.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/TestResult.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/TestResult.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/TestResult.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/TestResult.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Test/Util/TestResult.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/URL.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/URL.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/URL.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/URL.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/URL.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/URL.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/URL.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/URL.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Utils.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Utils.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Utils.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Utils.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Utils.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Utils.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Utils.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Utils.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Eq.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Eq.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Eq.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Eq.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Eq.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Eq.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Eq.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Eq.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Ordered.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Ordered.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Ordered.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Ordered.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Ordered.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Ordered.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Ordered.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Ordered.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Sealed.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Sealed.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Sealed.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Sealed.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Sealed.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Sealed.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Sealed.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Sealed.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Show.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Show.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Show.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Show.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Show.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Show.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Show.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Show.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Unsafe.hi b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Unsafe.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Unsafe.hi and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Unsafe.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Unsafe.o b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Unsafe.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Unsafe.o and b/dist/build/darcs-test/darcs-test-tmp/Darcs/Witnesses/Unsafe.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/English.hi b/dist/build/darcs-test/darcs-test-tmp/English.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/English.hi and b/dist/build/darcs-test/darcs-test-tmp/English.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/English.o b/dist/build/darcs-test/darcs-test-tmp/English.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/English.o and b/dist/build/darcs-test/darcs-test-tmp/English.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Exec.hi b/dist/build/darcs-test/darcs-test-tmp/Exec.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Exec.hi and b/dist/build/darcs-test/darcs-test-tmp/Exec.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Exec.o b/dist/build/darcs-test/darcs-test-tmp/Exec.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Exec.o and b/dist/build/darcs-test/darcs-test-tmp/Exec.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/HTTP.hi b/dist/build/darcs-test/darcs-test-tmp/HTTP.hi
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/HTTP.hi and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/HTTP.o b/dist/build/darcs-test/darcs-test-tmp/HTTP.o
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/HTTP.o and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Lcs.hi b/dist/build/darcs-test/darcs-test-tmp/Lcs.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Lcs.hi and b/dist/build/darcs-test/darcs-test-tmp/Lcs.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Lcs.o b/dist/build/darcs-test/darcs-test-tmp/Lcs.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Lcs.o and b/dist/build/darcs-test/darcs-test-tmp/Lcs.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Main.hi b/dist/build/darcs-test/darcs-test-tmp/Main.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Main.hi and b/dist/build/darcs-test/darcs-test-tmp/Main.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Main.o b/dist/build/darcs-test/darcs-test-tmp/Main.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Main.o and b/dist/build/darcs-test/darcs-test-tmp/Main.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Printer.hi b/dist/build/darcs-test/darcs-test-tmp/Printer.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Printer.hi and b/dist/build/darcs-test/darcs-test-tmp/Printer.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Printer.o b/dist/build/darcs-test/darcs-test-tmp/Printer.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Printer.o and b/dist/build/darcs-test/darcs-test-tmp/Printer.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Progress.hi b/dist/build/darcs-test/darcs-test-tmp/Progress.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Progress.hi and b/dist/build/darcs-test/darcs-test-tmp/Progress.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Progress.o b/dist/build/darcs-test/darcs-test-tmp/Progress.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Progress.o and b/dist/build/darcs-test/darcs-test-tmp/Progress.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Ratified.hi b/dist/build/darcs-test/darcs-test-tmp/Ratified.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Ratified.hi and b/dist/build/darcs-test/darcs-test-tmp/Ratified.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Ratified.o b/dist/build/darcs-test/darcs-test-tmp/Ratified.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Ratified.o and b/dist/build/darcs-test/darcs-test-tmp/Ratified.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/SHA1.hi b/dist/build/darcs-test/darcs-test-tmp/SHA1.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/SHA1.hi and b/dist/build/darcs-test/darcs-test-tmp/SHA1.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/SHA1.o b/dist/build/darcs-test/darcs-test-tmp/SHA1.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/SHA1.o and b/dist/build/darcs-test/darcs-test-tmp/SHA1.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Ssh.hi b/dist/build/darcs-test/darcs-test-tmp/Ssh.hi
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Ssh.hi and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Ssh.o b/dist/build/darcs-test/darcs-test-tmp/Ssh.o
deleted file mode 100644
Binary files a/dist/build/darcs-test/darcs-test-tmp/Ssh.o and /dev/null differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/URL.hi b/dist/build/darcs-test/darcs-test-tmp/URL.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/URL.hi and b/dist/build/darcs-test/darcs-test-tmp/URL.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/URL.o b/dist/build/darcs-test/darcs-test-tmp/URL.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/URL.o and b/dist/build/darcs-test/darcs-test-tmp/URL.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/URL/HTTP.hi b/dist/build/darcs-test/darcs-test-tmp/URL/HTTP.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/URL/HTTP.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/URL/HTTP.o b/dist/build/darcs-test/darcs-test-tmp/URL/HTTP.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/URL/HTTP.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/URL/Request.hi b/dist/build/darcs-test/darcs-test-tmp/URL/Request.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/URL/Request.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/URL/Request.o b/dist/build/darcs-test/darcs-test-tmp/URL/Request.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/URL/Request.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Version.hi b/dist/build/darcs-test/darcs-test-tmp/Version.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Version.hi and b/dist/build/darcs-test/darcs-test-tmp/Version.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Version.o b/dist/build/darcs-test/darcs-test-tmp/Version.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Version.o and b/dist/build/darcs-test/darcs-test-tmp/Version.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Workaround.hi b/dist/build/darcs-test/darcs-test-tmp/Workaround.hi
Binary files a/dist/build/darcs-test/darcs-test-tmp/Workaround.hi and b/dist/build/darcs-test/darcs-test-tmp/Workaround.hi differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/Workaround.o b/dist/build/darcs-test/darcs-test-tmp/Workaround.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/Workaround.o and b/dist/build/darcs-test/darcs-test-tmp/Workaround.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/src/Crypt/sha2.o b/dist/build/darcs-test/darcs-test-tmp/src/Crypt/sha2.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/src/Crypt/sha2.o and b/dist/build/darcs-test/darcs-test-tmp/src/Crypt/sha2.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/src/atomic_create.o b/dist/build/darcs-test/darcs-test-tmp/src/atomic_create.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/src/atomic_create.o and b/dist/build/darcs-test/darcs-test-tmp/src/atomic_create.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/src/fpstring.o b/dist/build/darcs-test/darcs-test-tmp/src/fpstring.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/src/fpstring.o and b/dist/build/darcs-test/darcs-test-tmp/src/fpstring.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/src/maybe_relink.o b/dist/build/darcs-test/darcs-test-tmp/src/maybe_relink.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/src/maybe_relink.o and b/dist/build/darcs-test/darcs-test-tmp/src/maybe_relink.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/src/system_encoding.o b/dist/build/darcs-test/darcs-test-tmp/src/system_encoding.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs-test/darcs-test-tmp/src/system_encoding.o differ
diff --git a/dist/build/darcs-test/darcs-test-tmp/src/umask.o b/dist/build/darcs-test/darcs-test-tmp/src/umask.o
Binary files a/dist/build/darcs-test/darcs-test-tmp/src/umask.o and b/dist/build/darcs-test/darcs-test-tmp/src/umask.o differ
diff --git a/dist/build/darcs/darcs b/dist/build/darcs/darcs
# file too large to diff: dist/build/darcs/darcs
diff --git a/dist/build/darcs/darcs-tmp/ByteStringUtils.hi b/dist/build/darcs/darcs-tmp/ByteStringUtils.hi
Binary files a/dist/build/darcs/darcs-tmp/ByteStringUtils.hi and b/dist/build/darcs/darcs-tmp/ByteStringUtils.hi differ
diff --git a/dist/build/darcs/darcs-tmp/ByteStringUtils.o b/dist/build/darcs/darcs-tmp/ByteStringUtils.o
Binary files a/dist/build/darcs/darcs-tmp/ByteStringUtils.o and b/dist/build/darcs/darcs-tmp/ByteStringUtils.o differ
diff --git a/dist/build/darcs/darcs-tmp/CommandLine.hi b/dist/build/darcs/darcs-tmp/CommandLine.hi
Binary files a/dist/build/darcs/darcs-tmp/CommandLine.hi and b/dist/build/darcs/darcs-tmp/CommandLine.hi differ
diff --git a/dist/build/darcs/darcs-tmp/CommandLine.o b/dist/build/darcs/darcs-tmp/CommandLine.o
Binary files a/dist/build/darcs/darcs-tmp/CommandLine.o and b/dist/build/darcs/darcs-tmp/CommandLine.o differ
diff --git a/dist/build/darcs/darcs-tmp/Crypt/SHA256.hi b/dist/build/darcs/darcs-tmp/Crypt/SHA256.hi
Binary files a/dist/build/darcs/darcs-tmp/Crypt/SHA256.hi and b/dist/build/darcs/darcs-tmp/Crypt/SHA256.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Crypt/SHA256.o b/dist/build/darcs/darcs-tmp/Crypt/SHA256.o
Binary files a/dist/build/darcs/darcs-tmp/Crypt/SHA256.o and b/dist/build/darcs/darcs-tmp/Crypt/SHA256.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Annotate.hi b/dist/build/darcs/darcs-tmp/Darcs/Annotate.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Annotate.hi and b/dist/build/darcs/darcs-tmp/Darcs/Annotate.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Annotate.o b/dist/build/darcs/darcs-tmp/Darcs/Annotate.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Annotate.o and b/dist/build/darcs/darcs-tmp/Darcs/Annotate.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/ArgumentDefaults.hi b/dist/build/darcs/darcs-tmp/Darcs/ArgumentDefaults.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/ArgumentDefaults.hi and b/dist/build/darcs/darcs-tmp/Darcs/ArgumentDefaults.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/ArgumentDefaults.o b/dist/build/darcs/darcs-tmp/Darcs/ArgumentDefaults.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/ArgumentDefaults.o and b/dist/build/darcs/darcs-tmp/Darcs/ArgumentDefaults.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Arguments.hi b/dist/build/darcs/darcs-tmp/Darcs/Arguments.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Arguments.hi and b/dist/build/darcs/darcs-tmp/Darcs/Arguments.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Arguments.o b/dist/build/darcs/darcs-tmp/Darcs/Arguments.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Arguments.o and b/dist/build/darcs/darcs-tmp/Darcs/Arguments.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Bug.hi b/dist/build/darcs/darcs-tmp/Darcs/Bug.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Bug.hi and b/dist/build/darcs/darcs-tmp/Darcs/Bug.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Bug.o b/dist/build/darcs/darcs-tmp/Darcs/Bug.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Bug.o and b/dist/build/darcs/darcs-tmp/Darcs/Bug.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/ColorPrinter.hi b/dist/build/darcs/darcs-tmp/Darcs/ColorPrinter.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/ColorPrinter.hi and b/dist/build/darcs/darcs-tmp/Darcs/ColorPrinter.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/ColorPrinter.o b/dist/build/darcs/darcs-tmp/Darcs/ColorPrinter.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/ColorPrinter.o and b/dist/build/darcs/darcs-tmp/Darcs/ColorPrinter.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands.o b/dist/build/darcs/darcs-tmp/Darcs/Commands.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Add.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Add.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Add.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Add.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Add.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Add.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Add.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Add.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/AmendRecord.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/AmendRecord.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/AmendRecord.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/AmendRecord.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/AmendRecord.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/AmendRecord.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/AmendRecord.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/AmendRecord.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Annotate.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Annotate.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Annotate.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Annotate.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Annotate.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Annotate.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Annotate.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Annotate.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Apply.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Apply.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Apply.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Apply.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Apply.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Apply.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Apply.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Apply.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Changes.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Changes.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Changes.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Changes.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Changes.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Changes.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Changes.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Changes.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Check.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Check.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Check.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Check.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Check.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Check.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Check.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Check.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Convert.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Convert.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Convert.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Convert.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Convert.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Convert.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Convert.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Convert.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Diff.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Diff.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Diff.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Diff.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Diff.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Diff.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Diff.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Diff.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Dist.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Dist.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Dist.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Dist.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Dist.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Dist.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Dist.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Dist.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/GZCRCs.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/GZCRCs.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/GZCRCs.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/GZCRCs.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/GZCRCs.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/GZCRCs.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/GZCRCs.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/GZCRCs.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Get.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Get.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Get.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Get.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Get.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Get.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Get.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Get.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Help.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Help.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Help.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Help.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Help.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Help.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Help.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Help.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Init.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Init.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Init.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Init.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Init.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Init.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Init.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Init.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/MarkConflicts.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/MarkConflicts.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/MarkConflicts.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/MarkConflicts.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/MarkConflicts.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/MarkConflicts.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/MarkConflicts.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/MarkConflicts.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Move.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Move.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Move.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Move.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Move.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Move.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Move.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Move.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Optimize.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Optimize.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Optimize.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Optimize.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Optimize.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Optimize.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Optimize.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Optimize.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Pull.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Pull.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Pull.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Pull.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Pull.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Pull.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Pull.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Pull.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Push.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Push.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Push.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Push.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Push.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Push.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Push.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Push.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Put.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Put.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Put.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Put.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Put.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Put.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Put.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Put.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Record.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Record.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Record.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Record.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Record.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Record.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Record.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Record.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Remove.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Remove.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Remove.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Remove.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Remove.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Remove.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Remove.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Remove.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Replace.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Replace.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Replace.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Replace.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Replace.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Replace.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Replace.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Replace.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Revert.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Revert.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Revert.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Revert.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Revert.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Revert.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Revert.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Revert.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Rollback.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Rollback.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Rollback.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Rollback.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Rollback.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Rollback.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Rollback.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Rollback.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Send.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Send.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Send.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Send.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Send.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Send.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Send.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Send.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/SetPref.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/SetPref.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/SetPref.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/SetPref.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/SetPref.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/SetPref.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/SetPref.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/SetPref.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Show.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Show.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Show.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Show.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Show.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Show.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Show.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Show.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowAuthors.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowAuthors.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowAuthors.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowAuthors.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowAuthors.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowAuthors.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowAuthors.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowAuthors.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowBug.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowBug.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowBug.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowBug.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowBug.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowBug.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowBug.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowBug.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowContents.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowContents.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowContents.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowContents.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowContents.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowContents.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowContents.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowContents.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowFiles.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowFiles.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowFiles.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowFiles.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowFiles.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowFiles.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowFiles.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowFiles.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowIndex.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowIndex.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowIndex.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowIndex.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowIndex.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowIndex.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowIndex.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowIndex.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowRepo.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowRepo.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowRepo.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowRepo.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowRepo.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowRepo.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowRepo.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowRepo.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowTags.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowTags.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowTags.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowTags.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowTags.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowTags.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowTags.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/ShowTags.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Tag.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Tag.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Tag.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Tag.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Tag.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Tag.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Tag.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Tag.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/TrackDown.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/TrackDown.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/TrackDown.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/TrackDown.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/TrackDown.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/TrackDown.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/TrackDown.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/TrackDown.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/TransferMode.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/TransferMode.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/TransferMode.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/TransferMode.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/TransferMode.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/TransferMode.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/TransferMode.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/TransferMode.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrecord.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrecord.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrecord.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrecord.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrecord.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrecord.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrecord.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrecord.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrevert.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrevert.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrevert.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrevert.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrevert.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrevert.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrevert.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Unrevert.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Util.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/Util.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Util.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Util.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/Util.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/Util.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/Util.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/Util.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/WhatsNew.hi b/dist/build/darcs/darcs-tmp/Darcs/Commands/WhatsNew.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/WhatsNew.hi and b/dist/build/darcs/darcs-tmp/Darcs/Commands/WhatsNew.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Commands/WhatsNew.o b/dist/build/darcs/darcs-tmp/Darcs/Commands/WhatsNew.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Commands/WhatsNew.o and b/dist/build/darcs/darcs-tmp/Darcs/Commands/WhatsNew.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/CommandsAux.hi b/dist/build/darcs/darcs-tmp/Darcs/CommandsAux.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/CommandsAux.hi and b/dist/build/darcs/darcs-tmp/Darcs/CommandsAux.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/CommandsAux.o b/dist/build/darcs/darcs-tmp/Darcs/CommandsAux.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/CommandsAux.o and b/dist/build/darcs/darcs-tmp/Darcs/CommandsAux.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Compat.hi b/dist/build/darcs/darcs-tmp/Darcs/Compat.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Compat.hi and b/dist/build/darcs/darcs-tmp/Darcs/Compat.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Compat.o b/dist/build/darcs/darcs-tmp/Darcs/Compat.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Compat.o and b/dist/build/darcs/darcs-tmp/Darcs/Compat.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Diff.hi b/dist/build/darcs/darcs-tmp/Darcs/Diff.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Diff.hi and b/dist/build/darcs/darcs-tmp/Darcs/Diff.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Diff.o b/dist/build/darcs/darcs-tmp/Darcs/Diff.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Diff.o and b/dist/build/darcs/darcs-tmp/Darcs/Diff.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Email.hi b/dist/build/darcs/darcs-tmp/Darcs/Email.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Email.hi and b/dist/build/darcs/darcs-tmp/Darcs/Email.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Email.o b/dist/build/darcs/darcs-tmp/Darcs/Email.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Email.o and b/dist/build/darcs/darcs-tmp/Darcs/Email.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/External.hi b/dist/build/darcs/darcs-tmp/Darcs/External.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/External.hi and b/dist/build/darcs/darcs-tmp/Darcs/External.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/External.o b/dist/build/darcs/darcs-tmp/Darcs/External.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/External.o and b/dist/build/darcs/darcs-tmp/Darcs/External.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Flags.hi b/dist/build/darcs/darcs-tmp/Darcs/Flags.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Flags.hi and b/dist/build/darcs/darcs-tmp/Darcs/Flags.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Flags.o b/dist/build/darcs/darcs-tmp/Darcs/Flags.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Flags.o and b/dist/build/darcs/darcs-tmp/Darcs/Flags.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Global.hi b/dist/build/darcs/darcs-tmp/Darcs/Global.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Global.hi and b/dist/build/darcs/darcs-tmp/Darcs/Global.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Global.o b/dist/build/darcs/darcs-tmp/Darcs/Global.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Global.o and b/dist/build/darcs/darcs-tmp/Darcs/Global.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/IO.hi b/dist/build/darcs/darcs-tmp/Darcs/IO.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/IO.hi and b/dist/build/darcs/darcs-tmp/Darcs/IO.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/IO.o b/dist/build/darcs/darcs-tmp/Darcs/IO.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/IO.o and b/dist/build/darcs/darcs-tmp/Darcs/IO.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Lock.hi b/dist/build/darcs/darcs-tmp/Darcs/Lock.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Lock.hi and b/dist/build/darcs/darcs-tmp/Darcs/Lock.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Lock.o b/dist/build/darcs/darcs-tmp/Darcs/Lock.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Lock.o and b/dist/build/darcs/darcs-tmp/Darcs/Lock.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Match.hi b/dist/build/darcs/darcs-tmp/Darcs/Match.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Match.hi and b/dist/build/darcs/darcs-tmp/Darcs/Match.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Match.o b/dist/build/darcs/darcs-tmp/Darcs/Match.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Match.o and b/dist/build/darcs/darcs-tmp/Darcs/Match.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/MonadProgress.hi b/dist/build/darcs/darcs-tmp/Darcs/MonadProgress.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/MonadProgress.hi and b/dist/build/darcs/darcs-tmp/Darcs/MonadProgress.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/MonadProgress.o b/dist/build/darcs/darcs-tmp/Darcs/MonadProgress.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/MonadProgress.o and b/dist/build/darcs/darcs-tmp/Darcs/MonadProgress.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch.o b/dist/build/darcs/darcs-tmp/Darcs/Patch.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Apply.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Apply.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Apply.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Apply.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Apply.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Apply.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Apply.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Apply.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/ApplyMonad.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/ApplyMonad.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/ApplyMonad.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/ApplyMonad.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/ApplyMonad.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/ApplyMonad.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/ApplyMonad.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/ApplyMonad.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed/Instances.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed/Instances.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed/Instances.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed/Instances.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed/Instances.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed/Instances.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed/Instances.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Bracketed/Instances.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Bundle.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Bundle.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Bundle.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Bundle.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Bundle.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Bundle.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Bundle.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Bundle.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Choices.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Choices.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Choices.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Choices.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Choices.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Choices.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Choices.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Choices.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Commute.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Commute.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Commute.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Commute.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Commute.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Commute.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Commute.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Commute.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Conflict.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Conflict.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Conflict.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Conflict.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Conflict.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Conflict.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Conflict.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Conflict.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/ConflictMarking.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/ConflictMarking.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/ConflictMarking.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/ConflictMarking.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/ConflictMarking.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/ConflictMarking.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/ConflictMarking.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/ConflictMarking.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Depends.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Depends.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Depends.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Depends.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Depends.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Depends.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Depends.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Depends.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Dummy.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Dummy.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Dummy.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Dummy.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Dummy.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Dummy.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Dummy.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Dummy.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Effect.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Effect.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Effect.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Effect.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Effect.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Effect.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Effect.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Effect.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/FileHunk.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/FileHunk.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/FileHunk.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/FileHunk.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/FileHunk.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/FileHunk.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/FileHunk.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/FileHunk.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/FileName.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/FileName.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/FileName.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/FileName.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/FileName.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/FileName.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/FileName.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/FileName.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Format.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Format.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Format.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Format.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Format.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Format.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Format.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Format.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Info.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Info.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Info.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Info.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Info.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Info.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Info.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Info.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Inspect.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Inspect.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Inspect.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Inspect.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Inspect.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Inspect.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Inspect.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Inspect.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Invert.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Invert.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Invert.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Invert.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Invert.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Invert.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Invert.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Invert.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Match.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Match.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Match.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Match.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Match.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Match.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Match.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Match.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/MatchData.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/MatchData.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/MatchData.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/MatchData.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/MatchData.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/MatchData.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/MatchData.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/MatchData.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Merge.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Merge.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Merge.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Merge.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Merge.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Merge.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Merge.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Merge.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Named.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Named.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Named.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Named.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Named.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Named.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Named.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Named.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/OldDate.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/OldDate.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/OldDate.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/OldDate.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/OldDate.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/OldDate.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/OldDate.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/OldDate.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/PatchInfoAnd.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/PatchInfoAnd.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/PatchInfoAnd.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/PatchInfoAnd.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/PatchInfoAnd.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/PatchInfoAnd.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/PatchInfoAnd.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/PatchInfoAnd.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy/Instances.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy/Instances.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy/Instances.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy/Instances.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy/Instances.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy/Instances.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy/Instances.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Patchy/Instances.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Permutations.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Permutations.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Permutations.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Permutations.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Permutations.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Permutations.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Permutations.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Permutations.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/Class.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/Class.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/Class.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/Class.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/Class.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/Class.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/Class.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/Class.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Apply.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Apply.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Apply.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Apply.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Apply.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Apply.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Apply.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Apply.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Coalesce.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Coalesce.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Coalesce.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Coalesce.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Coalesce.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Coalesce.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Coalesce.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Coalesce.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Commute.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Commute.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Commute.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Commute.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Commute.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Commute.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Commute.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Commute.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Core.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Core.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Core.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Core.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Core.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Core.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Core.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Core.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Details.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Details.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Details.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Details.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Details.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Details.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Details.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Details.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Read.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Read.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Read.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Read.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Read.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Read.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Read.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Read.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Show.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Show.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Show.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Show.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Show.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Show.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Show.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V1/Show.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V3/ObjectMap.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V3/ObjectMap.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V3/ObjectMap.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V3/ObjectMap.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V3/ObjectMap.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Prim/V3/ObjectMap.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Read.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Read.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Read.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Read.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Read.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Read.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Read.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Read.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/ReadMonads.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/ReadMonads.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/ReadMonads.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/ReadMonads.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/ReadMonads.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/ReadMonads.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/ReadMonads.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/ReadMonads.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/RegChars.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/RegChars.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/RegChars.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/RegChars.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/RegChars.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/RegChars.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/RegChars.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/RegChars.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Repair.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Repair.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Repair.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Repair.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Repair.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Repair.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Repair.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Repair.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/RepoPatch.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/RepoPatch.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/RepoPatch.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/RepoPatch.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/RepoPatch.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/RepoPatch.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/RepoPatch.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/RepoPatch.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Set.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Set.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Set.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Set.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Set.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Set.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Set.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Set.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Show.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Show.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Show.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Show.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Show.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Show.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Show.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Show.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Split.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Split.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Split.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Split.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Split.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Split.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Split.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Split.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Summary.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Summary.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Summary.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Summary.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Summary.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Summary.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Summary.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Summary.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/SummaryData.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/SummaryData.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/SummaryData.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/SummaryData.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/SummaryData.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/SummaryData.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/SummaryData.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/SummaryData.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/TokenReplace.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/TokenReplace.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/TokenReplace.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/TokenReplace.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/TokenReplace.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/TokenReplace.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/TokenReplace.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/TokenReplace.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/TouchesFiles.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/TouchesFiles.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/TouchesFiles.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/TouchesFiles.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/TouchesFiles.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/TouchesFiles.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/TouchesFiles.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/TouchesFiles.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Apply.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Apply.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Apply.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Apply.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Apply.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Apply.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Apply.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Apply.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Commute.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Commute.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Commute.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Commute.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Commute.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Commute.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Commute.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Commute.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Core.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Core.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Core.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Core.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Core.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Core.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Core.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Core.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Read.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Read.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Read.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Read.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Read.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Read.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Read.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Read.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Show.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Show.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Show.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Show.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Show.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Show.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Show.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Show.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Viewing.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Viewing.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Viewing.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Viewing.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Viewing.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Viewing.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Viewing.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V1/Viewing.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V2.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/V2.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V2.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V2.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V2.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/V2.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V2.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V2.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Non.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Non.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Non.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Non.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Non.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Non.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Non.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Non.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Real.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Real.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Real.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Real.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Real.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Real.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Real.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/V2/Real.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Viewing.hi b/dist/build/darcs/darcs-tmp/Darcs/Patch/Viewing.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Viewing.hi and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Viewing.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Patch/Viewing.o b/dist/build/darcs/darcs-tmp/Darcs/Patch/Viewing.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Patch/Viewing.o and b/dist/build/darcs/darcs-tmp/Darcs/Patch/Viewing.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/PrintPatch.hi b/dist/build/darcs/darcs-tmp/Darcs/PrintPatch.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/PrintPatch.hi and b/dist/build/darcs/darcs-tmp/Darcs/PrintPatch.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/PrintPatch.o b/dist/build/darcs/darcs-tmp/Darcs/PrintPatch.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/PrintPatch.o and b/dist/build/darcs/darcs-tmp/Darcs/PrintPatch.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/ProgressPatches.hi b/dist/build/darcs/darcs-tmp/Darcs/ProgressPatches.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/ProgressPatches.hi and b/dist/build/darcs/darcs-tmp/Darcs/ProgressPatches.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/ProgressPatches.o b/dist/build/darcs/darcs-tmp/Darcs/ProgressPatches.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/ProgressPatches.o and b/dist/build/darcs/darcs-tmp/Darcs/ProgressPatches.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/RemoteApply.hi b/dist/build/darcs/darcs-tmp/Darcs/RemoteApply.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/RemoteApply.hi and b/dist/build/darcs/darcs-tmp/Darcs/RemoteApply.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/RemoteApply.o b/dist/build/darcs/darcs-tmp/Darcs/RemoteApply.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/RemoteApply.o and b/dist/build/darcs/darcs-tmp/Darcs/RemoteApply.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/RepoPath.hi b/dist/build/darcs/darcs-tmp/Darcs/RepoPath.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/RepoPath.hi and b/dist/build/darcs/darcs-tmp/Darcs/RepoPath.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/RepoPath.o b/dist/build/darcs/darcs-tmp/Darcs/RepoPath.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/RepoPath.o and b/dist/build/darcs/darcs-tmp/Darcs/RepoPath.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository.o b/dist/build/darcs/darcs-tmp/Darcs/Repository.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/ApplyPatches.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/ApplyPatches.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/ApplyPatches.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/ApplyPatches.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/ApplyPatches.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/ApplyPatches.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/ApplyPatches.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/ApplyPatches.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Cache.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/Cache.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Cache.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Cache.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Cache.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/Cache.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Cache.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Cache.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Format.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/Format.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Format.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Format.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Format.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/Format.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Format.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Format.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedIO.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedIO.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedIO.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedIO.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedIO.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedIO.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedIO.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedIO.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedRepo.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedRepo.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedRepo.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedRepo.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedRepo.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedRepo.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedRepo.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/HashedRepo.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Internal.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/Internal.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Internal.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Internal.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Internal.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/Internal.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Internal.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Internal.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/InternalTypes.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/InternalTypes.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/InternalTypes.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/InternalTypes.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/InternalTypes.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/InternalTypes.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/InternalTypes.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/InternalTypes.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/LowLevel.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/LowLevel.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/LowLevel.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/LowLevel.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/LowLevel.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/LowLevel.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/LowLevel.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/LowLevel.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Merge.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/Merge.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Merge.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Merge.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Merge.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/Merge.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Merge.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Merge.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Motd.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/Motd.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Motd.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Motd.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Motd.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/Motd.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Motd.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Motd.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Old.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/Old.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Old.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Old.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Old.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/Old.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Old.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Old.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Prefs.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/Prefs.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Prefs.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Prefs.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Prefs.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/Prefs.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Prefs.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Prefs.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Repair.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/Repair.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Repair.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Repair.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/Repair.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/Repair.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/Repair.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/Repair.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/State.hi b/dist/build/darcs/darcs-tmp/Darcs/Repository/State.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/State.hi and b/dist/build/darcs/darcs-tmp/Darcs/Repository/State.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Repository/State.o b/dist/build/darcs/darcs-tmp/Darcs/Repository/State.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Repository/State.o and b/dist/build/darcs/darcs-tmp/Darcs/Repository/State.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Resolution.hi b/dist/build/darcs/darcs-tmp/Darcs/Resolution.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Resolution.hi and b/dist/build/darcs/darcs-tmp/Darcs/Resolution.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Resolution.o b/dist/build/darcs/darcs-tmp/Darcs/Resolution.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Resolution.o and b/dist/build/darcs/darcs-tmp/Darcs/Resolution.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/RunCommand.hi b/dist/build/darcs/darcs-tmp/Darcs/RunCommand.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/RunCommand.hi and b/dist/build/darcs/darcs-tmp/Darcs/RunCommand.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/RunCommand.o b/dist/build/darcs/darcs-tmp/Darcs/RunCommand.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/RunCommand.o and b/dist/build/darcs/darcs-tmp/Darcs/RunCommand.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/SelectChanges.hi b/dist/build/darcs/darcs-tmp/Darcs/SelectChanges.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/SelectChanges.hi and b/dist/build/darcs/darcs-tmp/Darcs/SelectChanges.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/SelectChanges.o b/dist/build/darcs/darcs-tmp/Darcs/SelectChanges.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/SelectChanges.o and b/dist/build/darcs/darcs-tmp/Darcs/SelectChanges.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/SignalHandler.hi b/dist/build/darcs/darcs-tmp/Darcs/SignalHandler.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/SignalHandler.hi and b/dist/build/darcs/darcs-tmp/Darcs/SignalHandler.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/SignalHandler.o b/dist/build/darcs/darcs-tmp/Darcs/SignalHandler.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/SignalHandler.o and b/dist/build/darcs/darcs-tmp/Darcs/SignalHandler.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Ssh.hi b/dist/build/darcs/darcs-tmp/Darcs/Ssh.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs/darcs-tmp/Darcs/Ssh.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Ssh.o b/dist/build/darcs/darcs-tmp/Darcs/Ssh.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs/darcs-tmp/Darcs/Ssh.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Test.hi b/dist/build/darcs/darcs-tmp/Darcs/Test.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Test.hi and b/dist/build/darcs/darcs-tmp/Darcs/Test.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Test.o b/dist/build/darcs/darcs-tmp/Darcs/Test.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Test.o and b/dist/build/darcs/darcs-tmp/Darcs/Test.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/TheCommands.hi b/dist/build/darcs/darcs-tmp/Darcs/TheCommands.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/TheCommands.hi and b/dist/build/darcs/darcs-tmp/Darcs/TheCommands.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/TheCommands.o b/dist/build/darcs/darcs-tmp/Darcs/TheCommands.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/TheCommands.o and b/dist/build/darcs/darcs-tmp/Darcs/TheCommands.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/URL.hi b/dist/build/darcs/darcs-tmp/Darcs/URL.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/URL.hi and b/dist/build/darcs/darcs-tmp/Darcs/URL.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/URL.o b/dist/build/darcs/darcs-tmp/Darcs/URL.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/URL.o and b/dist/build/darcs/darcs-tmp/Darcs/URL.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Utils.hi b/dist/build/darcs/darcs-tmp/Darcs/Utils.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Utils.hi and b/dist/build/darcs/darcs-tmp/Darcs/Utils.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Utils.o b/dist/build/darcs/darcs-tmp/Darcs/Utils.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Utils.o and b/dist/build/darcs/darcs-tmp/Darcs/Utils.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Eq.hi b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Eq.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Eq.hi and b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Eq.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Eq.o b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Eq.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Eq.o and b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Eq.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Ordered.hi b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Ordered.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Ordered.hi and b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Ordered.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Ordered.o b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Ordered.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Ordered.o and b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Ordered.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Sealed.hi b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Sealed.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Sealed.hi and b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Sealed.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Sealed.o b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Sealed.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Sealed.o and b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Sealed.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Show.hi b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Show.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Show.hi and b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Show.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Show.o b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Show.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Show.o and b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Show.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Unsafe.hi b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Unsafe.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Unsafe.hi and b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Unsafe.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Unsafe.o b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Unsafe.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Unsafe.o and b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/Unsafe.o differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/WZipper.hi b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/WZipper.hi
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/WZipper.hi and b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/WZipper.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/WZipper.o b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/WZipper.o
Binary files a/dist/build/darcs/darcs-tmp/Darcs/Witnesses/WZipper.o and b/dist/build/darcs/darcs-tmp/Darcs/Witnesses/WZipper.o differ
diff --git a/dist/build/darcs/darcs-tmp/DateMatcher.hi b/dist/build/darcs/darcs-tmp/DateMatcher.hi
Binary files a/dist/build/darcs/darcs-tmp/DateMatcher.hi and b/dist/build/darcs/darcs-tmp/DateMatcher.hi differ
diff --git a/dist/build/darcs/darcs-tmp/DateMatcher.o b/dist/build/darcs/darcs-tmp/DateMatcher.o
Binary files a/dist/build/darcs/darcs-tmp/DateMatcher.o and b/dist/build/darcs/darcs-tmp/DateMatcher.o differ
diff --git a/dist/build/darcs/darcs-tmp/English.hi b/dist/build/darcs/darcs-tmp/English.hi
Binary files a/dist/build/darcs/darcs-tmp/English.hi and b/dist/build/darcs/darcs-tmp/English.hi differ
diff --git a/dist/build/darcs/darcs-tmp/English.o b/dist/build/darcs/darcs-tmp/English.o
Binary files a/dist/build/darcs/darcs-tmp/English.o and b/dist/build/darcs/darcs-tmp/English.o differ
diff --git a/dist/build/darcs/darcs-tmp/Exec.hi b/dist/build/darcs/darcs-tmp/Exec.hi
Binary files a/dist/build/darcs/darcs-tmp/Exec.hi and b/dist/build/darcs/darcs-tmp/Exec.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Exec.o b/dist/build/darcs/darcs-tmp/Exec.o
Binary files a/dist/build/darcs/darcs-tmp/Exec.o and b/dist/build/darcs/darcs-tmp/Exec.o differ
diff --git a/dist/build/darcs/darcs-tmp/HTTP.hi b/dist/build/darcs/darcs-tmp/HTTP.hi
deleted file mode 100644
Binary files a/dist/build/darcs/darcs-tmp/HTTP.hi and /dev/null differ
diff --git a/dist/build/darcs/darcs-tmp/HTTP.o b/dist/build/darcs/darcs-tmp/HTTP.o
deleted file mode 100644
Binary files a/dist/build/darcs/darcs-tmp/HTTP.o and /dev/null differ
diff --git a/dist/build/darcs/darcs-tmp/IsoDate.hi b/dist/build/darcs/darcs-tmp/IsoDate.hi
Binary files a/dist/build/darcs/darcs-tmp/IsoDate.hi and b/dist/build/darcs/darcs-tmp/IsoDate.hi differ
diff --git a/dist/build/darcs/darcs-tmp/IsoDate.o b/dist/build/darcs/darcs-tmp/IsoDate.o
Binary files a/dist/build/darcs/darcs-tmp/IsoDate.o and b/dist/build/darcs/darcs-tmp/IsoDate.o differ
diff --git a/dist/build/darcs/darcs-tmp/Lcs.hi b/dist/build/darcs/darcs-tmp/Lcs.hi
Binary files a/dist/build/darcs/darcs-tmp/Lcs.hi and b/dist/build/darcs/darcs-tmp/Lcs.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Lcs.o b/dist/build/darcs/darcs-tmp/Lcs.o
Binary files a/dist/build/darcs/darcs-tmp/Lcs.o and b/dist/build/darcs/darcs-tmp/Lcs.o differ
diff --git a/dist/build/darcs/darcs-tmp/Main.hi b/dist/build/darcs/darcs-tmp/Main.hi
Binary files a/dist/build/darcs/darcs-tmp/Main.hi and b/dist/build/darcs/darcs-tmp/Main.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Main.o b/dist/build/darcs/darcs-tmp/Main.o
Binary files a/dist/build/darcs/darcs-tmp/Main.o and b/dist/build/darcs/darcs-tmp/Main.o differ
diff --git a/dist/build/darcs/darcs-tmp/Preproc.hi b/dist/build/darcs/darcs-tmp/Preproc.hi
Binary files a/dist/build/darcs/darcs-tmp/Preproc.hi and b/dist/build/darcs/darcs-tmp/Preproc.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Preproc.o b/dist/build/darcs/darcs-tmp/Preproc.o
Binary files a/dist/build/darcs/darcs-tmp/Preproc.o and b/dist/build/darcs/darcs-tmp/Preproc.o differ
diff --git a/dist/build/darcs/darcs-tmp/Printer.hi b/dist/build/darcs/darcs-tmp/Printer.hi
Binary files a/dist/build/darcs/darcs-tmp/Printer.hi and b/dist/build/darcs/darcs-tmp/Printer.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Printer.o b/dist/build/darcs/darcs-tmp/Printer.o
Binary files a/dist/build/darcs/darcs-tmp/Printer.o and b/dist/build/darcs/darcs-tmp/Printer.o differ
diff --git a/dist/build/darcs/darcs-tmp/Progress.hi b/dist/build/darcs/darcs-tmp/Progress.hi
Binary files a/dist/build/darcs/darcs-tmp/Progress.hi and b/dist/build/darcs/darcs-tmp/Progress.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Progress.o b/dist/build/darcs/darcs-tmp/Progress.o
Binary files a/dist/build/darcs/darcs-tmp/Progress.o and b/dist/build/darcs/darcs-tmp/Progress.o differ
diff --git a/dist/build/darcs/darcs-tmp/Ratified.hi b/dist/build/darcs/darcs-tmp/Ratified.hi
Binary files a/dist/build/darcs/darcs-tmp/Ratified.hi and b/dist/build/darcs/darcs-tmp/Ratified.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Ratified.o b/dist/build/darcs/darcs-tmp/Ratified.o
Binary files a/dist/build/darcs/darcs-tmp/Ratified.o and b/dist/build/darcs/darcs-tmp/Ratified.o differ
diff --git a/dist/build/darcs/darcs-tmp/SHA1.hi b/dist/build/darcs/darcs-tmp/SHA1.hi
Binary files a/dist/build/darcs/darcs-tmp/SHA1.hi and b/dist/build/darcs/darcs-tmp/SHA1.hi differ
diff --git a/dist/build/darcs/darcs-tmp/SHA1.o b/dist/build/darcs/darcs-tmp/SHA1.o
Binary files a/dist/build/darcs/darcs-tmp/SHA1.o and b/dist/build/darcs/darcs-tmp/SHA1.o differ
diff --git a/dist/build/darcs/darcs-tmp/Ssh.hi b/dist/build/darcs/darcs-tmp/Ssh.hi
deleted file mode 100644
Binary files a/dist/build/darcs/darcs-tmp/Ssh.hi and /dev/null differ
diff --git a/dist/build/darcs/darcs-tmp/Ssh.o b/dist/build/darcs/darcs-tmp/Ssh.o
deleted file mode 100644
Binary files a/dist/build/darcs/darcs-tmp/Ssh.o and /dev/null differ
diff --git a/dist/build/darcs/darcs-tmp/URL.hi b/dist/build/darcs/darcs-tmp/URL.hi
Binary files a/dist/build/darcs/darcs-tmp/URL.hi and b/dist/build/darcs/darcs-tmp/URL.hi differ
diff --git a/dist/build/darcs/darcs-tmp/URL.o b/dist/build/darcs/darcs-tmp/URL.o
Binary files a/dist/build/darcs/darcs-tmp/URL.o and b/dist/build/darcs/darcs-tmp/URL.o differ
diff --git a/dist/build/darcs/darcs-tmp/URL/Curl.hi b/dist/build/darcs/darcs-tmp/URL/Curl.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs/darcs-tmp/URL/Curl.hi differ
diff --git a/dist/build/darcs/darcs-tmp/URL/Curl.o b/dist/build/darcs/darcs-tmp/URL/Curl.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs/darcs-tmp/URL/Curl.o differ
diff --git a/dist/build/darcs/darcs-tmp/URL/HTTP.hi b/dist/build/darcs/darcs-tmp/URL/HTTP.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs/darcs-tmp/URL/HTTP.hi differ
diff --git a/dist/build/darcs/darcs-tmp/URL/HTTP.o b/dist/build/darcs/darcs-tmp/URL/HTTP.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs/darcs-tmp/URL/HTTP.o differ
diff --git a/dist/build/darcs/darcs-tmp/URL/Request.hi b/dist/build/darcs/darcs-tmp/URL/Request.hi
new file mode 100644
Binary files /dev/null and b/dist/build/darcs/darcs-tmp/URL/Request.hi differ
diff --git a/dist/build/darcs/darcs-tmp/URL/Request.o b/dist/build/darcs/darcs-tmp/URL/Request.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs/darcs-tmp/URL/Request.o differ
diff --git a/dist/build/darcs/darcs-tmp/Version.hi b/dist/build/darcs/darcs-tmp/Version.hi
Binary files a/dist/build/darcs/darcs-tmp/Version.hi and b/dist/build/darcs/darcs-tmp/Version.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Version.o b/dist/build/darcs/darcs-tmp/Version.o
Binary files a/dist/build/darcs/darcs-tmp/Version.o and b/dist/build/darcs/darcs-tmp/Version.o differ
diff --git a/dist/build/darcs/darcs-tmp/Workaround.hi b/dist/build/darcs/darcs-tmp/Workaround.hi
Binary files a/dist/build/darcs/darcs-tmp/Workaround.hi and b/dist/build/darcs/darcs-tmp/Workaround.hi differ
diff --git a/dist/build/darcs/darcs-tmp/Workaround.o b/dist/build/darcs/darcs-tmp/Workaround.o
Binary files a/dist/build/darcs/darcs-tmp/Workaround.o and b/dist/build/darcs/darcs-tmp/Workaround.o differ
diff --git a/dist/build/darcs/darcs-tmp/src/Crypt/sha2.o b/dist/build/darcs/darcs-tmp/src/Crypt/sha2.o
Binary files a/dist/build/darcs/darcs-tmp/src/Crypt/sha2.o and b/dist/build/darcs/darcs-tmp/src/Crypt/sha2.o differ
diff --git a/dist/build/darcs/darcs-tmp/src/atomic_create.o b/dist/build/darcs/darcs-tmp/src/atomic_create.o
Binary files a/dist/build/darcs/darcs-tmp/src/atomic_create.o and b/dist/build/darcs/darcs-tmp/src/atomic_create.o differ
diff --git a/dist/build/darcs/darcs-tmp/src/fpstring.o b/dist/build/darcs/darcs-tmp/src/fpstring.o
Binary files a/dist/build/darcs/darcs-tmp/src/fpstring.o and b/dist/build/darcs/darcs-tmp/src/fpstring.o differ
diff --git a/dist/build/darcs/darcs-tmp/src/hscurl.o b/dist/build/darcs/darcs-tmp/src/hscurl.o
Binary files a/dist/build/darcs/darcs-tmp/src/hscurl.o and b/dist/build/darcs/darcs-tmp/src/hscurl.o differ
diff --git a/dist/build/darcs/darcs-tmp/src/maybe_relink.o b/dist/build/darcs/darcs-tmp/src/maybe_relink.o
Binary files a/dist/build/darcs/darcs-tmp/src/maybe_relink.o and b/dist/build/darcs/darcs-tmp/src/maybe_relink.o differ
diff --git a/dist/build/darcs/darcs-tmp/src/system_encoding.o b/dist/build/darcs/darcs-tmp/src/system_encoding.o
new file mode 100644
Binary files /dev/null and b/dist/build/darcs/darcs-tmp/src/system_encoding.o differ
diff --git a/dist/build/darcs/darcs-tmp/src/umask.o b/dist/build/darcs/darcs-tmp/src/umask.o
Binary files a/dist/build/darcs/darcs-tmp/src/umask.o and b/dist/build/darcs/darcs-tmp/src/umask.o differ
diff --git a/dist/build/darcs/darcs.1 b/dist/build/darcs/darcs.1
--- a/dist/build/darcs/darcs.1
+++ b/dist/build/darcs/darcs.1
@@ -1,4 +1,4 @@
-.TH DARCS 1 "2.7.98.1 (+ 7 patches)"
+.TH DARCS 1 "2.7.98.2 (beta 2)"
 .SH NAME
 darcs \- an advanced revision control system
 .SH SYNOPSIS
diff --git a/dist/build/libHSdarcs-beta-2.7.98.1.a b/dist/build/libHSdarcs-beta-2.7.98.1.a
deleted file mode 100644
# file too large to diff: dist/build/libHSdarcs-beta-2.7.98.1.a
diff --git a/dist/build/libHSdarcs-beta-2.7.98.2.a b/dist/build/libHSdarcs-beta-2.7.98.2.a
new file mode 100644
# file too large to diff: dist/build/libHSdarcs-beta-2.7.98.2.a
diff --git a/dist/build/src/Crypt/sha2.o b/dist/build/src/Crypt/sha2.o
Binary files a/dist/build/src/Crypt/sha2.o and b/dist/build/src/Crypt/sha2.o differ
diff --git a/dist/build/src/atomic_create.o b/dist/build/src/atomic_create.o
Binary files a/dist/build/src/atomic_create.o and b/dist/build/src/atomic_create.o differ
diff --git a/dist/build/src/fpstring.o b/dist/build/src/fpstring.o
Binary files a/dist/build/src/fpstring.o and b/dist/build/src/fpstring.o differ
diff --git a/dist/build/src/hscurl.o b/dist/build/src/hscurl.o
Binary files a/dist/build/src/hscurl.o and b/dist/build/src/hscurl.o differ
diff --git a/dist/build/src/maybe_relink.o b/dist/build/src/maybe_relink.o
Binary files a/dist/build/src/maybe_relink.o and b/dist/build/src/maybe_relink.o differ
diff --git a/dist/build/src/system_encoding.o b/dist/build/src/system_encoding.o
new file mode 100644
Binary files /dev/null and b/dist/build/src/system_encoding.o differ
diff --git a/dist/build/src/umask.o b/dist/build/src/umask.o
Binary files a/dist/build/src/umask.o and b/dist/build/src/umask.o differ
diff --git a/dist/package.conf.inplace b/dist/package.conf.inplace
--- a/dist/package.conf.inplace
+++ b/dist/package.conf.inplace
@@ -1,2 +1,2 @@
-[InstalledPackageInfo {installedPackageId = InstalledPackageId "darcs-beta-2.7.98.1-inplace", sourcePackageId = PackageIdentifier {pkgName = PackageName "darcs-beta", pkgVersion = Version {versionBranch = [2,7,98,1], versionTags = []}}, license = GPL Nothing, copyright = "", maintainer = "<darcs-users@darcs.net>", author = "David Roundy <droundy@darcs.net>, <darcs-users@darcs.net>", stability = "Experimental", homepage = "http://darcs.net/", pkgUrl = "", description = "Darcs is a free, open source revision control\nsystem. It is:\n\n* Distributed: Every user has access to the full\ncommand set, removing boundaries between server and\nclient or committer and non-committers.\n\n* Interactive: Darcs is easy to learn and efficient to\nuse because it asks you questions in response to\nsimple commands, giving you choices in your work\nflow. You can choose to record one change in a file,\nwhile ignoring another. As you update from upstream,\nyou can review each patch name, even the full \"diff\"\nfor interesting patches.\n\n* Smart: Originally developed by physicist David\nRoundy, darcs is based on a unique algebra of\npatches.\n\nThis smartness lets you respond to changing demands\nin ways that would otherwise not be possible. Learn\nmore about spontaneous branches with darcs.", category = "Development", exposed = True, exposedModules = ["CommandLine","Crypt.SHA256","Darcs.Annotate","Darcs.ArgumentDefaults","Darcs.Arguments","Darcs.Bug","Darcs.ColorPrinter","Darcs.Commands","Darcs.Commands.Add","Darcs.Commands.AmendRecord","Darcs.Commands.Annotate","Darcs.Commands.Apply","Darcs.CommandsAux","Darcs.Commands.Changes","Darcs.Commands.Check","Darcs.Commands.Convert","Darcs.Commands.Diff","Darcs.Commands.Dist","Darcs.Commands.Get","Darcs.Commands.GZCRCs","Darcs.Commands.Help","Darcs.Commands.Init","Darcs.Commands.MarkConflicts","Darcs.Commands.Move","Darcs.Commands.Optimize","Darcs.Commands.Pull","Darcs.Commands.Push","Darcs.Commands.Put","Darcs.Commands.Record","Darcs.Commands.Remove","Darcs.Commands.Replace","Darcs.Commands.Revert","Darcs.Commands.Rollback","Darcs.Commands.Send","Darcs.Commands.SetPref","Darcs.Commands.Show","Darcs.Commands.ShowAuthors","Darcs.Commands.ShowBug","Darcs.Commands.ShowContents","Darcs.Commands.ShowFiles","Darcs.Commands.ShowIndex","Darcs.Commands.ShowRepo","Darcs.Commands.ShowTags","Darcs.Commands.Tag","Darcs.Commands.TrackDown","Darcs.Commands.TransferMode","Darcs.Commands.Util","Darcs.Commands.Unrecord","Darcs.Commands.Unrevert","Darcs.Commands.WhatsNew","Darcs.Compat","Darcs.Diff","Darcs.Email","Darcs.External","Darcs.Flags","Darcs.Global","Darcs.IO","Darcs.Lock","Darcs.Match","Darcs.MonadProgress","Darcs.Patch","Darcs.Patch.Apply","Darcs.Patch.ApplyMonad","Darcs.Patch.Bracketed","Darcs.Patch.Bracketed.Instances","Darcs.Patch.Bundle","Darcs.Patch.Choices","Darcs.Patch.Commute","Darcs.Patch.Conflict","Darcs.Patch.ConflictMarking","Darcs.Patch.Depends","Darcs.Patch.Dummy","Darcs.Patch.Effect","Darcs.Patch.FileName","Darcs.Patch.FileHunk","Darcs.Patch.Format","Darcs.Patch.Info","Darcs.Patch.Inspect","Darcs.Patch.Invert","Darcs.Patch.Match","Darcs.Patch.MatchData","Darcs.Patch.Merge","Darcs.Patch.Named","Darcs.Patch.OldDate","Darcs.Patch.PatchInfoAnd","Darcs.Patch.Patchy","Darcs.Patch.Patchy.Instances","Darcs.Patch.Permutations","Darcs.Patch.Prim","Darcs.Patch.Prim.Class","Darcs.Patch.Prim.V1","Darcs.Patch.Prim.V1.Apply","Darcs.Patch.Prim.V1.Coalesce","Darcs.Patch.Prim.V1.Commute","Darcs.Patch.Prim.V1.Core","Darcs.Patch.Prim.V1.Details","Darcs.Patch.Prim.V1.Read","Darcs.Patch.Prim.V1.Show","Darcs.Patch.Read","Darcs.Patch.ReadMonads","Darcs.Patch.RegChars","Darcs.Patch.Repair","Darcs.Patch.RepoPatch","Darcs.Patch.Set","Darcs.Patch.Show","Darcs.Patch.Split","Darcs.Patch.Summary","Darcs.Patch.SummaryData","Darcs.Patch.TokenReplace","Darcs.Patch.TouchesFiles","Darcs.Patch.Viewing","Darcs.Patch.V1","Darcs.Patch.V1.Apply","Darcs.Patch.V1.Commute","Darcs.Patch.V1.Core","Darcs.Patch.V1.Read","Darcs.Patch.V1.Show","Darcs.Patch.V1.Viewing","Darcs.Patch.V2","Darcs.Patch.V2.Non","Darcs.Patch.V2.Real","Darcs.PrintPatch","Darcs.ProgressPatches","Darcs.RemoteApply","Darcs.RepoPath","Darcs.Repository","Darcs.Repository.ApplyPatches","Darcs.Repository.Cache","Darcs.Repository.Format","Darcs.Repository.HashedIO","Darcs.Repository.HashedRepo","Darcs.Repository.Internal","Darcs.Repository.LowLevel","Darcs.Repository.Merge","Darcs.Repository.InternalTypes","Darcs.Repository.Motd","Darcs.Repository.Old","Darcs.Repository.Prefs","Darcs.Repository.Repair","Darcs.Repository.State","Darcs.Resolution","Darcs.RunCommand","Darcs.SelectChanges","Darcs.SignalHandler","Darcs.Test","Darcs.TheCommands","Darcs.URL","Darcs.Utils","Darcs.Witnesses.Eq","Darcs.Witnesses.Ordered","Darcs.Witnesses.Sealed","Darcs.Witnesses.Show","Darcs.Witnesses.Unsafe","Darcs.Witnesses.WZipper","DateMatcher","English","Exec","ByteStringUtils","HTTP","IsoDate","Lcs","Printer","Progress","Ratified","SHA1","Ssh","URL","Workaround"], hiddenModules = ["Version"], importDirs = ["/tmp/darcs-beta-2.7.98.1/dist/build"], libraryDirs = ["/tmp/darcs-beta-2.7.98.1/dist/build"], hsLibraries = ["HSdarcs-beta-2.7.98.1"], extraLibraries = ["curl"], extraGHCiLibraries = [], includeDirs = ["/tmp/darcs-beta-2.7.98.1/src"], includes = ["curl/curl.h"], depends = [InstalledPackageId "HTTP-4000.1.1-e1c3272cf0835ac9d10671ed8dc862f9",InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageId "hashed-storage-0.5.7-f2baae72d60d89cab6d2b5facd274d47",InstalledPackageId "haskeline-0.6.4.0-ea83f091fcdad61446c62afc5c94a9ed",InstalledPackageId "html-1.0.1.2-0cdd616c514cf10f5323f121a96991b6",InstalledPackageId "mmap-0.5.7-127e379f104e2b945de5325ba3158467",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",InstalledPackageId "network-2.3.0.2-824dddd7e2ce0e065568730d1c080c4a",InstalledPackageId "old-time-1.0.0.6-7f15fd4b960098b2776b8c05bc17519f",InstalledPackageId "parsec-3.1.1-33474162d2bbd21ea1e4f1e3830243d8",InstalledPackageId "process-1.0.1.5-da4848a2eec47420cd09fe9edba7e83c",InstalledPackageId "random-1.0.0.3-7511feaba03eecc22356464da8976c7e",InstalledPackageId "regex-compat-0.95.1-3e607bc84f3c3925033bb247b8ebab65",InstalledPackageId "tar-0.3.1.0-e78ec4eae84b755f8263c8666140ed0b",InstalledPackageId "terminfo-0.3.1.3-d898a3b030f2d808d2a44c5ff0e2a0e1",InstalledPackageId "text-0.11.0.6-139d7472dd2398472c7d962de013c741",InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff",InstalledPackageId "vector-0.7.0.1-f3d66d9edbfc37118398d6cdca0ca5ee",InstalledPackageId "zlib-0.5.3.1-7e19941cbd00147a79723e25160ffc8b"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/tmp/darcs-beta-2.7.98.1/dist/doc/html/darcs-beta/darcs-beta.haddock"], haddockHTMLs = ["/tmp/darcs-beta-2.7.98.1/dist/doc/html/darcs-beta"]}
+[InstalledPackageInfo {installedPackageId = InstalledPackageId "darcs-beta-2.7.98.2-inplace", sourcePackageId = PackageIdentifier {pkgName = PackageName "darcs-beta", pkgVersion = Version {versionBranch = [2,7,98,2], versionTags = []}}, license = GPL Nothing, copyright = "", maintainer = "<darcs-users@darcs.net>", author = "David Roundy <droundy@darcs.net>, <darcs-users@darcs.net>", stability = "Experimental", homepage = "http://darcs.net/", pkgUrl = "", description = "Darcs is a free, open source revision control\nsystem. It is:\n\n* Distributed: Every user has access to the full\ncommand set, removing boundaries between server and\nclient or committer and non-committers.\n\n* Interactive: Darcs is easy to learn and efficient to\nuse because it asks you questions in response to\nsimple commands, giving you choices in your work\nflow. You can choose to record one change in a file,\nwhile ignoring another. As you update from upstream,\nyou can review each patch name, even the full \"diff\"\nfor interesting patches.\n\n* Smart: Originally developed by physicist David\nRoundy, darcs is based on a unique algebra of\npatches.\n\nThis smartness lets you respond to changing demands\nin ways that would otherwise not be possible. Learn\nmore about spontaneous branches with darcs.", category = "Development", exposed = True, exposedModules = ["CommandLine","Crypt.SHA256","Darcs.Annotate","Darcs.ArgumentDefaults","Darcs.Arguments","Darcs.Bug","Darcs.ColorPrinter","Darcs.Commands","Darcs.Commands.Add","Darcs.Commands.AmendRecord","Darcs.Commands.Annotate","Darcs.Commands.Apply","Darcs.CommandsAux","Darcs.Commands.Changes","Darcs.Commands.Check","Darcs.Commands.Convert","Darcs.Commands.Diff","Darcs.Commands.Dist","Darcs.Commands.Get","Darcs.Commands.GZCRCs","Darcs.Commands.Help","Darcs.Commands.Init","Darcs.Commands.MarkConflicts","Darcs.Commands.Move","Darcs.Commands.Optimize","Darcs.Commands.Pull","Darcs.Commands.Push","Darcs.Commands.Put","Darcs.Commands.Record","Darcs.Commands.Remove","Darcs.Commands.Replace","Darcs.Commands.Revert","Darcs.Commands.Rollback","Darcs.Commands.Send","Darcs.Commands.SetPref","Darcs.Commands.Show","Darcs.Commands.ShowAuthors","Darcs.Commands.ShowBug","Darcs.Commands.ShowContents","Darcs.Commands.ShowFiles","Darcs.Commands.ShowIndex","Darcs.Commands.ShowRepo","Darcs.Commands.ShowTags","Darcs.Commands.Tag","Darcs.Commands.TrackDown","Darcs.Commands.TransferMode","Darcs.Commands.Util","Darcs.Commands.Unrecord","Darcs.Commands.Unrevert","Darcs.Commands.WhatsNew","Darcs.Compat","Darcs.Diff","Darcs.Email","Darcs.External","Darcs.Flags","Darcs.Global","Darcs.IO","Darcs.Lock","Darcs.Match","Darcs.MonadProgress","Darcs.Patch","Darcs.Patch.Apply","Darcs.Patch.ApplyMonad","Darcs.Patch.Bracketed","Darcs.Patch.Bracketed.Instances","Darcs.Patch.Bundle","Darcs.Patch.Choices","Darcs.Patch.Commute","Darcs.Patch.Conflict","Darcs.Patch.ConflictMarking","Darcs.Patch.Depends","Darcs.Patch.Dummy","Darcs.Patch.Effect","Darcs.Patch.FileName","Darcs.Patch.FileHunk","Darcs.Patch.Format","Darcs.Patch.Info","Darcs.Patch.Inspect","Darcs.Patch.Invert","Darcs.Patch.Match","Darcs.Patch.MatchData","Darcs.Patch.Merge","Darcs.Patch.Named","Darcs.Patch.OldDate","Darcs.Patch.PatchInfoAnd","Darcs.Patch.Patchy","Darcs.Patch.Patchy.Instances","Darcs.Patch.Permutations","Darcs.Patch.Prim","Darcs.Patch.Prim.Class","Darcs.Patch.Prim.V1","Darcs.Patch.Prim.V1.Apply","Darcs.Patch.Prim.V1.Coalesce","Darcs.Patch.Prim.V1.Commute","Darcs.Patch.Prim.V1.Core","Darcs.Patch.Prim.V1.Details","Darcs.Patch.Prim.V1.Read","Darcs.Patch.Prim.V1.Show","Darcs.Patch.Prim.V3","Darcs.Patch.Prim.V3.ObjectMap","Darcs.Patch.Prim.V3.Apply","Darcs.Patch.Prim.V3.Coalesce","Darcs.Patch.Prim.V3.Commute","Darcs.Patch.Prim.V3.Core","Darcs.Patch.Prim.V3.Details","Darcs.Patch.Prim.V3.Read","Darcs.Patch.Prim.V3.Show","Darcs.Patch.Read","Darcs.Patch.ReadMonads","Darcs.Patch.RegChars","Darcs.Patch.Repair","Darcs.Patch.RepoPatch","Darcs.Patch.Set","Darcs.Patch.Show","Darcs.Patch.Split","Darcs.Patch.Summary","Darcs.Patch.SummaryData","Darcs.Patch.TokenReplace","Darcs.Patch.TouchesFiles","Darcs.Patch.Viewing","Darcs.Patch.V1","Darcs.Patch.V1.Apply","Darcs.Patch.V1.Commute","Darcs.Patch.V1.Core","Darcs.Patch.V1.Read","Darcs.Patch.V1.Show","Darcs.Patch.V1.Viewing","Darcs.Patch.V2","Darcs.Patch.V2.Non","Darcs.Patch.V2.Real","Darcs.PrintPatch","Darcs.ProgressPatches","Darcs.RemoteApply","Darcs.RepoPath","Darcs.Repository","Darcs.Repository.ApplyPatches","Darcs.Repository.Cache","Darcs.Repository.Format","Darcs.Repository.HashedIO","Darcs.Repository.HashedRepo","Darcs.Repository.Internal","Darcs.Repository.LowLevel","Darcs.Repository.Merge","Darcs.Repository.InternalTypes","Darcs.Repository.Motd","Darcs.Repository.Old","Darcs.Repository.Prefs","Darcs.Repository.Repair","Darcs.Repository.State","Darcs.Resolution","Darcs.RunCommand","Darcs.SelectChanges","Darcs.SignalHandler","Darcs.Ssh","Darcs.Test","Darcs.TheCommands","Darcs.URL","Darcs.Utils","Darcs.Witnesses.Eq","Darcs.Witnesses.Ordered","Darcs.Witnesses.Sealed","Darcs.Witnesses.Show","Darcs.Witnesses.Unsafe","Darcs.Witnesses.WZipper","DateMatcher","English","Exec","ByteStringUtils","IsoDate","Lcs","Printer","Progress","Ratified","SHA1","URL","URL.Request","URL.Curl","URL.HTTP","Workaround"], hiddenModules = ["Version"], importDirs = ["/tmp/darcs-beta-2.7.98.2/dist/build"], libraryDirs = ["/tmp/darcs-beta-2.7.98.2/dist/build"], hsLibraries = ["HSdarcs-beta-2.7.98.2"], extraLibraries = ["curl"], extraGHCiLibraries = [], includeDirs = ["/tmp/darcs-beta-2.7.98.2/src"], includes = ["curl/curl.h"], depends = [InstalledPackageId "HTTP-4000.1.1-7307331a7f052a69bdd620a27081320d",InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageId "hashed-storage-0.5.7-209e6e98f7c10343c7fc1181f2421d8e",InstalledPackageId "haskeline-0.6.4.0-666d47334a8ec9818526b80c10496091",InstalledPackageId "html-1.0.1.2-a494249f98a0f38b1a8db28bc70f8b0b",InstalledPackageId "mmap-0.5.7-a26fcb5c2a07acc22fe29ab256e71f9f",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",InstalledPackageId "network-2.3.0.4-3ac6bb38978a0758e807f7956decb2f2",InstalledPackageId "old-time-1.0.0.6-37d6575186c36059fbc372c289dbddd4",InstalledPackageId "parsec-3.1.1-9ad7689ce68f46e0751207509e882c5b",InstalledPackageId "process-1.0.1.5-4cab1bf0666275ac101dd48c7565b64c",InstalledPackageId "random-1.0.0.3-57524486875e0c4c260dd22788921013",InstalledPackageId "regex-compat-0.95.1-55ae1a721bfd43f57655a2c250a4ba9a",InstalledPackageId "tar-0.3.1.0-40adceea7b7dde44c58982a945493d60",InstalledPackageId "terminfo-0.3.1.3-ac8ae791e59af4b07646e3465163bc35",InstalledPackageId "text-0.11.1.1-ff6d7d9a492863e8bcac7b0b64d124a7",InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1",InstalledPackageId "vector-0.7.1-d0453ff83191033a2912b337e66eb0f7",InstalledPackageId "zlib-0.5.3.1-5fbdf714525b76e0e601c2ffb25f2044"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/tmp/darcs-beta-2.7.98.2/dist/doc/html/darcs-beta/darcs-beta.haddock"], haddockHTMLs = ["/tmp/darcs-beta-2.7.98.2/dist/doc/html/darcs-beta"]}
 ]
diff --git a/dist/setup-config b/dist/setup-config
--- a/dist/setup-config
+++ b/dist/setup-config
@@ -1,2 +1,2 @@
-Saved package config for darcs-beta-2.7.98.1 written by Cabal-1.10.2.0 using ghc-7.0
-LocalBuildInfo {configFlags = ConfigFlags {configPrograms = [], configProgramPaths = [], configProgramArgs = [], configHcFlavor = Flag GHC, configHcPath = NoFlag, configHcPkg = NoFlag, configVanillaLib = Flag True, configProfLib = Flag False, configSharedLib = Flag False, configProfExe = Flag False, configConfigureArgs = [], configOptimization = Flag NormalOptimisation, configProgPrefix = Flag "", configProgSuffix = Flag "", configInstallDirs = InstallDirs {prefix = NoFlag, bindir = NoFlag, libdir = NoFlag, libsubdir = NoFlag, dynlibdir = NoFlag, libexecdir = NoFlag, progdir = NoFlag, includedir = NoFlag, datadir = NoFlag, datasubdir = NoFlag, docdir = NoFlag, mandir = NoFlag, htmldir = NoFlag, haddockdir = NoFlag}, configScratchDir = NoFlag, configExtraLibDirs = [], configExtraIncludeDirs = [], configDistPref = Flag "dist", configVerbosity = Flag Normal, configUserInstall = Flag True, configPackageDB = NoFlag, configGHCiLib = Flag True, configSplitObjs = Flag False, configStripExes = Flag True, configConstraints = [], configConfigurationsFlags = [(FlagName "type-witnesses",True),(FlagName "test",True)], configTests = Flag False}, extraConfigArgs = [], installDirTemplates = InstallDirs {prefix = "/home/florent/.cabal", bindir = "$prefix/bin", libdir = "$prefix/lib", libsubdir = "$pkgid/$compiler", dynlibdir = "$libdir", libexecdir = "$prefix/libexec", progdir = "$libdir/hugs/programs", includedir = "$libdir/$libsubdir/include", datadir = "$prefix/share", datasubdir = "$pkgid", docdir = "$datadir/doc/$pkgid", mandir = "$datadir/man", htmldir = "$docdir/html", haddockdir = "$htmldir"}, compiler = Compiler {compilerId = CompilerId GHC (Version {versionBranch = [7,0,3], versionTags = []}), compilerLanguages = [(Haskell98,"-XHaskell98"),(Haskell2010,"-XHaskell2010")], compilerExtensions = [(UnknownExtension "Haskell98","-XHaskell98"),(UnknownExtension "Haskell2010","-XHaskell2010"),(CPP,"-XCPP"),(UnknownExtension "NoCPP","-XNoCPP"),(PostfixOperators,"-XPostfixOperators"),(UnknownExtension "NoPostfixOperators","-XNoPostfixOperators"),(TupleSections,"-XTupleSections"),(UnknownExtension "NoTupleSections","-XNoTupleSections"),(PatternGuards,"-XPatternGuards"),(UnknownExtension "NoPatternGuards","-XNoPatternGuards"),(UnicodeSyntax,"-XUnicodeSyntax"),(UnknownExtension "NoUnicodeSyntax","-XNoUnicodeSyntax"),(MagicHash,"-XMagicHash"),(UnknownExtension "NoMagicHash","-XNoMagicHash"),(PolymorphicComponents,"-XPolymorphicComponents"),(UnknownExtension "NoPolymorphicComponents","-XNoPolymorphicComponents"),(ExistentialQuantification,"-XExistentialQuantification"),(UnknownExtension "NoExistentialQuantification","-XNoExistentialQuantification"),(KindSignatures,"-XKindSignatures"),(UnknownExtension "NoKindSignatures","-XNoKindSignatures"),(EmptyDataDecls,"-XEmptyDataDecls"),(UnknownExtension "NoEmptyDataDecls","-XNoEmptyDataDecls"),(ParallelListComp,"-XParallelListComp"),(UnknownExtension "NoParallelListComp","-XNoParallelListComp"),(TransformListComp,"-XTransformListComp"),(UnknownExtension "NoTransformListComp","-XNoTransformListComp"),(ForeignFunctionInterface,"-XForeignFunctionInterface"),(UnknownExtension "NoForeignFunctionInterface","-XNoForeignFunctionInterface"),(UnliftedFFITypes,"-XUnliftedFFITypes"),(UnknownExtension "NoUnliftedFFITypes","-XNoUnliftedFFITypes"),(GHCForeignImportPrim,"-XGHCForeignImportPrim"),(UnknownExtension "NoGHCForeignImportPrim","-XNoGHCForeignImportPrim"),(LiberalTypeSynonyms,"-XLiberalTypeSynonyms"),(UnknownExtension "NoLiberalTypeSynonyms","-XNoLiberalTypeSynonyms"),(Rank2Types,"-XRank2Types"),(UnknownExtension "NoRank2Types","-XNoRank2Types"),(RankNTypes,"-XRankNTypes"),(UnknownExtension "NoRankNTypes","-XNoRankNTypes"),(ImpredicativeTypes,"-XImpredicativeTypes"),(UnknownExtension "NoImpredicativeTypes","-XNoImpredicativeTypes"),(TypeOperators,"-XTypeOperators"),(UnknownExtension "NoTypeOperators","-XNoTypeOperators"),(RecursiveDo,"-XRecursiveDo"),(UnknownExtension "NoRecursiveDo","-XNoRecursiveDo"),(DoRec,"-XDoRec"),(UnknownExtension "NoDoRec","-XNoDoRec"),(Arrows,"-XArrows"),(UnknownExtension "NoArrows","-XNoArrows"),(UnknownExtension "PArr","-XPArr"),(UnknownExtension "NoPArr","-XNoPArr"),(TemplateHaskell,"-XTemplateHaskell"),(UnknownExtension "NoTemplateHaskell","-XNoTemplateHaskell"),(QuasiQuotes,"-XQuasiQuotes"),(UnknownExtension "NoQuasiQuotes","-XNoQuasiQuotes"),(Generics,"-XGenerics"),(UnknownExtension "NoGenerics","-XNoGenerics"),(NoImplicitPrelude,"-XNoImplicitPrelude"),(NoImplicitPrelude,"-XNoImplicitPrelude"),(RecordWildCards,"-XRecordWildCards"),(UnknownExtension "NoRecordWildCards","-XNoRecordWildCards"),(NamedFieldPuns,"-XNamedFieldPuns"),(UnknownExtension "NoNamedFieldPuns","-XNoNamedFieldPuns"),(RecordPuns,"-XRecordPuns"),(UnknownExtension "NoRecordPuns","-XNoRecordPuns"),(DisambiguateRecordFields,"-XDisambiguateRecordFields"),(UnknownExtension "NoDisambiguateRecordFields","-XNoDisambiguateRecordFields"),(OverloadedStrings,"-XOverloadedStrings"),(UnknownExtension "NoOverloadedStrings","-XNoOverloadedStrings"),(GADTs,"-XGADTs"),(UnknownExtension "NoGADTs","-XNoGADTs"),(ViewPatterns,"-XViewPatterns"),(UnknownExtension "NoViewPatterns","-XNoViewPatterns"),(TypeFamilies,"-XTypeFamilies"),(UnknownExtension "NoTypeFamilies","-XNoTypeFamilies"),(BangPatterns,"-XBangPatterns"),(UnknownExtension "NoBangPatterns","-XNoBangPatterns"),(NoMonomorphismRestriction,"-XNoMonomorphismRestriction"),(NoMonomorphismRestriction,"-XNoMonomorphismRestriction"),(NPlusKPatterns,"-XNPlusKPatterns"),(UnknownExtension "NoNPlusKPatterns","-XNoNPlusKPatterns"),(DoAndIfThenElse,"-XDoAndIfThenElse"),(UnknownExtension "NoDoAndIfThenElse","-XNoDoAndIfThenElse"),(RebindableSyntax,"-XRebindableSyntax"),(UnknownExtension "NoRebindableSyntax","-XNoRebindableSyntax"),(NoMonoPatBinds,"-XNoMonoPatBinds"),(NoMonoPatBinds,"-XNoMonoPatBinds"),(ExplicitForAll,"-XExplicitForAll"),(UnknownExtension "NoExplicitForAll","-XNoExplicitForAll"),(UnknownExtension "AlternativeLayoutRule","-XAlternativeLayoutRule"),(UnknownExtension "NoAlternativeLayoutRule","-XNoAlternativeLayoutRule"),(UnknownExtension "AlternativeLayoutRuleTransitional","-XAlternativeLayoutRuleTransitional"),(UnknownExtension "NoAlternativeLayoutRuleTransitional","-XNoAlternativeLayoutRuleTransitional"),(DatatypeContexts,"-XDatatypeContexts"),(UnknownExtension "NoDatatypeContexts","-XNoDatatypeContexts"),(MonoLocalBinds,"-XMonoLocalBinds"),(UnknownExtension "NoMonoLocalBinds","-XNoMonoLocalBinds"),(RelaxedPolyRec,"-XRelaxedPolyRec"),(UnknownExtension "NoRelaxedPolyRec","-XNoRelaxedPolyRec"),(ExtendedDefaultRules,"-XExtendedDefaultRules"),(UnknownExtension "NoExtendedDefaultRules","-XNoExtendedDefaultRules"),(ImplicitParams,"-XImplicitParams"),(UnknownExtension "NoImplicitParams","-XNoImplicitParams"),(ScopedTypeVariables,"-XScopedTypeVariables"),(UnknownExtension "NoScopedTypeVariables","-XNoScopedTypeVariables"),(PatternSignatures,"-XPatternSignatures"),(UnknownExtension "NoPatternSignatures","-XNoPatternSignatures"),(UnboxedTuples,"-XUnboxedTuples"),(UnknownExtension "NoUnboxedTuples","-XNoUnboxedTuples"),(StandaloneDeriving,"-XStandaloneDeriving"),(UnknownExtension "NoStandaloneDeriving","-XNoStandaloneDeriving"),(DeriveDataTypeable,"-XDeriveDataTypeable"),(UnknownExtension "NoDeriveDataTypeable","-XNoDeriveDataTypeable"),(DeriveFunctor,"-XDeriveFunctor"),(UnknownExtension "NoDeriveFunctor","-XNoDeriveFunctor"),(DeriveTraversable,"-XDeriveTraversable"),(UnknownExtension "NoDeriveTraversable","-XNoDeriveTraversable"),(DeriveFoldable,"-XDeriveFoldable"),(UnknownExtension "NoDeriveFoldable","-XNoDeriveFoldable"),(TypeSynonymInstances,"-XTypeSynonymInstances"),(UnknownExtension "NoTypeSynonymInstances","-XNoTypeSynonymInstances"),(FlexibleContexts,"-XFlexibleContexts"),(UnknownExtension "NoFlexibleContexts","-XNoFlexibleContexts"),(FlexibleInstances,"-XFlexibleInstances"),(UnknownExtension "NoFlexibleInstances","-XNoFlexibleInstances"),(ConstrainedClassMethods,"-XConstrainedClassMethods"),(UnknownExtension "NoConstrainedClassMethods","-XNoConstrainedClassMethods"),(MultiParamTypeClasses,"-XMultiParamTypeClasses"),(UnknownExtension "NoMultiParamTypeClasses","-XNoMultiParamTypeClasses"),(FunctionalDependencies,"-XFunctionalDependencies"),(UnknownExtension "NoFunctionalDependencies","-XNoFunctionalDependencies"),(GeneralizedNewtypeDeriving,"-XGeneralizedNewtypeDeriving"),(UnknownExtension "NoGeneralizedNewtypeDeriving","-XNoGeneralizedNewtypeDeriving"),(OverlappingInstances,"-XOverlappingInstances"),(UnknownExtension "NoOverlappingInstances","-XNoOverlappingInstances"),(UndecidableInstances,"-XUndecidableInstances"),(UnknownExtension "NoUndecidableInstances","-XNoUndecidableInstances"),(IncoherentInstances,"-XIncoherentInstances"),(UnknownExtension "NoIncoherentInstances","-XNoIncoherentInstances"),(PackageImports,"-XPackageImports"),(UnknownExtension "NoPackageImports","-XNoPackageImports"),(NewQualifiedOperators,"-XNewQualifiedOperators"),(UnknownExtension "NoNewQualifiedOperators","-XNoNewQualifiedOperators")]}, buildDir = "dist/build", scratchDir = "dist/scratch", libraryConfig = Just (ComponentLocalBuildInfo {componentPackageDeps = [(InstalledPackageId "HTTP-4000.1.1-e1c3272cf0835ac9d10671ed8dc862f9",PackageIdentifier {pkgName = PackageName "HTTP", pkgVersion = Version {versionBranch = [4000,1,1], versionTags = []}}),(InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",PackageIdentifier {pkgName = PackageName "array", pkgVersion = Version {versionBranch = [0,3,0,2], versionTags = []}}),(InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,3,1,0], versionTags = []}}),(InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",PackageIdentifier {pkgName = PackageName "bytestring", pkgVersion = Version {versionBranch = [0,9,1,10], versionTags = []}}),(InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",PackageIdentifier {pkgName = PackageName "containers", pkgVersion = Version {versionBranch = [0,4,0,0], versionTags = []}}),(InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",PackageIdentifier {pkgName = PackageName "directory", pkgVersion = Version {versionBranch = [1,1,0,0], versionTags = []}}),(InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",PackageIdentifier {pkgName = PackageName "extensible-exceptions", pkgVersion = Version {versionBranch = [0,1,1,2], versionTags = []}}),(InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",PackageIdentifier {pkgName = PackageName "filepath", pkgVersion = Version {versionBranch = [1,2,0,0], versionTags = []}}),(InstalledPackageId "hashed-storage-0.5.7-f2baae72d60d89cab6d2b5facd274d47",PackageIdentifier {pkgName = PackageName "hashed-storage", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}),(InstalledPackageId "haskeline-0.6.4.0-ea83f091fcdad61446c62afc5c94a9ed",PackageIdentifier {pkgName = PackageName "haskeline", pkgVersion = Version {versionBranch = [0,6,4,0], versionTags = []}}),(InstalledPackageId "html-1.0.1.2-0cdd616c514cf10f5323f121a96991b6",PackageIdentifier {pkgName = PackageName "html", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}),(InstalledPackageId "mmap-0.5.7-127e379f104e2b945de5325ba3158467",PackageIdentifier {pkgName = PackageName "mmap", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}),(InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",PackageIdentifier {pkgName = PackageName "mtl", pkgVersion = Version {versionBranch = [2,0,1,0], versionTags = []}}),(InstalledPackageId "network-2.3.0.2-824dddd7e2ce0e065568730d1c080c4a",PackageIdentifier {pkgName = PackageName "network", pkgVersion = Version {versionBranch = [2,3,0,2], versionTags = []}}),(InstalledPackageId "old-time-1.0.0.6-7f15fd4b960098b2776b8c05bc17519f",PackageIdentifier {pkgName = PackageName "old-time", pkgVersion = Version {versionBranch = [1,0,0,6], versionTags = []}}),(InstalledPackageId "parsec-3.1.1-33474162d2bbd21ea1e4f1e3830243d8",PackageIdentifier {pkgName = PackageName "parsec", pkgVersion = Version {versionBranch = [3,1,1], versionTags = []}}),(InstalledPackageId "process-1.0.1.5-da4848a2eec47420cd09fe9edba7e83c",PackageIdentifier {pkgName = PackageName "process", pkgVersion = Version {versionBranch = [1,0,1,5], versionTags = []}}),(InstalledPackageId "random-1.0.0.3-7511feaba03eecc22356464da8976c7e",PackageIdentifier {pkgName = PackageName "random", pkgVersion = Version {versionBranch = [1,0,0,3], versionTags = []}}),(InstalledPackageId "regex-compat-0.95.1-3e607bc84f3c3925033bb247b8ebab65",PackageIdentifier {pkgName = PackageName "regex-compat", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}),(InstalledPackageId "tar-0.3.1.0-e78ec4eae84b755f8263c8666140ed0b",PackageIdentifier {pkgName = PackageName "tar", pkgVersion = Version {versionBranch = [0,3,1,0], versionTags = []}}),(InstalledPackageId "terminfo-0.3.1.3-d898a3b030f2d808d2a44c5ff0e2a0e1",PackageIdentifier {pkgName = PackageName "terminfo", pkgVersion = Version {versionBranch = [0,3,1,3], versionTags = []}}),(InstalledPackageId "text-0.11.0.6-139d7472dd2398472c7d962de013c741",PackageIdentifier {pkgName = PackageName "text", pkgVersion = Version {versionBranch = [0,11,0,6], versionTags = []}}),(InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff",PackageIdentifier {pkgName = PackageName "unix", pkgVersion = Version {versionBranch = [2,4,2,0], versionTags = []}}),(InstalledPackageId "vector-0.7.0.1-f3d66d9edbfc37118398d6cdca0ca5ee",PackageIdentifier {pkgName = PackageName "vector", pkgVersion = Version {versionBranch = [0,7,0,1], versionTags = []}}),(InstalledPackageId "zlib-0.5.3.1-7e19941cbd00147a79723e25160ffc8b",PackageIdentifier {pkgName = PackageName "zlib", pkgVersion = Version {versionBranch = [0,5,3,1], versionTags = []}})]}), executableConfigs = [("darcs",ComponentLocalBuildInfo {componentPackageDeps = [(InstalledPackageId "HTTP-4000.1.1-e1c3272cf0835ac9d10671ed8dc862f9",PackageIdentifier {pkgName = PackageName "HTTP", pkgVersion = Version {versionBranch = [4000,1,1], versionTags = []}}),(InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",PackageIdentifier {pkgName = PackageName "array", pkgVersion = Version {versionBranch = [0,3,0,2], versionTags = []}}),(InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,3,1,0], versionTags = []}}),(InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",PackageIdentifier {pkgName = PackageName "bytestring", pkgVersion = Version {versionBranch = [0,9,1,10], versionTags = []}}),(InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",PackageIdentifier {pkgName = PackageName "containers", pkgVersion = Version {versionBranch = [0,4,0,0], versionTags = []}}),(InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",PackageIdentifier {pkgName = PackageName "directory", pkgVersion = Version {versionBranch = [1,1,0,0], versionTags = []}}),(InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",PackageIdentifier {pkgName = PackageName "extensible-exceptions", pkgVersion = Version {versionBranch = [0,1,1,2], versionTags = []}}),(InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",PackageIdentifier {pkgName = PackageName "filepath", pkgVersion = Version {versionBranch = [1,2,0,0], versionTags = []}}),(InstalledPackageId "hashed-storage-0.5.7-f2baae72d60d89cab6d2b5facd274d47",PackageIdentifier {pkgName = PackageName "hashed-storage", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}),(InstalledPackageId "haskeline-0.6.4.0-ea83f091fcdad61446c62afc5c94a9ed",PackageIdentifier {pkgName = PackageName "haskeline", pkgVersion = Version {versionBranch = [0,6,4,0], versionTags = []}}),(InstalledPackageId "html-1.0.1.2-0cdd616c514cf10f5323f121a96991b6",PackageIdentifier {pkgName = PackageName "html", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}),(InstalledPackageId "mmap-0.5.7-127e379f104e2b945de5325ba3158467",PackageIdentifier {pkgName = PackageName "mmap", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}),(InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",PackageIdentifier {pkgName = PackageName "mtl", pkgVersion = Version {versionBranch = [2,0,1,0], versionTags = []}}),(InstalledPackageId "network-2.3.0.2-824dddd7e2ce0e065568730d1c080c4a",PackageIdentifier {pkgName = PackageName "network", pkgVersion = Version {versionBranch = [2,3,0,2], versionTags = []}}),(InstalledPackageId "old-time-1.0.0.6-7f15fd4b960098b2776b8c05bc17519f",PackageIdentifier {pkgName = PackageName "old-time", pkgVersion = Version {versionBranch = [1,0,0,6], versionTags = []}}),(InstalledPackageId "parsec-3.1.1-33474162d2bbd21ea1e4f1e3830243d8",PackageIdentifier {pkgName = PackageName "parsec", pkgVersion = Version {versionBranch = [3,1,1], versionTags = []}}),(InstalledPackageId "process-1.0.1.5-da4848a2eec47420cd09fe9edba7e83c",PackageIdentifier {pkgName = PackageName "process", pkgVersion = Version {versionBranch = [1,0,1,5], versionTags = []}}),(InstalledPackageId "random-1.0.0.3-7511feaba03eecc22356464da8976c7e",PackageIdentifier {pkgName = PackageName "random", pkgVersion = Version {versionBranch = [1,0,0,3], versionTags = []}}),(InstalledPackageId "regex-compat-0.95.1-3e607bc84f3c3925033bb247b8ebab65",PackageIdentifier {pkgName = PackageName "regex-compat", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}),(InstalledPackageId "tar-0.3.1.0-e78ec4eae84b755f8263c8666140ed0b",PackageIdentifier {pkgName = PackageName "tar", pkgVersion = Version {versionBranch = [0,3,1,0], versionTags = []}}),(InstalledPackageId "terminfo-0.3.1.3-d898a3b030f2d808d2a44c5ff0e2a0e1",PackageIdentifier {pkgName = PackageName "terminfo", pkgVersion = Version {versionBranch = [0,3,1,3], versionTags = []}}),(InstalledPackageId "text-0.11.0.6-139d7472dd2398472c7d962de013c741",PackageIdentifier {pkgName = PackageName "text", pkgVersion = Version {versionBranch = [0,11,0,6], versionTags = []}}),(InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff",PackageIdentifier {pkgName = PackageName "unix", pkgVersion = Version {versionBranch = [2,4,2,0], versionTags = []}}),(InstalledPackageId "vector-0.7.0.1-f3d66d9edbfc37118398d6cdca0ca5ee",PackageIdentifier {pkgName = PackageName "vector", pkgVersion = Version {versionBranch = [0,7,0,1], versionTags = []}}),(InstalledPackageId "zlib-0.5.3.1-7e19941cbd00147a79723e25160ffc8b",PackageIdentifier {pkgName = PackageName "zlib", pkgVersion = Version {versionBranch = [0,5,3,1], versionTags = []}})]}),("darcs-test",ComponentLocalBuildInfo {componentPackageDeps = [(InstalledPackageId "HTTP-4000.1.1-e1c3272cf0835ac9d10671ed8dc862f9",PackageIdentifier {pkgName = PackageName "HTTP", pkgVersion = Version {versionBranch = [4000,1,1], versionTags = []}}),(InstalledPackageId "HUnit-1.2.2.3-8fe95e501b1318ef285c39ed79ca4209",PackageIdentifier {pkgName = PackageName "HUnit", pkgVersion = Version {versionBranch = [1,2,2,3], versionTags = []}}),(InstalledPackageId "QuickCheck-2.4.1.1-6b2df10756c9ae534bddffc57c532df8",PackageIdentifier {pkgName = PackageName "QuickCheck", pkgVersion = Version {versionBranch = [2,4,1,1], versionTags = []}}),(InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",PackageIdentifier {pkgName = PackageName "array", pkgVersion = Version {versionBranch = [0,3,0,2], versionTags = []}}),(InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,3,1,0], versionTags = []}}),(InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",PackageIdentifier {pkgName = PackageName "bytestring", pkgVersion = Version {versionBranch = [0,9,1,10], versionTags = []}}),(InstalledPackageId "cmdlib-0.3-30b0b48ba7f087d1e853499831429cfa",PackageIdentifier {pkgName = PackageName "cmdlib", pkgVersion = Version {versionBranch = [0,3], versionTags = []}}),(InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",PackageIdentifier {pkgName = PackageName "containers", pkgVersion = Version {versionBranch = [0,4,0,0], versionTags = []}}),(InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",PackageIdentifier {pkgName = PackageName "directory", pkgVersion = Version {versionBranch = [1,1,0,0], versionTags = []}}),(InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",PackageIdentifier {pkgName = PackageName "extensible-exceptions", pkgVersion = Version {versionBranch = [0,1,1,2], versionTags = []}}),(InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",PackageIdentifier {pkgName = PackageName "filepath", pkgVersion = Version {versionBranch = [1,2,0,0], versionTags = []}}),(InstalledPackageId "hashed-storage-0.5.7-f2baae72d60d89cab6d2b5facd274d47",PackageIdentifier {pkgName = PackageName "hashed-storage", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}),(InstalledPackageId "haskeline-0.6.4.0-ea83f091fcdad61446c62afc5c94a9ed",PackageIdentifier {pkgName = PackageName "haskeline", pkgVersion = Version {versionBranch = [0,6,4,0], versionTags = []}}),(InstalledPackageId "html-1.0.1.2-0cdd616c514cf10f5323f121a96991b6",PackageIdentifier {pkgName = PackageName "html", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}),(InstalledPackageId "mmap-0.5.7-127e379f104e2b945de5325ba3158467",PackageIdentifier {pkgName = PackageName "mmap", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}),(InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",PackageIdentifier {pkgName = PackageName "mtl", pkgVersion = Version {versionBranch = [2,0,1,0], versionTags = []}}),(InstalledPackageId "network-2.3.0.2-824dddd7e2ce0e065568730d1c080c4a",PackageIdentifier {pkgName = PackageName "network", pkgVersion = Version {versionBranch = [2,3,0,2], versionTags = []}}),(InstalledPackageId "old-time-1.0.0.6-7f15fd4b960098b2776b8c05bc17519f",PackageIdentifier {pkgName = PackageName "old-time", pkgVersion = Version {versionBranch = [1,0,0,6], versionTags = []}}),(InstalledPackageId "parsec-3.1.1-33474162d2bbd21ea1e4f1e3830243d8",PackageIdentifier {pkgName = PackageName "parsec", pkgVersion = Version {versionBranch = [3,1,1], versionTags = []}}),(InstalledPackageId "process-1.0.1.5-da4848a2eec47420cd09fe9edba7e83c",PackageIdentifier {pkgName = PackageName "process", pkgVersion = Version {versionBranch = [1,0,1,5], versionTags = []}}),(InstalledPackageId "random-1.0.0.3-7511feaba03eecc22356464da8976c7e",PackageIdentifier {pkgName = PackageName "random", pkgVersion = Version {versionBranch = [1,0,0,3], versionTags = []}}),(InstalledPackageId "regex-compat-0.95.1-3e607bc84f3c3925033bb247b8ebab65",PackageIdentifier {pkgName = PackageName "regex-compat", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}),(InstalledPackageId "shellish-0.1.4-5b908e0ef83b4d4990e862a2d582acb1",PackageIdentifier {pkgName = PackageName "shellish", pkgVersion = Version {versionBranch = [0,1,4], versionTags = []}}),(InstalledPackageId "tar-0.3.1.0-e78ec4eae84b755f8263c8666140ed0b",PackageIdentifier {pkgName = PackageName "tar", pkgVersion = Version {versionBranch = [0,3,1,0], versionTags = []}}),(InstalledPackageId "terminfo-0.3.1.3-d898a3b030f2d808d2a44c5ff0e2a0e1",PackageIdentifier {pkgName = PackageName "terminfo", pkgVersion = Version {versionBranch = [0,3,1,3], versionTags = []}}),(InstalledPackageId "test-framework-0.4.0-3570e5fce12246859c27f7b4577044ed",PackageIdentifier {pkgName = PackageName "test-framework", pkgVersion = Version {versionBranch = [0,4,0], versionTags = []}}),(InstalledPackageId "test-framework-hunit-0.2.6-ca043988073add792f5cddeb80a08ce9",PackageIdentifier {pkgName = PackageName "test-framework-hunit", pkgVersion = Version {versionBranch = [0,2,6], versionTags = []}}),(InstalledPackageId "test-framework-quickcheck2-0.2.10-48c3729ab4f2ea19741d59800542207a",PackageIdentifier {pkgName = PackageName "test-framework-quickcheck2", pkgVersion = Version {versionBranch = [0,2,10], versionTags = []}}),(InstalledPackageId "text-0.11.0.6-139d7472dd2398472c7d962de013c741",PackageIdentifier {pkgName = PackageName "text", pkgVersion = Version {versionBranch = [0,11,0,6], versionTags = []}}),(InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff",PackageIdentifier {pkgName = PackageName "unix", pkgVersion = Version {versionBranch = [2,4,2,0], versionTags = []}}),(InstalledPackageId "vector-0.7.0.1-f3d66d9edbfc37118398d6cdca0ca5ee",PackageIdentifier {pkgName = PackageName "vector", pkgVersion = Version {versionBranch = [0,7,0,1], versionTags = []}}),(InstalledPackageId "zlib-0.5.3.1-7e19941cbd00147a79723e25160ffc8b",PackageIdentifier {pkgName = PackageName "zlib", pkgVersion = Version {versionBranch = [0,5,3,1], versionTags = []}})]})], testSuiteConfigs = [], installedPkgs = PackageIndex (fromList [(InstalledPackageId "HTTP-4000.1.1-e1c3272cf0835ac9d10671ed8dc862f9",InstalledPackageInfo {installedPackageId = InstalledPackageId "HTTP-4000.1.1-e1c3272cf0835ac9d10671ed8dc862f9", sourcePackageId = PackageIdentifier {pkgName = PackageName "HTTP", pkgVersion = Version {versionBranch = [4000,1,1], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2002, Warrick Gray\nCopyright (c) 2002-2005, Ian Lynagh\nCopyright (c) 2003-2006, Bjorn Bringert\nCopyright (c) 2004, Andre Furtado\nCopyright (c) 2004, Ganesh Sittampalam\nCopyright (c) 2004-2005, Dominic Steinitz\nCopyright 2007 Robin Bate Boerop\nCopyright 2008- Sigbjorn Finne", maintainer = "Ganesh Sittampalam <ganesh@earth.li>", author = "Warrick Gray <warrick.gray@hotmail.com>", stability = "", homepage = "http://projects.haskell.org/http/", pkgUrl = "", description = "The HTTP package supports client-side web programming in Haskell. It lets you set up\nHTTP connections, transmitting requests and processing the responses coming back, all\nfrom within the comforts of Haskell. It's dependent on the network package to operate,\nbut other than that, the implementation is all written in Haskell.\n\nA basic API for issuing single HTTP requests + receiving responses is provided. On top\nof that, a session-level abstraction is also on offer  (the @BrowserAction@ monad);\nit taking care of handling the management of persistent connections, proxies,\nstate (cookies) and authentication credentials required to handle multi-step\ninteractions with a web server.\n\nThe representation of the bytes flowing across is extensible via the use of a type class,\nletting you pick the representation of requests and responses that best fits your use.\nSome pre-packaged, common instances are provided for you (@ByteString@, @String@.)\n\nHere's an example use:\n\n>\n>    do\n>      rsp <- Network.HTTP.simpleHTTP (getRequest \"http://www.haskell.org/\")\n>              -- fetch document and return it (as a 'String'.)\n>      fmap (take 100) (getResponseBody rsp)\n>\n>    do\n>      rsp <- Network.Browser.browse $ do\n>               setAllowRedirects True -- handle HTTP redirects\n>               request $ getRequest \"http://google.com/\"\n>      fmap (take 100) (getResponseBody rsp)\n>\n\nGit repository available at <git://github.com/haskell/HTTP.git>", category = "Network", exposed = True, exposedModules = [ModuleName ["Network","BufferType"],ModuleName ["Network","Stream"],ModuleName ["Network","StreamDebugger"],ModuleName ["Network","StreamSocket"],ModuleName ["Network","TCP"],ModuleName ["Network","HTTP"],ModuleName ["Network","HTTP","Headers"],ModuleName ["Network","HTTP","Base"],ModuleName ["Network","HTTP","Stream"],ModuleName ["Network","HTTP","Auth"],ModuleName ["Network","HTTP","Cookie"],ModuleName ["Network","HTTP","Proxy"],ModuleName ["Network","HTTP","HandleStream"],ModuleName ["Network","Browser"]], hiddenModules = [ModuleName ["Network","HTTP","Base64"],ModuleName ["Network","HTTP","MD5"],ModuleName ["Network","HTTP","MD5Aux"],ModuleName ["Network","HTTP","Utils"]], importDirs = ["/home/florent/.cabal/lib/HTTP-4000.1.1/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/HTTP-4000.1.1/ghc-7.0.3"], hsLibraries = ["HSHTTP-4000.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",InstalledPackageId "network-2.3.0.2-824dddd7e2ce0e065568730d1c080c4a",InstalledPackageId "old-time-1.0.0.6-7f15fd4b960098b2776b8c05bc17519f",InstalledPackageId "parsec-3.1.1-33474162d2bbd21ea1e4f1e3830243d8"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/HTTP-4000.1.1/html/HTTP.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/HTTP-4000.1.1/html"]}),(InstalledPackageId "HUnit-1.2.2.3-8fe95e501b1318ef285c39ed79ca4209",InstalledPackageInfo {installedPackageId = InstalledPackageId "HUnit-1.2.2.3-8fe95e501b1318ef285c39ed79ca4209", sourcePackageId = PackageIdentifier {pkgName = PackageName "HUnit", pkgVersion = Version {versionBranch = [1,2,2,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "hunit@richardg.name", author = "Dean Herington", stability = "stable", homepage = "http://hunit.sourceforge.net/", pkgUrl = "", description = "HUnit is a unit testing framework for Haskell, inspired by the\nJUnit tool for Java, see: <http://www.junit.org>.", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","HUnit","Base"],ModuleName ["Test","HUnit","Lang"],ModuleName ["Test","HUnit","Terminal"],ModuleName ["Test","HUnit","Text"],ModuleName ["Test","HUnit"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/HUnit-1.2.2.3/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/HUnit-1.2.2.3/ghc-7.0.3"], hsLibraries = ["HSHUnit-1.2.2.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/hunit-1.2.2.3/HUnit.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-hunit-doc/html/"]}),(InstalledPackageId "QuickCheck-2.4.1.1-6b2df10756c9ae534bddffc57c532df8",InstalledPackageInfo {installedPackageId = InstalledPackageId "QuickCheck-2.4.1.1-6b2df10756c9ae534bddffc57c532df8", sourcePackageId = PackageIdentifier {pkgName = PackageName "QuickCheck", pkgVersion = Version {versionBranch = [2,4,1,1], versionTags = []}}, license = BSD3, copyright = "2000-2011 Koen Claessen, 2006-2008 Bj\246rn Bringert, 2009-2011 Nick Smallbone", maintainer = "QuickCheck developers <quickcheck@projects.haskell.org>", author = "Koen Claessen <koen@chalmers.se>", stability = "", homepage = "http://code.haskell.org/QuickCheck", pkgUrl = "", description = "QuickCheck is a library for random testing of program properties.\n\nThe programmer provides a specification of the program, in\nthe form of properties which functions should satisfy, and\nQuickCheck then tests that the properties hold in a large number\nof randomly generated cases.\n\nSpecifications are expressed in\nHaskell, using combinators defined in the QuickCheck library.\nQuickCheck provides combinators to define properties, observe\nthe distribution of test data, and define test\ndata generators.", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","QuickCheck","All"],ModuleName ["Test","QuickCheck","Function"],ModuleName ["Test","QuickCheck"],ModuleName ["Test","QuickCheck","Arbitrary"],ModuleName ["Test","QuickCheck","Gen"],ModuleName ["Test","QuickCheck","Monadic"],ModuleName ["Test","QuickCheck","Modifiers"],ModuleName ["Test","QuickCheck","Property"],ModuleName ["Test","QuickCheck","Test"],ModuleName ["Test","QuickCheck","Text"],ModuleName ["Test","QuickCheck","Poly"],ModuleName ["Test","QuickCheck","State"]], hiddenModules = [ModuleName ["Test","QuickCheck","Exception"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/QuickCheck-2.4.1.1/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/QuickCheck-2.4.1.1/ghc-7.0.3"], hsLibraries = ["HSQuickCheck-2.4.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "random-1.0.0.3-7511feaba03eecc22356464da8976c7e",InstalledPackageId "template-haskell-2.5.0.0-957162165c2e6480a35f6d14f7e5220f"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/quickcheck2-2.4.1.1/QuickCheck.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-quickcheck2-doc/html/"]}),(InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1",InstalledPackageInfo {installedPackageId = InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1", sourcePackageId = PackageIdentifier {pkgName = PackageName "ansi-terminal", pkgVersion = Version {versionBranch = [0,5,5], versionTags = []}}, license = BSD3, copyright = "", maintainer = "batterseapower@hotmail.com", author = "Max Bolingbroke", stability = "", homepage = "http://batterseapower.github.com/ansi-terminal", pkgUrl = "", description = "ANSI terminal support for Haskell: allows cursor movement, screen clearing, color output showing or hiding the cursor, and\nchanging the title. Compatible with Windows and those Unixes with ANSI terminals, but only GHC is supported as a compiler.", category = "User Interfaces", exposed = True, exposedModules = [ModuleName ["System","Console","ANSI"]], hiddenModules = [ModuleName ["System","Console","ANSI","Unix"],ModuleName ["System","Console","ANSI","Common"]], importDirs = ["/home/florent/.cabal/lib/ansi-terminal-0.5.5/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/ansi-terminal-0.5.5/ghc-7.0.3"], hsLibraries = ["HSansi-terminal-0.5.5"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/ansi-terminal-0.5.5/html/ansi-terminal.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/ansi-terminal-0.5.5/html"]}),(InstalledPackageId "ansi-wl-pprint-0.6.3-e572fb77d5bf7bcb04a7444a9b54f822",InstalledPackageInfo {installedPackageId = InstalledPackageId "ansi-wl-pprint-0.6.3-e572fb77d5bf7bcb04a7444a9b54f822", sourcePackageId = PackageIdentifier {pkgName = PackageName "ansi-wl-pprint", pkgVersion = Version {versionBranch = [0,6,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "batterseapower@hotmail.com", author = "Daan Leijen, Max Bolingbroke", stability = "", homepage = "http://github.com/batterseapower/ansi-wl-pprint", pkgUrl = "", description = "This is a pretty printing library based on Wadler's paper \"A Prettier Printer\". It has been enhanced with support for ANSI terminal colored output using the ansi-terminal package.", category = "User Interfaces, Text", exposed = True, exposedModules = [ModuleName ["Text","PrettyPrint","ANSI","Leijen"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/ansi-wl-pprint-0.6.3/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/ansi-wl-pprint-0.6.3/ghc-7.0.3"], hsLibraries = ["HSansi-wl-pprint-0.6.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/ansi-wl-pprint-0.6.3/html/ansi-wl-pprint.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/ansi-wl-pprint-0.6.3/html"]}),(InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageInfo {installedPackageId = InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8", sourcePackageId = PackageIdentifier {pkgName = PackageName "array", pkgVersion = Version {versionBranch = [0,3,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package defines the classes @IArray@ of immutable arrays and\n@MArray@ of arrays mutable within appropriate monads, as well as\nsome instances of these classes.", category = "Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Array","Base"],ModuleName ["Data","Array","IArray"],ModuleName ["Data","Array","IO"],ModuleName ["Data","Array","IO","Internals"],ModuleName ["Data","Array","MArray"],ModuleName ["Data","Array","ST"],ModuleName ["Data","Array","Storable"],ModuleName ["Data","Array","Unboxed"],ModuleName ["Data","Array"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/array-0.3.0.2"], libraryDirs = ["/usr/lib/ghc-7.0.3/array-0.3.0.2"], hsLibraries = ["HSarray-0.3.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/array-0.3.0.2/array.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/array-0.3.0.2"]}),(InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageInfo {installedPackageId = InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c", sourcePackageId = PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,3,1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains the Prelude and its support libraries,\nand a large collection of useful libraries ranging from data\nstructures to parsing combinators and debugging utilities.", category = "", exposed = True, exposedModules = [ModuleName ["Foreign","Concurrent"],ModuleName ["GHC","Arr"],ModuleName ["GHC","Base"],ModuleName ["GHC","Classes"],ModuleName ["GHC","Conc"],ModuleName ["GHC","Conc","IO"],ModuleName ["GHC","Conc","Signal"],ModuleName ["GHC","Conc","Sync"],ModuleName ["GHC","ConsoleHandler"],ModuleName ["GHC","Constants"],ModuleName ["GHC","Desugar"],ModuleName ["GHC","Enum"],ModuleName ["GHC","Environment"],ModuleName ["GHC","Err"],ModuleName ["GHC","Exception"],ModuleName ["GHC","Exts"],ModuleName ["GHC","Float"],ModuleName ["GHC","ForeignPtr"],ModuleName ["GHC","MVar"],ModuleName ["GHC","IO"],ModuleName ["GHC","IO","IOMode"],ModuleName ["GHC","IO","Buffer"],ModuleName ["GHC","IO","Device"],ModuleName ["GHC","IO","BufferedIO"],ModuleName ["GHC","IO","FD"],ModuleName ["GHC","IO","Exception"],ModuleName ["GHC","IO","Encoding"],ModuleName ["GHC","IO","Encoding","Latin1"],ModuleName ["GHC","IO","Encoding","UTF8"],ModuleName ["GHC","IO","Encoding","UTF16"],ModuleName ["GHC","IO","Encoding","UTF32"],ModuleName ["GHC","IO","Encoding","Types"],ModuleName ["GHC","IO","Encoding","Iconv"],ModuleName ["GHC","IO","Encoding","CodePage"],ModuleName ["GHC","IO","Handle"],ModuleName ["GHC","IO","Handle","Types"],ModuleName ["GHC","IO","Handle","Internals"],ModuleName ["GHC","IO","Handle","FD"],ModuleName ["GHC","IO","Handle","Text"],ModuleName ["GHC","IOBase"],ModuleName ["GHC","Handle"],ModuleName ["GHC","IORef"],ModuleName ["GHC","IOArray"],ModuleName ["GHC","Int"],ModuleName ["GHC","List"],ModuleName ["GHC","Num"],ModuleName ["GHC","PArr"],ModuleName ["GHC","Pack"],ModuleName ["GHC","Ptr"],ModuleName ["GHC","Read"],ModuleName ["GHC","Real"],ModuleName ["GHC","ST"],ModuleName ["GHC","STRef"],ModuleName ["GHC","Show"],ModuleName ["GHC","Stable"],ModuleName ["GHC","Storable"],ModuleName ["GHC","TopHandler"],ModuleName ["GHC","Unicode"],ModuleName ["GHC","Weak"],ModuleName ["GHC","Word"],ModuleName ["System","Timeout"],ModuleName ["System","Event"],ModuleName ["Control","Applicative"],ModuleName ["Control","Arrow"],ModuleName ["Control","Category"],ModuleName ["Control","Concurrent"],ModuleName ["Control","Concurrent","Chan"],ModuleName ["Control","Concurrent","MVar"],ModuleName ["Control","Concurrent","QSem"],ModuleName ["Control","Concurrent","QSemN"],ModuleName ["Control","Concurrent","SampleVar"],ModuleName ["Control","Exception"],ModuleName ["Control","Exception","Base"],ModuleName ["Control","OldException"],ModuleName ["Control","Monad"],ModuleName ["Control","Monad","Fix"],ModuleName ["Control","Monad","Instances"],ModuleName ["Control","Monad","ST"],ModuleName ["Control","Monad","ST","Lazy"],ModuleName ["Control","Monad","ST","Strict"],ModuleName ["Data","Bits"],ModuleName ["Data","Bool"],ModuleName ["Data","Char"],ModuleName ["Data","Complex"],ModuleName ["Data","Dynamic"],ModuleName ["Data","Either"],ModuleName ["Data","Eq"],ModuleName ["Data","Data"],ModuleName ["Data","Fixed"],ModuleName ["Data","Foldable"],ModuleName ["Data","Function"],ModuleName ["Data","Functor"],ModuleName ["Data","HashTable"],ModuleName ["Data","IORef"],ModuleName ["Data","Int"],ModuleName ["Data","Ix"],ModuleName ["Data","List"],ModuleName ["Data","Maybe"],ModuleName ["Data","Monoid"],ModuleName ["Data","Ord"],ModuleName ["Data","Ratio"],ModuleName ["Data","STRef"],ModuleName ["Data","STRef","Lazy"],ModuleName ["Data","STRef","Strict"],ModuleName ["Data","String"],ModuleName ["Data","Traversable"],ModuleName ["Data","Tuple"],ModuleName ["Data","Typeable"],ModuleName ["Data","Unique"],ModuleName ["Data","Version"],ModuleName ["Data","Word"],ModuleName ["Debug","Trace"],ModuleName ["Foreign"],ModuleName ["Foreign","C"],ModuleName ["Foreign","C","Error"],ModuleName ["Foreign","C","String"],ModuleName ["Foreign","C","Types"],ModuleName ["Foreign","ForeignPtr"],ModuleName ["Foreign","Marshal"],ModuleName ["Foreign","Marshal","Alloc"],ModuleName ["Foreign","Marshal","Array"],ModuleName ["Foreign","Marshal","Error"],ModuleName ["Foreign","Marshal","Pool"],ModuleName ["Foreign","Marshal","Utils"],ModuleName ["Foreign","Ptr"],ModuleName ["Foreign","StablePtr"],ModuleName ["Foreign","Storable"],ModuleName ["Numeric"],ModuleName ["Prelude"],ModuleName ["System","Console","GetOpt"],ModuleName ["System","CPUTime"],ModuleName ["System","Environment"],ModuleName ["System","Exit"],ModuleName ["System","IO"],ModuleName ["System","IO","Error"],ModuleName ["System","IO","Unsafe"],ModuleName ["System","Info"],ModuleName ["System","Mem"],ModuleName ["System","Mem","StableName"],ModuleName ["System","Mem","Weak"],ModuleName ["System","Posix","Internals"],ModuleName ["System","Posix","Types"],ModuleName ["Text","ParserCombinators","ReadP"],ModuleName ["Text","ParserCombinators","ReadPrec"],ModuleName ["Text","Printf"],ModuleName ["Text","Read"],ModuleName ["Text","Read","Lex"],ModuleName ["Text","Show"],ModuleName ["Text","Show","Functions"],ModuleName ["Unsafe","Coerce"]], hiddenModules = [ModuleName ["System","Event","Array"],ModuleName ["System","Event","Clock"],ModuleName ["System","Event","Control"],ModuleName ["System","Event","EPoll"],ModuleName ["System","Event","IntMap"],ModuleName ["System","Event","Internal"],ModuleName ["System","Event","KQueue"],ModuleName ["System","Event","Manager"],ModuleName ["System","Event","PSQ"],ModuleName ["System","Event","Poll"],ModuleName ["System","Event","Thread"],ModuleName ["System","Event","Unique"]], importDirs = ["/usr/lib/ghc-7.0.3/base-4.3.1.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/base-4.3.1.0"], hsLibraries = ["HSbase-4.3.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/base-4.3.1.0/include"], includes = ["HsBase.h"], depends = [InstalledPackageId "ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba",InstalledPackageId "integer-gmp-0.2.0.3-298c59ba68b7aaa7e76ae5b1fe5e876e",InstalledPackageId "builtin_rts"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/base-4.3.1.0/base.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/base-4.3.1.0"]}),(InstalledPackageId "binary-0.5.0.2-b471fd4ae9e6a992eed4cf652dba019b",InstalledPackageInfo {installedPackageId = InstalledPackageId "binary-0.5.0.2-b471fd4ae9e6a992eed4cf652dba019b", sourcePackageId = PackageIdentifier {pkgName = PackageName "binary", pkgVersion = Version {versionBranch = [0,5,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Lennart Kolmodin, Don Stewart <dons@galois.com>", author = "Lennart Kolmodin <kolmodin@dtek.chalmers.se>", stability = "provisional", homepage = "http://code.haskell.org/binary/", pkgUrl = "", description = "Efficient, pure binary serialisation using lazy ByteStrings.\nHaskell values may be encoded to and from binary formats,\nwritten to disk as binary, or sent over the network.\nSerialisation speeds of over 1 G\\/sec have been observed,\nso this library should be suitable for high performance\nscenarios.", category = "Data, Parsing", exposed = True, exposedModules = [ModuleName ["Data","Binary"],ModuleName ["Data","Binary","Put"],ModuleName ["Data","Binary","Get"],ModuleName ["Data","Binary","Builder"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/binary-0.5.0.2/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/binary-0.5.0.2/ghc-7.0.3"], hsLibraries = ["HSbinary-0.5.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/binary-0.5.0.2/binary.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-binary-doc/html/"]}),(InstalledPackageId "builtin_rts",InstalledPackageInfo {installedPackageId = InstalledPackageId "builtin_rts", sourcePackageId = PackageIdentifier {pkgName = PackageName "rts", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "glasgow-haskell-users@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "", category = "", exposed = True, exposedModules = [], hiddenModules = [], importDirs = [], libraryDirs = ["/usr/lib/ghc-7.0.3"], hsLibraries = ["HSrts"], extraLibraries = ["ffi","m","rt","dl"], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/include"], includes = ["Stg.h"], depends = [], hugsOptions = [], ccOptions = [], ldOptions = ["-u","ghczmprim_GHCziTypes_Izh_static_info","-u","ghczmprim_GHCziTypes_Czh_static_info","-u","ghczmprim_GHCziTypes_Fzh_static_info","-u","ghczmprim_GHCziTypes_Dzh_static_info","-u","base_GHCziPtr_Ptr_static_info","-u","base_GHCziWord_Wzh_static_info","-u","base_GHCziInt_I8zh_static_info","-u","base_GHCziInt_I16zh_static_info","-u","base_GHCziInt_I32zh_static_info","-u","base_GHCziInt_I64zh_static_info","-u","base_GHCziWord_W8zh_static_info","-u","base_GHCziWord_W16zh_static_info","-u","base_GHCziWord_W32zh_static_info","-u","base_GHCziWord_W64zh_static_info","-u","base_GHCziStable_StablePtr_static_info","-u","ghczmprim_GHCziTypes_Izh_con_info","-u","ghczmprim_GHCziTypes_Czh_con_info","-u","ghczmprim_GHCziTypes_Fzh_con_info","-u","ghczmprim_GHCziTypes_Dzh_con_info","-u","base_GHCziPtr_Ptr_con_info","-u","base_GHCziPtr_FunPtr_con_info","-u","base_GHCziStable_StablePtr_con_info","-u","ghczmprim_GHCziBool_False_closure","-u","ghczmprim_GHCziBool_True_closure","-u","base_GHCziPack_unpackCString_closure","-u","base_GHCziIOziException_stackOverflow_closure","-u","base_GHCziIOziException_heapOverflow_closure","-u","base_ControlziExceptionziBase_nonTermination_closure","-u","base_GHCziIOziException_blockedIndefinitelyOnMVar_closure","-u","base_GHCziIOziException_blockedIndefinitelyOnSTM_closure","-u","base_ControlziExceptionziBase_nestedAtomically_closure","-u","base_GHCziWeak_runFinalizzerBatch_closure","-u","base_GHCziTopHandler_runIO_closure","-u","base_GHCziTopHandler_runNonIO_closure","-u","base_GHCziConcziIO_ensureIOManagerIsRunning_closure","-u","base_GHCziConcziSync_runSparks_closure","-u","base_GHCziConcziSignal_runHandlers_closure"], frameworkDirs = [], frameworks = [], haddockInterfaces = [], haddockHTMLs = []}),(InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageInfo {installedPackageId = InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4", sourcePackageId = PackageIdentifier {pkgName = PackageName "bytestring", pkgVersion = Version {versionBranch = [0,9,1,10], versionTags = []}}, license = BSD3, copyright = "Copyright (c) Don Stewart   2005-2009,\n(c) Duncan Coutts 2006-2009,\n(c) David Roundy  2003-2005.", maintainer = "dons@galois.com, duncan@haskell.org", author = "Don Stewart, Duncan Coutts", stability = "", homepage = "http://www.cse.unsw.edu.au/~dons/fps.html", pkgUrl = "", description = "A time and space-efficient implementation of byte vectors using\npacked Word8 arrays, suitable for high performance use, both in terms\nof large data quantities, or high speed requirements. Byte vectors\nare encoded as strict 'Word8' arrays of bytes, and lazy lists of\nstrict chunks, held in a 'ForeignPtr', and can be passed between C\nand Haskell with little effort.\n\nTest coverage data for this library is available at:\n<http://code.haskell.org/~dons/tests/bytestring/hpc_index.html>", category = "Data", exposed = True, exposedModules = [ModuleName ["Data","ByteString"],ModuleName ["Data","ByteString","Char8"],ModuleName ["Data","ByteString","Unsafe"],ModuleName ["Data","ByteString","Internal"],ModuleName ["Data","ByteString","Lazy"],ModuleName ["Data","ByteString","Lazy","Char8"],ModuleName ["Data","ByteString","Lazy","Internal"],ModuleName ["Data","ByteString","Fusion"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/bytestring-0.9.1.10"], libraryDirs = ["/usr/lib/ghc-7.0.3/bytestring-0.9.1.10"], hsLibraries = ["HSbytestring-0.9.1.10"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/bytestring-0.9.1.10/include"], includes = ["fpstring.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/bytestring-0.9.1.10/bytestring.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.1.10"]}),(InstalledPackageId "cmdlib-0.3-30b0b48ba7f087d1e853499831429cfa",InstalledPackageInfo {installedPackageId = InstalledPackageId "cmdlib-0.3-30b0b48ba7f087d1e853499831429cfa", sourcePackageId = PackageIdentifier {pkgName = PackageName "cmdlib", pkgVersion = Version {versionBranch = [0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "me@mornfall.net", author = "Petr Rockai", stability = "", homepage = "", pkgUrl = "", description = "A commandline parsing library, based on getopt. Comes with a\npowerful attribute system. Supports complex interfaces with many\noptions and commands, with option & command grouping, with simple\nand convenient API. Even though quite powerful, it strives to keep\nsimple things simple. The library uses \"System.Console.GetOpt\" as\nits backend.\n\nIn comparison to the other commandline handling libraries:\n\nCompared to cmdargs, cmdlib has a pure attribute system and is\nbased on GetOpt for help formatting & argument parsing. Cmdlib may\nalso be more extendable due to typeclass design, and can use\nuser-supplied types for option arguments.\n\nCmdargs >= 0.4 can optionally use a pure attribute system,\nalthough this is clearly an add-on and the API is a second-class\ncitizen in relation to the impure version.\n\nGetOpt and parseargs both require explicit flag representation, so\nthey live a level below cmdlib. GetOpt is in fact used as a\nbackend by cmdlib.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Console","CmdLib"]], hiddenModules = [ModuleName ["System","Console","CmdLib","Attribute"],ModuleName ["System","Console","CmdLib","Flag"],ModuleName ["System","Console","CmdLib","Command"],ModuleName ["System","Console","CmdLib","ADTs"],ModuleName ["System","Console","CmdLib","Record"]], importDirs = ["/home/florent/.cabal/lib/cmdlib-0.3/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/cmdlib-0.3/ghc-7.0.3"], hsLibraries = ["HScmdlib-0.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",InstalledPackageId "split-0.1.4-25b8dac0b87dfab6d3ad4b8a7e345e45",InstalledPackageId "syb-0.3-00d8c06f799942b01364e795b2a54d70"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/cmdlib-0.3/html/cmdlib.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/cmdlib-0.3/html"]}),(InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageInfo {installedPackageId = InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e", sourcePackageId = PackageIdentifier {pkgName = PackageName "containers", pkgVersion = Version {versionBranch = [0,4,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains efficient general-purpose implementations\nof various basic immutable container types.  The declared cost of\neach operation is either worst-case or amortized, but remains\nvalid even if structures are shared.", category = "Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Graph"],ModuleName ["Data","Sequence"],ModuleName ["Data","Tree"],ModuleName ["Data","IntMap"],ModuleName ["Data","IntSet"],ModuleName ["Data","Map"],ModuleName ["Data","Set"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/containers-0.4.0.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/containers-0.4.0.0"], hsLibraries = ["HScontainers-0.4.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/containers-0.4.0.0/containers.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/containers-0.4.0.0"]}),(InstalledPackageId "dataenc-0.13.0.4-35faf9ef6ab96b77e6a414944a7a49d8",InstalledPackageInfo {installedPackageId = InstalledPackageId "dataenc-0.13.0.4-35faf9ef6ab96b77e6a414944a7a49d8", sourcePackageId = PackageIdentifier {pkgName = PackageName "dataenc", pkgVersion = Version {versionBranch = [0,13,0,4], versionTags = []}}, license = BSD3, copyright = "Magnus Therning, 2007-2009", maintainer = "magnus@therning.org", author = "Magnus Therning", stability = "", homepage = "http://www.haskell.org/haskellwiki/Library/Data_encoding", pkgUrl = "", description = "Data encoding library currently providing Base16, Base32,\nBase32Hex, Base64, Base64Url, Base85, Python string escaping,\nQuoted-Printable, URL encoding, uuencode, xxencode, and yEncoding.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Binary","Base16"],ModuleName ["Codec","Binary","Base32"],ModuleName ["Codec","Binary","Base32Hex"],ModuleName ["Codec","Binary","Base64"],ModuleName ["Codec","Binary","Base64Url"],ModuleName ["Codec","Binary","Base85"],ModuleName ["Codec","Binary","DataEncoding"],ModuleName ["Codec","Binary","PythonString"],ModuleName ["Codec","Binary","QuotedPrintable"],ModuleName ["Codec","Binary","Url"],ModuleName ["Codec","Binary","Uu"],ModuleName ["Codec","Binary","Xx"],ModuleName ["Codec","Binary","Yenc"]], hiddenModules = [ModuleName ["Codec","Binary","Util"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/dataenc-0.13.0.4/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/dataenc-0.13.0.4/ghc-7.0.3"], hsLibraries = ["HSdataenc-0.13.0.4"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/dataenc-0.13.0.4/dataenc.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-dataenc-doc/html/"]}),(InstalledPackageId "deepseq-1.1.0.2-0465f803f7d27d264907e7e03e72a71f",InstalledPackageInfo {installedPackageId = InstalledPackageId "deepseq-1.1.0.2-0465f803f7d27d264907e7e03e72a71f", sourcePackageId = PackageIdentifier {pkgName = PackageName "deepseq", pkgVersion = Version {versionBranch = [1,1,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package provides methods for fully evaluating data structures\n(\\\"deep evaluation\\\"). Deep evaluation is often used for adding\nstrictness to a program, e.g. in order to force pending exceptions,\nremove space leaks, or force lazy I/O to happen. It is also useful\nin parallel programs, to ensure pending work does not migrate to the\nwrong thread.\n\nThe primary use of this package is via the 'deepseq' function, a\n\\\"deep\\\" version of 'seq'. It is implemented on top of an 'NFData'\ntypeclass (\\\"Normal Form Data\\\", data structures with no unevaluated\ncomponents) which defines strategies for fully evaluating different\ndata types.", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","DeepSeq"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/deepseq-1.1.0.2/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/deepseq-1.1.0.2/ghc-7.0.3"], hsLibraries = ["HSdeepseq-1.1.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/deepseq-1.1.0.2/deepseq.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-deepseq-doc/html/"]}),(InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",InstalledPackageInfo {installedPackageId = InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85", sourcePackageId = PackageIdentifier {pkgName = PackageName "directory", pkgVersion = Version {versionBranch = [1,1,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package provides a library for handling directories.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Directory"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/directory-1.1.0.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/directory-1.1.0.0"], hsLibraries = ["HSdirectory-1.1.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/directory-1.1.0.0/include"], includes = ["HsDirectory.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageId "old-time-1.0.0.6-7f15fd4b960098b2776b8c05bc17519f",InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/directory-1.1.0.0/directory.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/directory-1.1.0.0"]}),(InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageInfo {installedPackageId = InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831", sourcePackageId = PackageIdentifier {pkgName = PackageName "extensible-exceptions", pkgVersion = Version {versionBranch = [0,1,1,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package provides extensible exceptions for both new and\nold versions of GHC (i.e., < 6.10).", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","Exception","Extensible"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/extensible-exceptions-0.1.1.2"], libraryDirs = ["/usr/lib/ghc-7.0.3/extensible-exceptions-0.1.1.2"], hsLibraries = ["HSextensible-exceptions-0.1.1.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/extensible-exceptions-0.1.1.2/extensible-exceptions.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/extensible-exceptions-0.1.1.2"]}),(InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageInfo {installedPackageId = InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653", sourcePackageId = PackageIdentifier {pkgName = PackageName "filepath", pkgVersion = Version {versionBranch = [1,2,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "", author = "Neil Mitchell", stability = "", homepage = "http://www-users.cs.york.ac.uk/~ndm/filepath/", pkgUrl = "", description = "", category = "System", exposed = True, exposedModules = [ModuleName ["System","FilePath"],ModuleName ["System","FilePath","Posix"],ModuleName ["System","FilePath","Windows"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/filepath-1.2.0.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/filepath-1.2.0.0"], hsLibraries = ["HSfilepath-1.2.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/filepath-1.2.0.0/filepath.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/filepath-1.2.0.0"]}),(InstalledPackageId "ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba",InstalledPackageInfo {installedPackageId = InstalledPackageId "ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba", sourcePackageId = PackageIdentifier {pkgName = PackageName "ghc-prim", pkgVersion = Version {versionBranch = [0,2,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "GHC primitives.", category = "", exposed = True, exposedModules = [ModuleName ["GHC","Prim"],ModuleName ["GHC","Bool"],ModuleName ["GHC","Debug"],ModuleName ["GHC","Generics"],ModuleName ["GHC","Magic"],ModuleName ["GHC","Ordering"],ModuleName ["GHC","PrimopWrappers"],ModuleName ["GHC","IntWord32"],ModuleName ["GHC","IntWord64"],ModuleName ["GHC","Tuple"],ModuleName ["GHC","Types"],ModuleName ["GHC","Unit"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/ghc-prim-0.2.0.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/ghc-prim-0.2.0.0"], hsLibraries = ["HSghc-prim-0.2.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "builtin_rts"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/ghc-prim-0.2.0.0/ghc-prim.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/ghc-prim-0.2.0.0"]}),(InstalledPackageId "hashed-storage-0.5.7-f2baae72d60d89cab6d2b5facd274d47",InstalledPackageInfo {installedPackageId = InstalledPackageId "hashed-storage-0.5.7-f2baae72d60d89cab6d2b5facd274d47", sourcePackageId = PackageIdentifier {pkgName = PackageName "hashed-storage", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}, license = BSD3, copyright = "2009 Petr Rockai <me@mornfall.net>", maintainer = "Petr Rockai <me@mornfall.net>", author = "Petr Rockai <me@mornfall.net>", stability = "", homepage = "", pkgUrl = "", description = "Support code for reading and manipulating hashed file storage\n(where each file and directory is associated with a\ncryptographic hash, for corruption-resistant storage and fast\ncomparisons).\n\nThe supported storage formats include darcs hashed pristine, a\nplain filesystem tree and an indexed plain tree (where the index\nmaintains hashes of the plain files and directories).", category = "System", exposed = True, exposedModules = [ModuleName ["Storage","Hashed"],ModuleName ["Storage","Hashed","AnchoredPath"],ModuleName ["Storage","Hashed","Index"],ModuleName ["Storage","Hashed","Monad"],ModuleName ["Storage","Hashed","Tree"],ModuleName ["Storage","Hashed","Hash"],ModuleName ["Storage","Hashed","Packed"],ModuleName ["Storage","Hashed","Plain"],ModuleName ["Storage","Hashed","Darcs"]], hiddenModules = [ModuleName ["Bundled","Posix"],ModuleName ["Bundled","SHA256"],ModuleName ["Storage","Hashed","Utils"]], importDirs = ["/home/florent/.cabal/lib/hashed-storage-0.5.7/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/hashed-storage-0.5.7/ghc-7.0.3"], hsLibraries = ["HShashed-storage-0.5.7"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "binary-0.5.0.2-b471fd4ae9e6a992eed4cf652dba019b",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageId "dataenc-0.13.0.4-35faf9ef6ab96b77e6a414944a7a49d8",InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageId "mmap-0.5.7-127e379f104e2b945de5325ba3158467",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",InstalledPackageId "zlib-0.5.3.1-7e19941cbd00147a79723e25160ffc8b"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/hashed-storage-0.5.7/html/hashed-storage.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/hashed-storage-0.5.7/html"]}),(InstalledPackageId "haskeline-0.6.4.0-ea83f091fcdad61446c62afc5c94a9ed",InstalledPackageInfo {installedPackageId = InstalledPackageId "haskeline-0.6.4.0-ea83f091fcdad61446c62afc5c94a9ed", sourcePackageId = PackageIdentifier {pkgName = PackageName "haskeline", pkgVersion = Version {versionBranch = [0,6,4,0], versionTags = []}}, license = BSD3, copyright = "(c) Judah Jacobson", maintainer = "Judah Jacobson <judah.jacobson@gmail.com>", author = "Judah Jacobson", stability = "Experimental", homepage = "http://trac.haskell.org/haskeline", pkgUrl = "", description = "Haskeline provides a user interface for line input in command-line\nprograms.  This library is similar in purpose to readline, but since\nit is written in Haskell it is (hopefully) more easily used in other\nHaskell programs.\n\nHaskeline runs both on POSIX-compatible systems and on Windows.", category = "User Interfaces", exposed = True, exposedModules = [ModuleName ["System","Console","Haskeline"],ModuleName ["System","Console","Haskeline","Completion"],ModuleName ["System","Console","Haskeline","Encoding"],ModuleName ["System","Console","Haskeline","MonadException"],ModuleName ["System","Console","Haskeline","History"],ModuleName ["System","Console","Haskeline","IO"]], hiddenModules = [ModuleName ["System","Console","Haskeline","Backend","Terminfo"],ModuleName ["System","Console","Haskeline","Backend","WCWidth"],ModuleName ["System","Console","Haskeline","Backend","Posix"],ModuleName ["System","Console","Haskeline","Backend","IConv"],ModuleName ["System","Console","Haskeline","Backend","DumbTerm"],ModuleName ["System","Console","Haskeline","Backend"],ModuleName ["System","Console","Haskeline","Command"],ModuleName ["System","Console","Haskeline","Command","Completion"],ModuleName ["System","Console","Haskeline","Command","History"],ModuleName ["System","Console","Haskeline","Command","KillRing"],ModuleName ["System","Console","Haskeline","Directory"],ModuleName ["System","Console","Haskeline","Emacs"],ModuleName ["System","Console","Haskeline","InputT"],ModuleName ["System","Console","Haskeline","Key"],ModuleName ["System","Console","Haskeline","LineState"],ModuleName ["System","Console","Haskeline","Monads"],ModuleName ["System","Console","Haskeline","Prefs"],ModuleName ["System","Console","Haskeline","RunCommand"],ModuleName ["System","Console","Haskeline","Term"],ModuleName ["System","Console","Haskeline","Command","Undo"],ModuleName ["System","Console","Haskeline","Vi"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/haskeline-0.6.4.0/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/haskeline-0.6.4.0/ghc-7.0.3"], hsLibraries = ["HShaskeline-0.6.4.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/haskell-packages/ghc/lib/haskeline-0.6.4.0/ghc-7.0.3/include"], includes = ["h_iconv.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",InstalledPackageId "terminfo-0.3.1.3-d898a3b030f2d808d2a44c5ff0e2a0e1",InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff",InstalledPackageId "utf8-string-0.3.6-48af7e77f29b232f389e99d0a9a1d604"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/haskeline-0.6.4.0/haskeline.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-haskeline-doc/html/"]}),(InstalledPackageId "hostname-1.0-75071817127be63d3548cd759f6b627c",InstalledPackageInfo {installedPackageId = InstalledPackageId "hostname-1.0-75071817127be63d3548cd759f6b627c", sourcePackageId = PackageIdentifier {pkgName = PackageName "hostname", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "", pkgUrl = "", description = "", category = "Network", exposed = True, exposedModules = [ModuleName ["Network","HostName"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/hostname-1.0/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/hostname-1.0/ghc-7.0.3"], hsLibraries = ["HShostname-1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/hostname-1.0/html/hostname.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/hostname-1.0/html"]}),(InstalledPackageId "html-1.0.1.2-0cdd616c514cf10f5323f121a96991b6",InstalledPackageInfo {installedPackageId = InstalledPackageId "html-1.0.1.2-0cdd616c514cf10f5323f121a96991b6", sourcePackageId = PackageIdentifier {pkgName = PackageName "html", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains a combinator library for constructing\nHTML documents.", category = "Web", exposed = True, exposedModules = [ModuleName ["Text","Html"],ModuleName ["Text","Html","BlockTable"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/html-1.0.1.2/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/html-1.0.1.2/ghc-7.0.3"], hsLibraries = ["HShtml-1.0.1.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/html-1.0.1.2/html.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-html-doc/html/"]}),(InstalledPackageId "integer-gmp-0.2.0.3-298c59ba68b7aaa7e76ae5b1fe5e876e",InstalledPackageInfo {installedPackageId = InstalledPackageId "integer-gmp-0.2.0.3-298c59ba68b7aaa7e76ae5b1fe5e876e", sourcePackageId = PackageIdentifier {pkgName = PackageName "integer-gmp", pkgVersion = Version {versionBranch = [0,2,0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains an Integer library based on GMP.", category = "", exposed = True, exposedModules = [ModuleName ["GHC","Integer"],ModuleName ["GHC","Integer","GMP","Internals"]], hiddenModules = [ModuleName ["GHC","Integer","Type"]], importDirs = ["/usr/lib/ghc-7.0.3/integer-gmp-0.2.0.3"], libraryDirs = ["/usr/lib/ghc-7.0.3/integer-gmp-0.2.0.3"], hsLibraries = ["HSinteger-gmp-0.2.0.3"], extraLibraries = ["gmp"], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/integer-gmp-0.2.0.3/integer-gmp.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/integer-gmp-0.2.0.3"]}),(InstalledPackageId "mmap-0.5.7-127e379f104e2b945de5325ba3158467",InstalledPackageInfo {installedPackageId = InstalledPackageId "mmap-0.5.7-127e379f104e2b945de5325ba3158467", sourcePackageId = PackageIdentifier {pkgName = PackageName "mmap", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}, license = BSD3, copyright = "2008, Gracjan Polak", maintainer = "Gracjan Polak <gracjanpolak@gmail.com>", author = "Gracjan Polak <gracjanpolak@gmail.com>", stability = "alpha", homepage = "", pkgUrl = "", description = "This library provides a wrapper to mmap(2) or MapViewOfFile,\nallowing files or devices to be lazily loaded into memory as\nstrict or lazy ByteStrings, ForeignPtrs or plain Ptrs, using\nthe virtual memory subsystem to do on-demand loading.\nModifications are also supported.", category = "System", exposed = True, exposedModules = [ModuleName ["System","IO","MMap"]], hiddenModules = [], importDirs = ["/usr/local/lib/mmap-0.5.7/ghc-7.0.3"], libraryDirs = ["/usr/local/lib/mmap-0.5.7/ghc-7.0.3"], hsLibraries = ["HSmmap-0.5.7"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/local/share/doc/mmap-0.5.7/html/mmap.haddock"], haddockHTMLs = ["/usr/local/share/doc/mmap-0.5.7/html"]}),(InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",InstalledPackageInfo {installedPackageId = InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b", sourcePackageId = PackageIdentifier {pkgName = PackageName "mtl", pkgVersion = Version {versionBranch = [2,0,1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "Andy Gill", stability = "", homepage = "", pkgUrl = "", description = "Monad classes using functional dependencies, with instances\nfor various monad transformers, inspired by the paper\n/Functional Programming with Overloading and Higher-Order Polymorphism/,\nby Mark P Jones, in /Advanced School of Functional Programming/, 1995\n(<http://web.cecs.pdx.edu/~mpj/pubs/springschool.html>).", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","Monad","Cont"],ModuleName ["Control","Monad","Cont","Class"],ModuleName ["Control","Monad","Error"],ModuleName ["Control","Monad","Error","Class"],ModuleName ["Control","Monad","Identity"],ModuleName ["Control","Monad","List"],ModuleName ["Control","Monad","RWS"],ModuleName ["Control","Monad","RWS","Class"],ModuleName ["Control","Monad","RWS","Lazy"],ModuleName ["Control","Monad","RWS","Strict"],ModuleName ["Control","Monad","Reader"],ModuleName ["Control","Monad","Reader","Class"],ModuleName ["Control","Monad","State"],ModuleName ["Control","Monad","State","Class"],ModuleName ["Control","Monad","State","Lazy"],ModuleName ["Control","Monad","State","Strict"],ModuleName ["Control","Monad","Trans"],ModuleName ["Control","Monad","Writer"],ModuleName ["Control","Monad","Writer","Class"],ModuleName ["Control","Monad","Writer","Lazy"],ModuleName ["Control","Monad","Writer","Strict"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/mtl-2.0.1.0/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/mtl-2.0.1.0/ghc-7.0.3"], hsLibraries = ["HSmtl-2.0.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "transformers-0.2.2.0-4bbbfde1fb5c4eb17cdb1963dda698f3"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/mtl-2.0.1.0/mtl.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-mtl-doc/html/"]}),(InstalledPackageId "network-2.3.0.2-824dddd7e2ce0e065568730d1c080c4a",InstalledPackageInfo {installedPackageId = InstalledPackageId "network-2.3.0.2-824dddd7e2ce0e065568730d1c080c4a", sourcePackageId = PackageIdentifier {pkgName = PackageName "network", pkgVersion = Version {versionBranch = [2,3,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Johan Tibell <johan.tibell@gmail.com>", author = "", stability = "", homepage = "http://github.com/haskell/network", pkgUrl = "", description = "Low-level networking interface", category = "Network", exposed = True, exposedModules = [ModuleName ["Network"],ModuleName ["Network","BSD"],ModuleName ["Network","Socket"],ModuleName ["Network","Socket","ByteString"],ModuleName ["Network","Socket","ByteString","Lazy"],ModuleName ["Network","Socket","Internal"],ModuleName ["Network","URI"]], hiddenModules = [ModuleName ["Network","Socket","ByteString","IOVec"],ModuleName ["Network","Socket","ByteString","MsgHdr"],ModuleName ["Network","Socket","ByteString","Internal"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/network-2.3.0.2/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/network-2.3.0.2/ghc-7.0.3"], hsLibraries = ["HSnetwork-2.3.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/haskell-packages/ghc/lib/network-2.3.0.2/ghc-7.0.3/include"], includes = ["HsNet.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "parsec-3.1.1-33474162d2bbd21ea1e4f1e3830243d8",InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/network-2.3.0.2/network.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-network-doc/html/"]}),(InstalledPackageId "old-locale-1.0.0.2-161f79060c89cc16ca11576ceb440486",InstalledPackageInfo {installedPackageId = InstalledPackageId "old-locale-1.0.0.2-161f79060c89cc16ca11576ceb440486", sourcePackageId = PackageIdentifier {pkgName = PackageName "old-locale", pkgVersion = Version {versionBranch = [1,0,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package provides the old locale library.\nFor new code, the new locale library is recommended.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Locale"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/old-locale-1.0.0.2"], libraryDirs = ["/usr/lib/ghc-7.0.3/old-locale-1.0.0.2"], hsLibraries = ["HSold-locale-1.0.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/old-locale-1.0.0.2/old-locale.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/old-locale-1.0.0.2"]}),(InstalledPackageId "old-time-1.0.0.6-7f15fd4b960098b2776b8c05bc17519f",InstalledPackageInfo {installedPackageId = InstalledPackageId "old-time-1.0.0.6-7f15fd4b960098b2776b8c05bc17519f", sourcePackageId = PackageIdentifier {pkgName = PackageName "old-time", pkgVersion = Version {versionBranch = [1,0,0,6], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package provides the old time library.\nFor new code, the new time library is recommended.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Time"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/old-time-1.0.0.6"], libraryDirs = ["/usr/lib/ghc-7.0.3/old-time-1.0.0.6"], hsLibraries = ["HSold-time-1.0.0.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/old-time-1.0.0.6/include"], includes = ["HsTime.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "old-locale-1.0.0.2-161f79060c89cc16ca11576ceb440486"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/old-time-1.0.0.6/old-time.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/old-time-1.0.0.6"]}),(InstalledPackageId "parsec-3.1.1-33474162d2bbd21ea1e4f1e3830243d8",InstalledPackageInfo {installedPackageId = InstalledPackageId "parsec-3.1.1-33474162d2bbd21ea1e4f1e3830243d8", sourcePackageId = PackageIdentifier {pkgName = PackageName "parsec", pkgVersion = Version {versionBranch = [3,1,1], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Antoine Latter <aslatter@gmail.com>", author = "Daan Leijen <daan@microsoft.com>, Paolo Martini <paolo@nemail.it>", stability = "", homepage = "http://www.cs.uu.nl/~daan/parsec.html", pkgUrl = "", description = "Parsec is designed from scratch as an industrial-strength parser\nlibrary.  It is simple, safe, well documented (on the package\nhomepage), has extensive libraries and good error messages,\nand is also fast.  It is defined as a monad transformer that can be\nstacked on arbitrary monads, and it is also parametric in the\ninput stream type.", category = "Parsing", exposed = True, exposedModules = [ModuleName ["Text","Parsec"],ModuleName ["Text","Parsec","String"],ModuleName ["Text","Parsec","ByteString"],ModuleName ["Text","Parsec","ByteString","Lazy"],ModuleName ["Text","Parsec","Pos"],ModuleName ["Text","Parsec","Error"],ModuleName ["Text","Parsec","Prim"],ModuleName ["Text","Parsec","Char"],ModuleName ["Text","Parsec","Combinator"],ModuleName ["Text","Parsec","Token"],ModuleName ["Text","Parsec","Expr"],ModuleName ["Text","Parsec","Language"],ModuleName ["Text","Parsec","Perm"],ModuleName ["Text","ParserCombinators","Parsec"],ModuleName ["Text","ParserCombinators","Parsec","Char"],ModuleName ["Text","ParserCombinators","Parsec","Combinator"],ModuleName ["Text","ParserCombinators","Parsec","Error"],ModuleName ["Text","ParserCombinators","Parsec","Expr"],ModuleName ["Text","ParserCombinators","Parsec","Language"],ModuleName ["Text","ParserCombinators","Parsec","Perm"],ModuleName ["Text","ParserCombinators","Parsec","Pos"],ModuleName ["Text","ParserCombinators","Parsec","Prim"],ModuleName ["Text","ParserCombinators","Parsec","Token"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/parsec-3.1.1/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/parsec-3.1.1/ghc-7.0.3"], hsLibraries = ["HSparsec-3.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/parsec3-3.1.1/parsec.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-parsec3-doc/html/"]}),(InstalledPackageId "pretty-1.0.1.2-f8dc299a95cc94a3e513e27c5b80f951",InstalledPackageInfo {installedPackageId = InstalledPackageId "pretty-1.0.1.2-f8dc299a95cc94a3e513e27c5b80f951", sourcePackageId = PackageIdentifier {pkgName = PackageName "pretty", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains John Hughes's pretty-printing library,\nheavily modified by Simon Peyton Jones.", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","PrettyPrint"],ModuleName ["Text","PrettyPrint","HughesPJ"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/pretty-1.0.1.2"], libraryDirs = ["/usr/lib/ghc-7.0.3/pretty-1.0.1.2"], hsLibraries = ["HSpretty-1.0.1.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/pretty-1.0.1.2/pretty.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/pretty-1.0.1.2"]}),(InstalledPackageId "primitive-0.3.1-c9e4468cc744c0e030467f8c31383955",InstalledPackageInfo {installedPackageId = InstalledPackageId "primitive-0.3.1-c9e4468cc744c0e030467f8c31383955", sourcePackageId = PackageIdentifier {pkgName = PackageName "primitive", pkgVersion = Version {versionBranch = [0,3,1], versionTags = []}}, license = BSD3, copyright = "(c) Roman Leshchinskiy 2009-2010", maintainer = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", author = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", stability = "", homepage = "http://code.haskell.org/primitive", pkgUrl = "", description = ".\nThis package provides wrappers for primitive array operations from\nGHC.Prim.", category = "Data", exposed = True, exposedModules = [ModuleName ["Control","Monad","Primitive"],ModuleName ["Data","Primitive"],ModuleName ["Data","Primitive","MachDeps"],ModuleName ["Data","Primitive","Types"],ModuleName ["Data","Primitive","Array"],ModuleName ["Data","Primitive","ByteArray"],ModuleName ["Data","Primitive","Addr"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/primitive-0.3.1/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/primitive-0.3.1/ghc-7.0.3"], hsLibraries = ["HSprimitive-0.3.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/haskell-packages/ghc/lib/primitive-0.3.1/ghc-7.0.3/include"], includes = ["primitive-memops.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/primitive-0.3.1/primitive.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-primitive-doc/html/"]}),(InstalledPackageId "process-1.0.1.5-da4848a2eec47420cd09fe9edba7e83c",InstalledPackageInfo {installedPackageId = InstalledPackageId "process-1.0.1.5-da4848a2eec47420cd09fe9edba7e83c", sourcePackageId = PackageIdentifier {pkgName = PackageName "process", pkgVersion = Version {versionBranch = [1,0,1,5], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains libraries for dealing with system processes.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Process","Internals"],ModuleName ["System","Process"],ModuleName ["System","Cmd"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/process-1.0.1.5"], libraryDirs = ["/usr/lib/ghc-7.0.3/process-1.0.1.5"], hsLibraries = ["HSprocess-1.0.1.5"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/process-1.0.1.5/include"], includes = ["runProcess.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/process-1.0.1.5/process.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/process-1.0.1.5"]}),(InstalledPackageId "random-1.0.0.3-7511feaba03eecc22356464da8976c7e",InstalledPackageInfo {installedPackageId = InstalledPackageId "random-1.0.0.3-7511feaba03eecc22356464da8976c7e", sourcePackageId = PackageIdentifier {pkgName = PackageName "random", pkgVersion = Version {versionBranch = [1,0,0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package provides a random number library.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Random"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/random-1.0.0.3"], libraryDirs = ["/usr/lib/ghc-7.0.3/random-1.0.0.3"], hsLibraries = ["HSrandom-1.0.0.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "time-1.2.0.3-3493203919ef238f1a58223fa55b1ceb"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/random-1.0.0.3/random.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/random-1.0.0.3"]}),(InstalledPackageId "regex-base-0.93.2-ea22834f5565d6f16b2cec3e7a63917a",InstalledPackageInfo {installedPackageId = InstalledPackageId "regex-base-0.93.2-ea22834f5565d6f16b2cec3e7a63917a", sourcePackageId = PackageIdentifier {pkgName = PackageName "regex-base", pkgVersion = Version {versionBranch = [0,93,2], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2006, Christopher Kuklewicz", maintainer = "TextRegexLazy@personal.mightyreason.com", author = "Christopher Kuklewicz", stability = "Seems to work, passes a few tests", homepage = "http://sourceforge.net/projects/lazy-regex", pkgUrl = "http://darcs.haskell.org/packages/regex-unstable/regex-base/", description = "Interface API for regex-posix,pcre,parsec,tdfa,dfa", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","Regex","Base"],ModuleName ["Text","Regex","Base","RegexLike"],ModuleName ["Text","Regex","Base","Context"],ModuleName ["Text","Regex","Base","Impl"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/regex-base-0.93.2/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/regex-base-0.93.2/ghc-7.0.3"], hsLibraries = ["HSregex-base-0.93.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/regex-base-0.93.2/regex-base.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-regex-base-doc/html/"]}),(InstalledPackageId "regex-compat-0.95.1-3e607bc84f3c3925033bb247b8ebab65",InstalledPackageInfo {installedPackageId = InstalledPackageId "regex-compat-0.95.1-3e607bc84f3c3925033bb247b8ebab65", sourcePackageId = PackageIdentifier {pkgName = PackageName "regex-compat", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2006, Christopher Kuklewicz", maintainer = "TextRegexLazy@personal.mightyreason.com", author = "Christopher Kuklewicz", stability = "Seems to work, passes a few tests", homepage = "http://sourceforge.net/projects/lazy-regex", pkgUrl = "http://darcs.haskell.org/packages/regex-unstable/regex-compat/", description = "One module layer over regex-posix to replace Text.Regex", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","Regex"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/regex-compat-0.95.1/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/regex-compat-0.95.1/ghc-7.0.3"], hsLibraries = ["HSregex-compat-0.95.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "regex-base-0.93.2-ea22834f5565d6f16b2cec3e7a63917a",InstalledPackageId "regex-posix-0.95.1-a7a63b8d8d2c01aa7eca73b4f7221d81"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/regex-compat-0.95.1/html/regex-compat.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/regex-compat-0.95.1/html"]}),(InstalledPackageId "regex-posix-0.95.1-a7a63b8d8d2c01aa7eca73b4f7221d81",InstalledPackageInfo {installedPackageId = InstalledPackageId "regex-posix-0.95.1-a7a63b8d8d2c01aa7eca73b4f7221d81", sourcePackageId = PackageIdentifier {pkgName = PackageName "regex-posix", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2007-2010, Christopher Kuklewicz", maintainer = "TextRegexLazy@personal.mightyreason.com", author = "Christopher Kuklewicz", stability = "Seems to work, passes a few tests", homepage = "http://sourceforge.net/projects/lazy-regex", pkgUrl = "http://code.haskell.org/regex-posix/", description = "The posix regex backend for regex-base", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","Regex","Posix"],ModuleName ["Text","Regex","Posix","Wrap"],ModuleName ["Text","Regex","Posix","String"],ModuleName ["Text","Regex","Posix","Sequence"],ModuleName ["Text","Regex","Posix","ByteString"],ModuleName ["Text","Regex","Posix","ByteString","Lazy"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/regex-posix-0.95.1/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/regex-posix-0.95.1/ghc-7.0.3"], hsLibraries = ["HSregex-posix-0.95.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageId "regex-base-0.93.2-ea22834f5565d6f16b2cec3e7a63917a"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/regex-posix-0.95.1/html/regex-posix.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/regex-posix-0.95.1/html"]}),(InstalledPackageId "shellish-0.1.4-5b908e0ef83b4d4990e862a2d582acb1",InstalledPackageInfo {installedPackageId = InstalledPackageId "shellish-0.1.4-5b908e0ef83b4d4990e862a2d582acb1", sourcePackageId = PackageIdentifier {pkgName = PackageName "shellish", pkgVersion = Version {versionBranch = [0,1,4], versionTags = []}}, license = BSD3, copyright = "", maintainer = "me@mornfall.net", author = "Petr Rockai <me@mornfall.net>", stability = "", homepage = "http://repos.mornfall.net/shellish", pkgUrl = "", description = "The shellisg package provides a single module for convenient\n\\\"systems\\\" programming in Haskell, similar in spirit to POSIX\nshells or PERL.\n\n* Elegance and safety is sacrificed for conciseness and\nswiss-army-knife-ness.\n\n* The interface exported by Shellish is thread-safe.\n\nOverall, the module should help you to get a job done quickly,\nwithout getting too dirty.", category = "Development", exposed = True, exposedModules = [ModuleName ["Shellish"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/shellish-0.1.4/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/shellish-0.1.4/ghc-7.0.3"], hsLibraries = ["HSshellish-0.1.4"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",InstalledPackageId "process-1.0.1.5-da4848a2eec47420cd09fe9edba7e83c",InstalledPackageId "strict-0.3.2-0f622b96a8041532e7c92ccfb057496f",InstalledPackageId "time-1.2.0.3-3493203919ef238f1a58223fa55b1ceb",InstalledPackageId "unix-compat-0.2.1.1-dd8ef5a3a99896df43dc15cc23b08467"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/shellish-0.1.4/html/shellish.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/shellish-0.1.4/html"]}),(InstalledPackageId "split-0.1.4-25b8dac0b87dfab6d3ad4b8a7e345e45",InstalledPackageInfo {installedPackageId = InstalledPackageId "split-0.1.4-25b8dac0b87dfab6d3ad4b8a7e345e45", sourcePackageId = PackageIdentifier {pkgName = PackageName "split", pkgVersion = Version {versionBranch = [0,1,4], versionTags = []}}, license = BSD3, copyright = "", maintainer = "byorgey@cis.upenn.edu", author = "Brent Yorgey", stability = "stable", homepage = "http://code.haskell.org/~byorgey/code/split", pkgUrl = "", description = "Combinator library and utility functions for splitting lists.", category = "List", exposed = True, exposedModules = [ModuleName ["Data","List","Split"],ModuleName ["Data","List","Split","Internals"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/split-0.1.4/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/split-0.1.4/ghc-7.0.3"], hsLibraries = ["HSsplit-0.1.4"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/split-0.1.4/html/split.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/split-0.1.4/html"]}),(InstalledPackageId "strict-0.3.2-0f622b96a8041532e7c92ccfb057496f",InstalledPackageInfo {installedPackageId = InstalledPackageId "strict-0.3.2-0f622b96a8041532e7c92ccfb057496f", sourcePackageId = PackageIdentifier {pkgName = PackageName "strict", pkgVersion = Version {versionBranch = [0,3,2], versionTags = []}}, license = BSD3, copyright = "(c) 2006-2007 by Roman Leshchinskiy", maintainer = "Don Stewart <dons@galois.com>", author = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", stability = "", homepage = "http://www.cse.unsw.edu.au/~rl/code/strict.html", pkgUrl = "", description = "This package provides strict versions of some standard Haskell data\ntypes (pairs, Maybe and Either). It also contains strict IO\noperations.", category = "Data, System", exposed = True, exposedModules = [ModuleName ["Data","Strict","Tuple"],ModuleName ["Data","Strict","Maybe"],ModuleName ["Data","Strict","Either"],ModuleName ["Data","Strict"],ModuleName ["System","IO","Strict"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/strict-0.3.2/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/strict-0.3.2/ghc-7.0.3"], hsLibraries = ["HSstrict-0.3.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/strict-0.3.2/html/strict.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/strict-0.3.2/html"]}),(InstalledPackageId "syb-0.3-00d8c06f799942b01364e795b2a54d70",InstalledPackageInfo {installedPackageId = InstalledPackageId "syb-0.3-00d8c06f799942b01364e795b2a54d70", sourcePackageId = PackageIdentifier {pkgName = PackageName "syb", pkgVersion = Version {versionBranch = [0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "generics@haskell.org", author = "Ralf Lammel, Simon Peyton Jones", stability = "provisional", homepage = "http://www.cs.uu.nl/wiki/GenericProgramming/SYB", pkgUrl = "", description = "This package contains the generics system described in the\n/Scrap Your Boilerplate/ papers (see\n<http://www.cs.uu.nl/wiki/GenericProgramming/SYB>).\nIt defines the @Data@ class of types permitting folding and unfolding\nof constructor applications, instances of this class for primitive\ntypes, and a variety of traversals.", category = "Generics", exposed = True, exposedModules = [ModuleName ["Data","Generics"],ModuleName ["Data","Generics","Basics"],ModuleName ["Data","Generics","Instances"],ModuleName ["Data","Generics","Aliases"],ModuleName ["Data","Generics","Schemes"],ModuleName ["Data","Generics","Text"],ModuleName ["Data","Generics","Twins"],ModuleName ["Data","Generics","Builders"],ModuleName ["Generics","SYB"],ModuleName ["Generics","SYB","Basics"],ModuleName ["Generics","SYB","Instances"],ModuleName ["Generics","SYB","Aliases"],ModuleName ["Generics","SYB","Schemes"],ModuleName ["Generics","SYB","Text"],ModuleName ["Generics","SYB","Twins"],ModuleName ["Generics","SYB","Builders"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/syb-0.3/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/syb-0.3/ghc-7.0.3"], hsLibraries = ["HSsyb-0.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/syb-0.3/syb.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-syb-doc/html/"]}),(InstalledPackageId "tar-0.3.1.0-e78ec4eae84b755f8263c8666140ed0b",InstalledPackageInfo {installedPackageId = InstalledPackageId "tar-0.3.1.0-e78ec4eae84b755f8263c8666140ed0b", sourcePackageId = PackageIdentifier {pkgName = PackageName "tar", pkgVersion = Version {versionBranch = [0,3,1,0], versionTags = []}}, license = BSD3, copyright = "2007 Bjorn Bringert <bjorn@bringert.net>\n2008-2009 Duncan Coutts <duncan@haskell.org>", maintainer = "Duncan Coutts <duncan@haskell.org>", author = "Bjorn Bringert <bjorn@bringert.net>\nDuncan Coutts <duncan@haskell.org>", stability = "", homepage = "", pkgUrl = "", description = "This library is for working with \\\"@.tar@\\\" archive files. It\ncan read and write a range of common variations of archive\nformat including V7, USTAR, POSIX and GNU formats. It provides\nsupport for packing and unpacking portable archives. This\nmakes it suitable for distribution but not backup because\ndetails like file ownership and exact permissions are not\npreserved.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Archive","Tar"],ModuleName ["Codec","Archive","Tar","Entry"],ModuleName ["Codec","Archive","Tar","Check"]], hiddenModules = [ModuleName ["Codec","Archive","Tar","Types"],ModuleName ["Codec","Archive","Tar","Read"],ModuleName ["Codec","Archive","Tar","Write"],ModuleName ["Codec","Archive","Tar","Pack"],ModuleName ["Codec","Archive","Tar","Unpack"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/tar-0.3.1.0/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/tar-0.3.1.0/ghc-7.0.3"], hsLibraries = ["HStar-0.3.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageId "old-time-1.0.0.6-7f15fd4b960098b2776b8c05bc17519f"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/tar-0.3.1.0/tar.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-tar-doc/html/"]}),(InstalledPackageId "template-haskell-2.5.0.0-957162165c2e6480a35f6d14f7e5220f",InstalledPackageInfo {installedPackageId = InstalledPackageId "template-haskell-2.5.0.0-957162165c2e6480a35f6d14f7e5220f", sourcePackageId = PackageIdentifier {pkgName = PackageName "template-haskell", pkgVersion = Version {versionBranch = [2,5,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "Facilities for manipulating Haskell source code using Template Haskell.", category = "", exposed = True, exposedModules = [ModuleName ["Language","Haskell","TH","Syntax","Internals"],ModuleName ["Language","Haskell","TH","Syntax"],ModuleName ["Language","Haskell","TH","PprLib"],ModuleName ["Language","Haskell","TH","Ppr"],ModuleName ["Language","Haskell","TH","Lib"],ModuleName ["Language","Haskell","TH","Quote"],ModuleName ["Language","Haskell","TH"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/template-haskell-2.5.0.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/template-haskell-2.5.0.0"], hsLibraries = ["HStemplate-haskell-2.5.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageId "pretty-1.0.1.2-f8dc299a95cc94a3e513e27c5b80f951"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/template-haskell-2.5.0.0/template-haskell.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/template-haskell-2.5.0.0"]}),(InstalledPackageId "terminfo-0.3.1.3-d898a3b030f2d808d2a44c5ff0e2a0e1",InstalledPackageInfo {installedPackageId = InstalledPackageId "terminfo-0.3.1.3-d898a3b030f2d808d2a44c5ff0e2a0e1", sourcePackageId = PackageIdentifier {pkgName = PackageName "terminfo", pkgVersion = Version {versionBranch = [0,3,1,3], versionTags = []}}, license = BSD3, copyright = "(c) Judah Jacobson", maintainer = "Judah Jacobson <judah.jacobson@gmail.com>", author = "Judah Jacobson", stability = "Experimental", homepage = "http://code.haskell.org/terminfo", pkgUrl = "", description = "This library provides an interface to the terminfo database (via bindings to the\ncurses library).  Terminfo allows POSIX systems to interact with a variety of terminals\nusing a standard set of capabilities.", category = "User Interfaces", exposed = True, exposedModules = [ModuleName ["System","Console","Terminfo"],ModuleName ["System","Console","Terminfo","Base"],ModuleName ["System","Console","Terminfo","Cursor"],ModuleName ["System","Console","Terminfo","Color"],ModuleName ["System","Console","Terminfo","Edit"],ModuleName ["System","Console","Terminfo","Effects"],ModuleName ["System","Console","Terminfo","Keys"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/terminfo-0.3.1.3/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/terminfo-0.3.1.3/ghc-7.0.3"], hsLibraries = ["HSterminfo-0.3.1.3"], extraLibraries = ["ncurses"], extraGHCiLibraries = [], includeDirs = [], includes = ["ncurses.h","term.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/terminfo-0.3.1.3/terminfo.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-terminfo-doc/html/"]}),(InstalledPackageId "test-framework-0.4.0-3570e5fce12246859c27f7b4577044ed",InstalledPackageInfo {installedPackageId = InstalledPackageId "test-framework-0.4.0-3570e5fce12246859c27f7b4577044ed", sourcePackageId = PackageIdentifier {pkgName = PackageName "test-framework", pkgVersion = Version {versionBranch = [0,4,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "http://batterseapower.github.com/test-framework/", pkgUrl = "", description = "Allows tests such as QuickCheck properties and HUnit test cases to be assembled into test groups, run in\nparallel (but reported in deterministic order, to aid diff interpretation) and filtered and controlled by\ncommand line options. All of this comes with colored test output, progress reporting and test statistics output.", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","Framework"],ModuleName ["Test","Framework","Options"],ModuleName ["Test","Framework","Providers","API"],ModuleName ["Test","Framework","Runners","Console"],ModuleName ["Test","Framework","Runners","Options"],ModuleName ["Test","Framework","Seed"]], hiddenModules = [ModuleName ["Test","Framework","Core"],ModuleName ["Test","Framework","Improving"],ModuleName ["Test","Framework","Runners","Console","Colors"],ModuleName ["Test","Framework","Runners","Console","ProgressBar"],ModuleName ["Test","Framework","Runners","Console","Run"],ModuleName ["Test","Framework","Runners","Console","Statistics"],ModuleName ["Test","Framework","Runners","Console","Table"],ModuleName ["Test","Framework","Runners","Console","Utilities"],ModuleName ["Test","Framework","Runners","Core"],ModuleName ["Test","Framework","Runners","Processors"],ModuleName ["Test","Framework","Runners","Statistics"],ModuleName ["Test","Framework","Runners","TestPattern"],ModuleName ["Test","Framework","Runners","ThreadPool"],ModuleName ["Test","Framework","Runners","TimedConsumption"],ModuleName ["Test","Framework","Runners","XML","JUnitWriter"],ModuleName ["Test","Framework","Runners","XML"],ModuleName ["Test","Framework","Utilities"]], importDirs = ["/home/florent/.cabal/lib/test-framework-0.4.0/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/test-framework-0.4.0/ghc-7.0.3"], hsLibraries = ["HStest-framework-0.4.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1",InstalledPackageId "ansi-wl-pprint-0.6.3-e572fb77d5bf7bcb04a7444a9b54f822",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "hostname-1.0-75071817127be63d3548cd759f6b627c",InstalledPackageId "old-locale-1.0.0.2-161f79060c89cc16ca11576ceb440486",InstalledPackageId "random-1.0.0.3-7511feaba03eecc22356464da8976c7e",InstalledPackageId "regex-posix-0.95.1-a7a63b8d8d2c01aa7eca73b4f7221d81",InstalledPackageId "time-1.2.0.3-3493203919ef238f1a58223fa55b1ceb",InstalledPackageId "xml-1.3.8-f68d711e0aeaecb47b69c384ed0ad21a"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/test-framework-0.4.0/html/test-framework.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/test-framework-0.4.0/html"]}),(InstalledPackageId "test-framework-hunit-0.2.6-ca043988073add792f5cddeb80a08ce9",InstalledPackageInfo {installedPackageId = InstalledPackageId "test-framework-hunit-0.2.6-ca043988073add792f5cddeb80a08ce9", sourcePackageId = PackageIdentifier {pkgName = PackageName "test-framework-hunit", pkgVersion = Version {versionBranch = [0,2,6], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "http://batterseapower.github.com/test-framework/", pkgUrl = "", description = "", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","Framework","Providers","HUnit"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/test-framework-hunit-0.2.6/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/test-framework-hunit-0.2.6/ghc-7.0.3"], hsLibraries = ["HStest-framework-hunit-0.2.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "HUnit-1.2.2.3-8fe95e501b1318ef285c39ed79ca4209",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "test-framework-0.4.0-3570e5fce12246859c27f7b4577044ed"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/test-framework-hunit-0.2.6/html/test-framework-hunit.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/test-framework-hunit-0.2.6/html"]}),(InstalledPackageId "test-framework-quickcheck2-0.2.10-48c3729ab4f2ea19741d59800542207a",InstalledPackageInfo {installedPackageId = InstalledPackageId "test-framework-quickcheck2-0.2.10-48c3729ab4f2ea19741d59800542207a", sourcePackageId = PackageIdentifier {pkgName = PackageName "test-framework-quickcheck2", pkgVersion = Version {versionBranch = [0,2,10], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "http://batterseapower.github.com/test-framework/", pkgUrl = "", description = "", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","Framework","Providers","QuickCheck2"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/test-framework-quickcheck2-0.2.10/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/test-framework-quickcheck2-0.2.10/ghc-7.0.3"], hsLibraries = ["HStest-framework-quickcheck2-0.2.10"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "QuickCheck-2.4.1.1-6b2df10756c9ae534bddffc57c532df8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "random-1.0.0.3-7511feaba03eecc22356464da8976c7e",InstalledPackageId "test-framework-0.4.0-3570e5fce12246859c27f7b4577044ed"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/test-framework-quickcheck2-0.2.10/html/test-framework-quickcheck2.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/test-framework-quickcheck2-0.2.10/html"]}),(InstalledPackageId "text-0.11.0.6-139d7472dd2398472c7d962de013c741",InstalledPackageInfo {installedPackageId = InstalledPackageId "text-0.11.0.6-139d7472dd2398472c7d962de013c741", sourcePackageId = PackageIdentifier {pkgName = PackageName "text", pkgVersion = Version {versionBranch = [0,11,0,6], versionTags = []}}, license = BSD3, copyright = "2008-2009 Tom Harper, 2009-2010 Bryan O'Sullivan", maintainer = "Bryan O'Sullivan <bos@serpentine.com>\nTom Harper <rtomharper@googlemail.com>\nDuncan Coutts <duncan@haskell.org>", author = "Bryan O'Sullivan <bos@serpentine.com>", stability = "", homepage = "http://bitbucket.org/bos/text", pkgUrl = "", description = ".\nAn efficient packed, immutable Unicode text type (both strict and\nlazy), with a powerful loop fusion optimization framework.\n\nThe 'Text' type represents Unicode character strings, in a time and\nspace-efficient manner. This package provides text processing\ncapabilities that are optimized for performance critical use, both\nin terms of large data quantities and high speed.\n\nThe 'Text' type provides character-encoding, type-safe case\nconversion via whole-string case conversion functions. It also\nprovides a range of functions for converting 'Text' values to and from\n'ByteStrings', using several standard encodings.\n\nEfficient locale-sensitive support for text IO is also supported.\n\nThese modules are intended to be imported qualified, to avoid name\nclashes with Prelude functions, e.g.\n\n> import qualified Data.Text as T\n\nTo use an extended and very rich family of functions for working\nwith Unicode text (including normalization, regular expressions,\nnon-standard encodings, text breaking, and locales), see\nthe @text-icu@ package:\n<http://hackage.haskell.org/package/text-icu>", category = "Data, Text", exposed = True, exposedModules = [ModuleName ["Data","Text"],ModuleName ["Data","Text","Array"],ModuleName ["Data","Text","Encoding"],ModuleName ["Data","Text","Encoding","Error"],ModuleName ["Data","Text","Foreign"],ModuleName ["Data","Text","IO"],ModuleName ["Data","Text","Internal"],ModuleName ["Data","Text","Lazy"],ModuleName ["Data","Text","Lazy","Builder"],ModuleName ["Data","Text","Lazy","Encoding"],ModuleName ["Data","Text","Lazy","IO"],ModuleName ["Data","Text","Lazy","Internal"],ModuleName ["Data","Text","Lazy","Read"],ModuleName ["Data","Text","Read"]], hiddenModules = [ModuleName ["Data","Text","Encoding","Fusion"],ModuleName ["Data","Text","Encoding","Fusion","Common"],ModuleName ["Data","Text","Encoding","Utf16"],ModuleName ["Data","Text","Encoding","Utf32"],ModuleName ["Data","Text","Encoding","Utf8"],ModuleName ["Data","Text","Fusion"],ModuleName ["Data","Text","Fusion","CaseMapping"],ModuleName ["Data","Text","Fusion","Common"],ModuleName ["Data","Text","Fusion","Internal"],ModuleName ["Data","Text","Fusion","Size"],ModuleName ["Data","Text","IO","Internal"],ModuleName ["Data","Text","Lazy","Encoding","Fusion"],ModuleName ["Data","Text","Lazy","Fusion"],ModuleName ["Data","Text","Lazy","Search"],ModuleName ["Data","Text","Search"],ModuleName ["Data","Text","Unsafe"],ModuleName ["Data","Text","UnsafeChar"],ModuleName ["Data","Text","UnsafeShift"],ModuleName ["Data","Text","Util"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/text-0.11.0.6/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/text-0.11.0.6/ghc-7.0.3"], hsLibraries = ["HStext-0.11.0.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "deepseq-1.1.0.2-0465f803f7d27d264907e7e03e72a71f",InstalledPackageId "ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/text-0.11.0.6/text.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-text-doc/html/"]}),(InstalledPackageId "time-1.2.0.3-3493203919ef238f1a58223fa55b1ceb",InstalledPackageInfo {installedPackageId = InstalledPackageId "time-1.2.0.3-3493203919ef238f1a58223fa55b1ceb", sourcePackageId = PackageIdentifier {pkgName = PackageName "time", pkgVersion = Version {versionBranch = [1,2,0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "<ashley@semantic.org>", author = "Ashley Yakeley", stability = "stable", homepage = "http://semantic.org/TimeLib/", pkgUrl = "", description = "A time library", category = "System", exposed = True, exposedModules = [ModuleName ["Data","Time","Calendar"],ModuleName ["Data","Time","Calendar","MonthDay"],ModuleName ["Data","Time","Calendar","OrdinalDate"],ModuleName ["Data","Time","Calendar","WeekDate"],ModuleName ["Data","Time","Calendar","Julian"],ModuleName ["Data","Time","Calendar","Easter"],ModuleName ["Data","Time","Clock"],ModuleName ["Data","Time","Clock","POSIX"],ModuleName ["Data","Time","Clock","TAI"],ModuleName ["Data","Time","LocalTime"],ModuleName ["Data","Time","Format"],ModuleName ["Data","Time"]], hiddenModules = [ModuleName ["Data","Time","Calendar","Private"],ModuleName ["Data","Time","Calendar","Days"],ModuleName ["Data","Time","Calendar","Gregorian"],ModuleName ["Data","Time","Calendar","JulianYearDay"],ModuleName ["Data","Time","Clock","Scale"],ModuleName ["Data","Time","Clock","UTC"],ModuleName ["Data","Time","Clock","CTimeval"],ModuleName ["Data","Time","Clock","UTCDiff"],ModuleName ["Data","Time","LocalTime","TimeZone"],ModuleName ["Data","Time","LocalTime","TimeOfDay"],ModuleName ["Data","Time","LocalTime","LocalTime"],ModuleName ["Data","Time","Format","Parse"]], importDirs = ["/usr/lib/ghc-7.0.3/time-1.2.0.3"], libraryDirs = ["/usr/lib/ghc-7.0.3/time-1.2.0.3"], hsLibraries = ["HStime-1.2.0.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/time-1.2.0.3/include"], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "old-locale-1.0.0.2-161f79060c89cc16ca11576ceb440486"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/time-1.2.0.3/time.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/time-1.2.0.3"]}),(InstalledPackageId "transformers-0.2.2.0-4bbbfde1fb5c4eb17cdb1963dda698f3",InstalledPackageInfo {installedPackageId = InstalledPackageId "transformers-0.2.2.0-4bbbfde1fb5c4eb17cdb1963dda698f3", sourcePackageId = PackageIdentifier {pkgName = PackageName "transformers", pkgVersion = Version {versionBranch = [0,2,2,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Ross Paterson <ross@soi.city.ac.uk>", author = "Andy Gill, Ross Paterson", stability = "", homepage = "", pkgUrl = "", description = "Haskell 98 part of a monad transformer library, inspired by the paper\n\\\"Functional Programming with Overloading and Higher-Order Polymorphism\\\",\nby Mark P Jones, in /Advanced School of Functional Programming/, 1995\n(<http://web.cecs.pdx.edu/~mpj/pubs/springschool.html>).\n\nThis part contains the monad transformer class, the concrete monad\ntransformers, operations and liftings.  It can be used on its own\nin Haskell 98 code, or with the monad classes in the @monads-fd@ or\n@monads-tf@ packages, which automatically lift operations introduced\nby monad transformers through other transformers.", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","Monad","IO","Class"],ModuleName ["Control","Monad","Trans","Class"],ModuleName ["Control","Monad","Trans","Cont"],ModuleName ["Control","Monad","Trans","Error"],ModuleName ["Control","Monad","Trans","Identity"],ModuleName ["Control","Monad","Trans","List"],ModuleName ["Control","Monad","Trans","Maybe"],ModuleName ["Control","Monad","Trans","Reader"],ModuleName ["Control","Monad","Trans","RWS"],ModuleName ["Control","Monad","Trans","RWS","Lazy"],ModuleName ["Control","Monad","Trans","RWS","Strict"],ModuleName ["Control","Monad","Trans","State"],ModuleName ["Control","Monad","Trans","State","Lazy"],ModuleName ["Control","Monad","Trans","State","Strict"],ModuleName ["Control","Monad","Trans","Writer"],ModuleName ["Control","Monad","Trans","Writer","Lazy"],ModuleName ["Control","Monad","Trans","Writer","Strict"],ModuleName ["Data","Functor","Compose"],ModuleName ["Data","Functor","Constant"],ModuleName ["Data","Functor","Identity"],ModuleName ["Data","Functor","Product"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/transformers-0.2.2.0/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/transformers-0.2.2.0/ghc-7.0.3"], hsLibraries = ["HStransformers-0.2.2.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/transformers-0.2.2.0/transformers.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-transformers-doc/html/"]}),(InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff",InstalledPackageInfo {installedPackageId = InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff", sourcePackageId = PackageIdentifier {pkgName = PackageName "unix", pkgVersion = Version {versionBranch = [2,4,2,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package gives you access to the set of operating system\nservices standardised by POSIX 1003.1b (or the IEEE Portable\nOperating System Interface for Computing Environments -\nIEEE Std. 1003.1).\n\nThe package is not supported under Windows (except under Cygwin).", category = "System", exposed = True, exposedModules = [ModuleName ["System","Posix"],ModuleName ["System","Posix","DynamicLinker","Module"],ModuleName ["System","Posix","DynamicLinker","Prim"],ModuleName ["System","Posix","Directory"],ModuleName ["System","Posix","DynamicLinker"],ModuleName ["System","Posix","Env"],ModuleName ["System","Posix","Error"],ModuleName ["System","Posix","Files"],ModuleName ["System","Posix","IO"],ModuleName ["System","Posix","Process"],ModuleName ["System","Posix","Process","Internals"],ModuleName ["System","Posix","Resource"],ModuleName ["System","Posix","Temp"],ModuleName ["System","Posix","Terminal"],ModuleName ["System","Posix","Time"],ModuleName ["System","Posix","Unistd"],ModuleName ["System","Posix","User"],ModuleName ["System","Posix","Signals"],ModuleName ["System","Posix","Signals","Exts"],ModuleName ["System","Posix","Semaphore"],ModuleName ["System","Posix","SharedMem"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/unix-2.4.2.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/unix-2.4.2.0"], hsLibraries = ["HSunix-2.4.2.0"], extraLibraries = ["rt","util","dl","pthread"], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/unix-2.4.2.0/include"], includes = ["HsUnix.h","execvpe.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/unix-2.4.2.0/unix.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/unix-2.4.2.0"]}),(InstalledPackageId "unix-compat-0.2.1.1-dd8ef5a3a99896df43dc15cc23b08467",InstalledPackageInfo {installedPackageId = InstalledPackageId "unix-compat-0.2.1.1-dd8ef5a3a99896df43dc15cc23b08467", sourcePackageId = PackageIdentifier {pkgName = PackageName "unix-compat", pkgVersion = Version {versionBranch = [0,2,1,1], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Jacob Stanley <jacob@stanley.io>", author = "Bj\246rn Bringert, Duncan Coutts, Jacob Stanley", stability = "", homepage = "http://github.com/jystic/unix-compat", pkgUrl = "", description = "This package provides portable implementations of parts\nof the unix package. This package re-exports the unix\npackage when available. When it isn't available,\nportable implementations are used.", category = "System", exposed = True, exposedModules = [ModuleName ["System","PosixCompat"],ModuleName ["System","PosixCompat","Extensions"],ModuleName ["System","PosixCompat","Files"],ModuleName ["System","PosixCompat","Time"],ModuleName ["System","PosixCompat","Types"],ModuleName ["System","PosixCompat","User"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/unix-compat-0.2.1.1/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/unix-compat-0.2.1.1/ghc-7.0.3"], hsLibraries = ["HSunix-compat-0.2.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/florent/.cabal/lib/unix-compat-0.2.1.1/ghc-7.0.3/include"], includes = ["HsUnixCompat.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/unix-compat-0.2.1.1/html/unix-compat.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/unix-compat-0.2.1.1/html"]}),(InstalledPackageId "utf8-string-0.3.6-48af7e77f29b232f389e99d0a9a1d604",InstalledPackageInfo {installedPackageId = InstalledPackageId "utf8-string-0.3.6-48af7e77f29b232f389e99d0a9a1d604", sourcePackageId = PackageIdentifier {pkgName = PackageName "utf8-string", pkgVersion = Version {versionBranch = [0,3,6], versionTags = []}}, license = BSD3, copyright = "", maintainer = "emertens@galois.com", author = "Eric Mertens", stability = "", homepage = "http://github.com/glguy/utf8-string/", pkgUrl = "", description = "A UTF8 layer for IO and Strings. The utf8-string\npackage provides operations for encoding UTF8\nstrings to Word8 lists and back, and for reading and\nwriting UTF8 without truncation.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Binary","UTF8","String"],ModuleName ["Codec","Binary","UTF8","Generic"],ModuleName ["System","IO","UTF8"],ModuleName ["System","Environment","UTF8"],ModuleName ["Data","String","UTF8"],ModuleName ["Data","ByteString","UTF8"],ModuleName ["Data","ByteString","Lazy","UTF8"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/utf8-string-0.3.6/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/utf8-string-0.3.6/ghc-7.0.3"], hsLibraries = ["HSutf8-string-0.3.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/utf8-string-0.3.6/utf8-string.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-utf8-string-doc/html/"]}),(InstalledPackageId "vector-0.7.0.1-f3d66d9edbfc37118398d6cdca0ca5ee",InstalledPackageInfo {installedPackageId = InstalledPackageId "vector-0.7.0.1-f3d66d9edbfc37118398d6cdca0ca5ee", sourcePackageId = PackageIdentifier {pkgName = PackageName "vector", pkgVersion = Version {versionBranch = [0,7,0,1], versionTags = []}}, license = BSD3, copyright = "(c) Roman Leshchinskiy 2008-2010", maintainer = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", author = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", stability = "", homepage = "http://code.haskell.org/vector", pkgUrl = "", description = ".\nAn efficient implementation of Int-indexed arrays (both mutable\nand immutable), with a powerful loop fusion optimization framework .\n\nIt is structured as follows:\n\n[@Data.Vector@] Boxed vectors of arbitrary types.\n\n[@Data.Vector.Unboxed@] Unboxed vectors with an adaptive\nrepresentation based on data type families.\n\n[@Data.Vector.Storable@] Unboxed vectors of 'Storable' types.\n\n[@Data.Vector.Primitive@] Unboxed vectors of primitive types as\ndefined by the @primitive@ package. @Data.Vector.Unboxed@ is more\nflexible at no performance cost.\n\n[@Data.Vector.Generic@] Generic interface to the vector types.\n\nThere is also a (draft) tutorial on common uses of vector.\n\n* <http://haskell.org/haskellwiki/Numeric_Haskell:_A_Vector_Tutorial>\n\nPlease use the project trac to submit bug reports and feature\nrequests.\n\n* <http://trac.haskell.org/vector>\n\nChanges in version 0.7.0.1\n\n* Dependency on package ghc removed\n\nChanges in version 0.7\n\n* New functions for freezing, copying and thawing vectors: @freeze@,\n@thaw@, @unsafeThaw@ and @clone@\n\n* @newWith@ and @newUnsafeWith@ on mutable vectors replaced by\n@replicate@\n\n* New function: @concat@\n\n* New function for safe indexing: @(!?)@\n\n* @Monoid@ instances for all vector types\n\n* Significant recycling and fusion improvements\n\n* Bug fixes\n\n* Support for GHC 7.0", category = "Data, Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Vector","Internal","Check"],ModuleName ["Data","Vector","Fusion","Util"],ModuleName ["Data","Vector","Fusion","Stream","Size"],ModuleName ["Data","Vector","Fusion","Stream","Monadic"],ModuleName ["Data","Vector","Fusion","Stream"],ModuleName ["Data","Vector","Generic","Mutable"],ModuleName ["Data","Vector","Generic","Base"],ModuleName ["Data","Vector","Generic","New"],ModuleName ["Data","Vector","Generic"],ModuleName ["Data","Vector","Primitive","Mutable"],ModuleName ["Data","Vector","Primitive"],ModuleName ["Data","Vector","Storable","Internal"],ModuleName ["Data","Vector","Storable","Mutable"],ModuleName ["Data","Vector","Storable"],ModuleName ["Data","Vector","Unboxed","Base"],ModuleName ["Data","Vector","Unboxed","Mutable"],ModuleName ["Data","Vector","Unboxed"],ModuleName ["Data","Vector","Mutable"],ModuleName ["Data","Vector"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/vector-0.7.0.1/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/vector-0.7.0.1/ghc-7.0.3"], hsLibraries = ["HSvector-0.7.0.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/haskell-packages/ghc/lib/vector-0.7.0.1/ghc-7.0.3/include"], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "primitive-0.3.1-c9e4468cc744c0e030467f8c31383955"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/vector-0.7.0.1/vector.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-vector-doc/html/"]}),(InstalledPackageId "xml-1.3.8-f68d711e0aeaecb47b69c384ed0ad21a",InstalledPackageInfo {installedPackageId = InstalledPackageId "xml-1.3.8-f68d711e0aeaecb47b69c384ed0ad21a", sourcePackageId = PackageIdentifier {pkgName = PackageName "xml", pkgVersion = Version {versionBranch = [1,3,8], versionTags = []}}, license = BSD3, copyright = "(c) 2007-2008 Galois Inc.", maintainer = "diatchki@galois.com", author = "Galois Inc.", stability = "", homepage = "http://code.galois.com", pkgUrl = "", description = "A simple XML library.", category = "Text, XML", exposed = True, exposedModules = [ModuleName ["Text","XML","Light"],ModuleName ["Text","XML","Light","Types"],ModuleName ["Text","XML","Light","Output"],ModuleName ["Text","XML","Light","Input"],ModuleName ["Text","XML","Light","Lexer"],ModuleName ["Text","XML","Light","Proc"],ModuleName ["Text","XML","Light","Cursor"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/xml-1.3.8/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/xml-1.3.8/ghc-7.0.3"], hsLibraries = ["HSxml-1.3.8"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/xml-1.3.8/html/xml.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/xml-1.3.8/html"]}),(InstalledPackageId "zlib-0.5.3.1-7e19941cbd00147a79723e25160ffc8b",InstalledPackageInfo {installedPackageId = InstalledPackageId "zlib-0.5.3.1-7e19941cbd00147a79723e25160ffc8b", sourcePackageId = PackageIdentifier {pkgName = PackageName "zlib", pkgVersion = Version {versionBranch = [0,5,3,1], versionTags = []}}, license = BSD3, copyright = "(c) 2006-2008 Duncan Coutts", maintainer = "Duncan Coutts <duncan@community.haskell.org>", author = "Duncan Coutts <duncan@community.haskell.org>", stability = "", homepage = "", pkgUrl = "", description = "This package provides a pure interface for compressing and\ndecompressing streams of data represented as lazy\n'ByteString's. It uses the zlib C library so it has high\nperformance. It supports the \\\"zlib\\\", \\\"gzip\\\" and \\\"raw\\\"\ncompression formats.\n\nIt provides a convenient high level API suitable for most\ntasks and for the few cases where more control is needed it\nprovides access to the full zlib feature set.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Compression","GZip"],ModuleName ["Codec","Compression","Zlib"],ModuleName ["Codec","Compression","Zlib","Raw"],ModuleName ["Codec","Compression","Zlib","Internal"]], hiddenModules = [ModuleName ["Codec","Compression","Zlib","Stream"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/zlib-0.5.3.1/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/zlib-0.5.3.1/ghc-7.0.3"], hsLibraries = ["HSzlib-0.5.3.1"], extraLibraries = ["z"], extraGHCiLibraries = [], includeDirs = [], includes = ["zlib.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/zlib-0.5.3.1/zlib.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-zlib-doc/html/"]})]) (fromList [(PackageName "HTTP",fromList [(Version {versionBranch = [4000,1,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "HTTP-4000.1.1-e1c3272cf0835ac9d10671ed8dc862f9", sourcePackageId = PackageIdentifier {pkgName = PackageName "HTTP", pkgVersion = Version {versionBranch = [4000,1,1], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2002, Warrick Gray\nCopyright (c) 2002-2005, Ian Lynagh\nCopyright (c) 2003-2006, Bjorn Bringert\nCopyright (c) 2004, Andre Furtado\nCopyright (c) 2004, Ganesh Sittampalam\nCopyright (c) 2004-2005, Dominic Steinitz\nCopyright 2007 Robin Bate Boerop\nCopyright 2008- Sigbjorn Finne", maintainer = "Ganesh Sittampalam <ganesh@earth.li>", author = "Warrick Gray <warrick.gray@hotmail.com>", stability = "", homepage = "http://projects.haskell.org/http/", pkgUrl = "", description = "The HTTP package supports client-side web programming in Haskell. It lets you set up\nHTTP connections, transmitting requests and processing the responses coming back, all\nfrom within the comforts of Haskell. It's dependent on the network package to operate,\nbut other than that, the implementation is all written in Haskell.\n\nA basic API for issuing single HTTP requests + receiving responses is provided. On top\nof that, a session-level abstraction is also on offer  (the @BrowserAction@ monad);\nit taking care of handling the management of persistent connections, proxies,\nstate (cookies) and authentication credentials required to handle multi-step\ninteractions with a web server.\n\nThe representation of the bytes flowing across is extensible via the use of a type class,\nletting you pick the representation of requests and responses that best fits your use.\nSome pre-packaged, common instances are provided for you (@ByteString@, @String@.)\n\nHere's an example use:\n\n>\n>    do\n>      rsp <- Network.HTTP.simpleHTTP (getRequest \"http://www.haskell.org/\")\n>              -- fetch document and return it (as a 'String'.)\n>      fmap (take 100) (getResponseBody rsp)\n>\n>    do\n>      rsp <- Network.Browser.browse $ do\n>               setAllowRedirects True -- handle HTTP redirects\n>               request $ getRequest \"http://google.com/\"\n>      fmap (take 100) (getResponseBody rsp)\n>\n\nGit repository available at <git://github.com/haskell/HTTP.git>", category = "Network", exposed = True, exposedModules = [ModuleName ["Network","BufferType"],ModuleName ["Network","Stream"],ModuleName ["Network","StreamDebugger"],ModuleName ["Network","StreamSocket"],ModuleName ["Network","TCP"],ModuleName ["Network","HTTP"],ModuleName ["Network","HTTP","Headers"],ModuleName ["Network","HTTP","Base"],ModuleName ["Network","HTTP","Stream"],ModuleName ["Network","HTTP","Auth"],ModuleName ["Network","HTTP","Cookie"],ModuleName ["Network","HTTP","Proxy"],ModuleName ["Network","HTTP","HandleStream"],ModuleName ["Network","Browser"]], hiddenModules = [ModuleName ["Network","HTTP","Base64"],ModuleName ["Network","HTTP","MD5"],ModuleName ["Network","HTTP","MD5Aux"],ModuleName ["Network","HTTP","Utils"]], importDirs = ["/home/florent/.cabal/lib/HTTP-4000.1.1/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/HTTP-4000.1.1/ghc-7.0.3"], hsLibraries = ["HSHTTP-4000.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",InstalledPackageId "network-2.3.0.2-824dddd7e2ce0e065568730d1c080c4a",InstalledPackageId "old-time-1.0.0.6-7f15fd4b960098b2776b8c05bc17519f",InstalledPackageId "parsec-3.1.1-33474162d2bbd21ea1e4f1e3830243d8"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/HTTP-4000.1.1/html/HTTP.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/HTTP-4000.1.1/html"]}])]),(PackageName "HUnit",fromList [(Version {versionBranch = [1,2,2,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "HUnit-1.2.2.3-8fe95e501b1318ef285c39ed79ca4209", sourcePackageId = PackageIdentifier {pkgName = PackageName "HUnit", pkgVersion = Version {versionBranch = [1,2,2,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "hunit@richardg.name", author = "Dean Herington", stability = "stable", homepage = "http://hunit.sourceforge.net/", pkgUrl = "", description = "HUnit is a unit testing framework for Haskell, inspired by the\nJUnit tool for Java, see: <http://www.junit.org>.", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","HUnit","Base"],ModuleName ["Test","HUnit","Lang"],ModuleName ["Test","HUnit","Terminal"],ModuleName ["Test","HUnit","Text"],ModuleName ["Test","HUnit"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/HUnit-1.2.2.3/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/HUnit-1.2.2.3/ghc-7.0.3"], hsLibraries = ["HSHUnit-1.2.2.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/hunit-1.2.2.3/HUnit.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-hunit-doc/html/"]}])]),(PackageName "QuickCheck",fromList [(Version {versionBranch = [2,4,1,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "QuickCheck-2.4.1.1-6b2df10756c9ae534bddffc57c532df8", sourcePackageId = PackageIdentifier {pkgName = PackageName "QuickCheck", pkgVersion = Version {versionBranch = [2,4,1,1], versionTags = []}}, license = BSD3, copyright = "2000-2011 Koen Claessen, 2006-2008 Bj\246rn Bringert, 2009-2011 Nick Smallbone", maintainer = "QuickCheck developers <quickcheck@projects.haskell.org>", author = "Koen Claessen <koen@chalmers.se>", stability = "", homepage = "http://code.haskell.org/QuickCheck", pkgUrl = "", description = "QuickCheck is a library for random testing of program properties.\n\nThe programmer provides a specification of the program, in\nthe form of properties which functions should satisfy, and\nQuickCheck then tests that the properties hold in a large number\nof randomly generated cases.\n\nSpecifications are expressed in\nHaskell, using combinators defined in the QuickCheck library.\nQuickCheck provides combinators to define properties, observe\nthe distribution of test data, and define test\ndata generators.", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","QuickCheck","All"],ModuleName ["Test","QuickCheck","Function"],ModuleName ["Test","QuickCheck"],ModuleName ["Test","QuickCheck","Arbitrary"],ModuleName ["Test","QuickCheck","Gen"],ModuleName ["Test","QuickCheck","Monadic"],ModuleName ["Test","QuickCheck","Modifiers"],ModuleName ["Test","QuickCheck","Property"],ModuleName ["Test","QuickCheck","Test"],ModuleName ["Test","QuickCheck","Text"],ModuleName ["Test","QuickCheck","Poly"],ModuleName ["Test","QuickCheck","State"]], hiddenModules = [ModuleName ["Test","QuickCheck","Exception"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/QuickCheck-2.4.1.1/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/QuickCheck-2.4.1.1/ghc-7.0.3"], hsLibraries = ["HSQuickCheck-2.4.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "random-1.0.0.3-7511feaba03eecc22356464da8976c7e",InstalledPackageId "template-haskell-2.5.0.0-957162165c2e6480a35f6d14f7e5220f"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/quickcheck2-2.4.1.1/QuickCheck.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-quickcheck2-doc/html/"]}])]),(PackageName "ansi-terminal",fromList [(Version {versionBranch = [0,5,5], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1", sourcePackageId = PackageIdentifier {pkgName = PackageName "ansi-terminal", pkgVersion = Version {versionBranch = [0,5,5], versionTags = []}}, license = BSD3, copyright = "", maintainer = "batterseapower@hotmail.com", author = "Max Bolingbroke", stability = "", homepage = "http://batterseapower.github.com/ansi-terminal", pkgUrl = "", description = "ANSI terminal support for Haskell: allows cursor movement, screen clearing, color output showing or hiding the cursor, and\nchanging the title. Compatible with Windows and those Unixes with ANSI terminals, but only GHC is supported as a compiler.", category = "User Interfaces", exposed = True, exposedModules = [ModuleName ["System","Console","ANSI"]], hiddenModules = [ModuleName ["System","Console","ANSI","Unix"],ModuleName ["System","Console","ANSI","Common"]], importDirs = ["/home/florent/.cabal/lib/ansi-terminal-0.5.5/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/ansi-terminal-0.5.5/ghc-7.0.3"], hsLibraries = ["HSansi-terminal-0.5.5"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/ansi-terminal-0.5.5/html/ansi-terminal.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/ansi-terminal-0.5.5/html"]}])]),(PackageName "ansi-wl-pprint",fromList [(Version {versionBranch = [0,6,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "ansi-wl-pprint-0.6.3-e572fb77d5bf7bcb04a7444a9b54f822", sourcePackageId = PackageIdentifier {pkgName = PackageName "ansi-wl-pprint", pkgVersion = Version {versionBranch = [0,6,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "batterseapower@hotmail.com", author = "Daan Leijen, Max Bolingbroke", stability = "", homepage = "http://github.com/batterseapower/ansi-wl-pprint", pkgUrl = "", description = "This is a pretty printing library based on Wadler's paper \"A Prettier Printer\". It has been enhanced with support for ANSI terminal colored output using the ansi-terminal package.", category = "User Interfaces, Text", exposed = True, exposedModules = [ModuleName ["Text","PrettyPrint","ANSI","Leijen"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/ansi-wl-pprint-0.6.3/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/ansi-wl-pprint-0.6.3/ghc-7.0.3"], hsLibraries = ["HSansi-wl-pprint-0.6.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/ansi-wl-pprint-0.6.3/html/ansi-wl-pprint.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/ansi-wl-pprint-0.6.3/html"]}])]),(PackageName "array",fromList [(Version {versionBranch = [0,3,0,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8", sourcePackageId = PackageIdentifier {pkgName = PackageName "array", pkgVersion = Version {versionBranch = [0,3,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package defines the classes @IArray@ of immutable arrays and\n@MArray@ of arrays mutable within appropriate monads, as well as\nsome instances of these classes.", category = "Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Array","Base"],ModuleName ["Data","Array","IArray"],ModuleName ["Data","Array","IO"],ModuleName ["Data","Array","IO","Internals"],ModuleName ["Data","Array","MArray"],ModuleName ["Data","Array","ST"],ModuleName ["Data","Array","Storable"],ModuleName ["Data","Array","Unboxed"],ModuleName ["Data","Array"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/array-0.3.0.2"], libraryDirs = ["/usr/lib/ghc-7.0.3/array-0.3.0.2"], hsLibraries = ["HSarray-0.3.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/array-0.3.0.2/array.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/array-0.3.0.2"]}])]),(PackageName "base",fromList [(Version {versionBranch = [4,3,1,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c", sourcePackageId = PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,3,1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains the Prelude and its support libraries,\nand a large collection of useful libraries ranging from data\nstructures to parsing combinators and debugging utilities.", category = "", exposed = True, exposedModules = [ModuleName ["Foreign","Concurrent"],ModuleName ["GHC","Arr"],ModuleName ["GHC","Base"],ModuleName ["GHC","Classes"],ModuleName ["GHC","Conc"],ModuleName ["GHC","Conc","IO"],ModuleName ["GHC","Conc","Signal"],ModuleName ["GHC","Conc","Sync"],ModuleName ["GHC","ConsoleHandler"],ModuleName ["GHC","Constants"],ModuleName ["GHC","Desugar"],ModuleName ["GHC","Enum"],ModuleName ["GHC","Environment"],ModuleName ["GHC","Err"],ModuleName ["GHC","Exception"],ModuleName ["GHC","Exts"],ModuleName ["GHC","Float"],ModuleName ["GHC","ForeignPtr"],ModuleName ["GHC","MVar"],ModuleName ["GHC","IO"],ModuleName ["GHC","IO","IOMode"],ModuleName ["GHC","IO","Buffer"],ModuleName ["GHC","IO","Device"],ModuleName ["GHC","IO","BufferedIO"],ModuleName ["GHC","IO","FD"],ModuleName ["GHC","IO","Exception"],ModuleName ["GHC","IO","Encoding"],ModuleName ["GHC","IO","Encoding","Latin1"],ModuleName ["GHC","IO","Encoding","UTF8"],ModuleName ["GHC","IO","Encoding","UTF16"],ModuleName ["GHC","IO","Encoding","UTF32"],ModuleName ["GHC","IO","Encoding","Types"],ModuleName ["GHC","IO","Encoding","Iconv"],ModuleName ["GHC","IO","Encoding","CodePage"],ModuleName ["GHC","IO","Handle"],ModuleName ["GHC","IO","Handle","Types"],ModuleName ["GHC","IO","Handle","Internals"],ModuleName ["GHC","IO","Handle","FD"],ModuleName ["GHC","IO","Handle","Text"],ModuleName ["GHC","IOBase"],ModuleName ["GHC","Handle"],ModuleName ["GHC","IORef"],ModuleName ["GHC","IOArray"],ModuleName ["GHC","Int"],ModuleName ["GHC","List"],ModuleName ["GHC","Num"],ModuleName ["GHC","PArr"],ModuleName ["GHC","Pack"],ModuleName ["GHC","Ptr"],ModuleName ["GHC","Read"],ModuleName ["GHC","Real"],ModuleName ["GHC","ST"],ModuleName ["GHC","STRef"],ModuleName ["GHC","Show"],ModuleName ["GHC","Stable"],ModuleName ["GHC","Storable"],ModuleName ["GHC","TopHandler"],ModuleName ["GHC","Unicode"],ModuleName ["GHC","Weak"],ModuleName ["GHC","Word"],ModuleName ["System","Timeout"],ModuleName ["System","Event"],ModuleName ["Control","Applicative"],ModuleName ["Control","Arrow"],ModuleName ["Control","Category"],ModuleName ["Control","Concurrent"],ModuleName ["Control","Concurrent","Chan"],ModuleName ["Control","Concurrent","MVar"],ModuleName ["Control","Concurrent","QSem"],ModuleName ["Control","Concurrent","QSemN"],ModuleName ["Control","Concurrent","SampleVar"],ModuleName ["Control","Exception"],ModuleName ["Control","Exception","Base"],ModuleName ["Control","OldException"],ModuleName ["Control","Monad"],ModuleName ["Control","Monad","Fix"],ModuleName ["Control","Monad","Instances"],ModuleName ["Control","Monad","ST"],ModuleName ["Control","Monad","ST","Lazy"],ModuleName ["Control","Monad","ST","Strict"],ModuleName ["Data","Bits"],ModuleName ["Data","Bool"],ModuleName ["Data","Char"],ModuleName ["Data","Complex"],ModuleName ["Data","Dynamic"],ModuleName ["Data","Either"],ModuleName ["Data","Eq"],ModuleName ["Data","Data"],ModuleName ["Data","Fixed"],ModuleName ["Data","Foldable"],ModuleName ["Data","Function"],ModuleName ["Data","Functor"],ModuleName ["Data","HashTable"],ModuleName ["Data","IORef"],ModuleName ["Data","Int"],ModuleName ["Data","Ix"],ModuleName ["Data","List"],ModuleName ["Data","Maybe"],ModuleName ["Data","Monoid"],ModuleName ["Data","Ord"],ModuleName ["Data","Ratio"],ModuleName ["Data","STRef"],ModuleName ["Data","STRef","Lazy"],ModuleName ["Data","STRef","Strict"],ModuleName ["Data","String"],ModuleName ["Data","Traversable"],ModuleName ["Data","Tuple"],ModuleName ["Data","Typeable"],ModuleName ["Data","Unique"],ModuleName ["Data","Version"],ModuleName ["Data","Word"],ModuleName ["Debug","Trace"],ModuleName ["Foreign"],ModuleName ["Foreign","C"],ModuleName ["Foreign","C","Error"],ModuleName ["Foreign","C","String"],ModuleName ["Foreign","C","Types"],ModuleName ["Foreign","ForeignPtr"],ModuleName ["Foreign","Marshal"],ModuleName ["Foreign","Marshal","Alloc"],ModuleName ["Foreign","Marshal","Array"],ModuleName ["Foreign","Marshal","Error"],ModuleName ["Foreign","Marshal","Pool"],ModuleName ["Foreign","Marshal","Utils"],ModuleName ["Foreign","Ptr"],ModuleName ["Foreign","StablePtr"],ModuleName ["Foreign","Storable"],ModuleName ["Numeric"],ModuleName ["Prelude"],ModuleName ["System","Console","GetOpt"],ModuleName ["System","CPUTime"],ModuleName ["System","Environment"],ModuleName ["System","Exit"],ModuleName ["System","IO"],ModuleName ["System","IO","Error"],ModuleName ["System","IO","Unsafe"],ModuleName ["System","Info"],ModuleName ["System","Mem"],ModuleName ["System","Mem","StableName"],ModuleName ["System","Mem","Weak"],ModuleName ["System","Posix","Internals"],ModuleName ["System","Posix","Types"],ModuleName ["Text","ParserCombinators","ReadP"],ModuleName ["Text","ParserCombinators","ReadPrec"],ModuleName ["Text","Printf"],ModuleName ["Text","Read"],ModuleName ["Text","Read","Lex"],ModuleName ["Text","Show"],ModuleName ["Text","Show","Functions"],ModuleName ["Unsafe","Coerce"]], hiddenModules = [ModuleName ["System","Event","Array"],ModuleName ["System","Event","Clock"],ModuleName ["System","Event","Control"],ModuleName ["System","Event","EPoll"],ModuleName ["System","Event","IntMap"],ModuleName ["System","Event","Internal"],ModuleName ["System","Event","KQueue"],ModuleName ["System","Event","Manager"],ModuleName ["System","Event","PSQ"],ModuleName ["System","Event","Poll"],ModuleName ["System","Event","Thread"],ModuleName ["System","Event","Unique"]], importDirs = ["/usr/lib/ghc-7.0.3/base-4.3.1.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/base-4.3.1.0"], hsLibraries = ["HSbase-4.3.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/base-4.3.1.0/include"], includes = ["HsBase.h"], depends = [InstalledPackageId "ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba",InstalledPackageId "integer-gmp-0.2.0.3-298c59ba68b7aaa7e76ae5b1fe5e876e",InstalledPackageId "builtin_rts"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/base-4.3.1.0/base.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/base-4.3.1.0"]}])]),(PackageName "binary",fromList [(Version {versionBranch = [0,5,0,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "binary-0.5.0.2-b471fd4ae9e6a992eed4cf652dba019b", sourcePackageId = PackageIdentifier {pkgName = PackageName "binary", pkgVersion = Version {versionBranch = [0,5,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Lennart Kolmodin, Don Stewart <dons@galois.com>", author = "Lennart Kolmodin <kolmodin@dtek.chalmers.se>", stability = "provisional", homepage = "http://code.haskell.org/binary/", pkgUrl = "", description = "Efficient, pure binary serialisation using lazy ByteStrings.\nHaskell values may be encoded to and from binary formats,\nwritten to disk as binary, or sent over the network.\nSerialisation speeds of over 1 G\\/sec have been observed,\nso this library should be suitable for high performance\nscenarios.", category = "Data, Parsing", exposed = True, exposedModules = [ModuleName ["Data","Binary"],ModuleName ["Data","Binary","Put"],ModuleName ["Data","Binary","Get"],ModuleName ["Data","Binary","Builder"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/binary-0.5.0.2/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/binary-0.5.0.2/ghc-7.0.3"], hsLibraries = ["HSbinary-0.5.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/binary-0.5.0.2/binary.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-binary-doc/html/"]}])]),(PackageName "bytestring",fromList [(Version {versionBranch = [0,9,1,10], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4", sourcePackageId = PackageIdentifier {pkgName = PackageName "bytestring", pkgVersion = Version {versionBranch = [0,9,1,10], versionTags = []}}, license = BSD3, copyright = "Copyright (c) Don Stewart   2005-2009,\n(c) Duncan Coutts 2006-2009,\n(c) David Roundy  2003-2005.", maintainer = "dons@galois.com, duncan@haskell.org", author = "Don Stewart, Duncan Coutts", stability = "", homepage = "http://www.cse.unsw.edu.au/~dons/fps.html", pkgUrl = "", description = "A time and space-efficient implementation of byte vectors using\npacked Word8 arrays, suitable for high performance use, both in terms\nof large data quantities, or high speed requirements. Byte vectors\nare encoded as strict 'Word8' arrays of bytes, and lazy lists of\nstrict chunks, held in a 'ForeignPtr', and can be passed between C\nand Haskell with little effort.\n\nTest coverage data for this library is available at:\n<http://code.haskell.org/~dons/tests/bytestring/hpc_index.html>", category = "Data", exposed = True, exposedModules = [ModuleName ["Data","ByteString"],ModuleName ["Data","ByteString","Char8"],ModuleName ["Data","ByteString","Unsafe"],ModuleName ["Data","ByteString","Internal"],ModuleName ["Data","ByteString","Lazy"],ModuleName ["Data","ByteString","Lazy","Char8"],ModuleName ["Data","ByteString","Lazy","Internal"],ModuleName ["Data","ByteString","Fusion"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/bytestring-0.9.1.10"], libraryDirs = ["/usr/lib/ghc-7.0.3/bytestring-0.9.1.10"], hsLibraries = ["HSbytestring-0.9.1.10"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/bytestring-0.9.1.10/include"], includes = ["fpstring.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/bytestring-0.9.1.10/bytestring.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.1.10"]}])]),(PackageName "cmdlib",fromList [(Version {versionBranch = [0,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "cmdlib-0.3-30b0b48ba7f087d1e853499831429cfa", sourcePackageId = PackageIdentifier {pkgName = PackageName "cmdlib", pkgVersion = Version {versionBranch = [0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "me@mornfall.net", author = "Petr Rockai", stability = "", homepage = "", pkgUrl = "", description = "A commandline parsing library, based on getopt. Comes with a\npowerful attribute system. Supports complex interfaces with many\noptions and commands, with option & command grouping, with simple\nand convenient API. Even though quite powerful, it strives to keep\nsimple things simple. The library uses \"System.Console.GetOpt\" as\nits backend.\n\nIn comparison to the other commandline handling libraries:\n\nCompared to cmdargs, cmdlib has a pure attribute system and is\nbased on GetOpt for help formatting & argument parsing. Cmdlib may\nalso be more extendable due to typeclass design, and can use\nuser-supplied types for option arguments.\n\nCmdargs >= 0.4 can optionally use a pure attribute system,\nalthough this is clearly an add-on and the API is a second-class\ncitizen in relation to the impure version.\n\nGetOpt and parseargs both require explicit flag representation, so\nthey live a level below cmdlib. GetOpt is in fact used as a\nbackend by cmdlib.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Console","CmdLib"]], hiddenModules = [ModuleName ["System","Console","CmdLib","Attribute"],ModuleName ["System","Console","CmdLib","Flag"],ModuleName ["System","Console","CmdLib","Command"],ModuleName ["System","Console","CmdLib","ADTs"],ModuleName ["System","Console","CmdLib","Record"]], importDirs = ["/home/florent/.cabal/lib/cmdlib-0.3/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/cmdlib-0.3/ghc-7.0.3"], hsLibraries = ["HScmdlib-0.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",InstalledPackageId "split-0.1.4-25b8dac0b87dfab6d3ad4b8a7e345e45",InstalledPackageId "syb-0.3-00d8c06f799942b01364e795b2a54d70"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/cmdlib-0.3/html/cmdlib.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/cmdlib-0.3/html"]}])]),(PackageName "containers",fromList [(Version {versionBranch = [0,4,0,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e", sourcePackageId = PackageIdentifier {pkgName = PackageName "containers", pkgVersion = Version {versionBranch = [0,4,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains efficient general-purpose implementations\nof various basic immutable container types.  The declared cost of\neach operation is either worst-case or amortized, but remains\nvalid even if structures are shared.", category = "Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Graph"],ModuleName ["Data","Sequence"],ModuleName ["Data","Tree"],ModuleName ["Data","IntMap"],ModuleName ["Data","IntSet"],ModuleName ["Data","Map"],ModuleName ["Data","Set"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/containers-0.4.0.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/containers-0.4.0.0"], hsLibraries = ["HScontainers-0.4.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/containers-0.4.0.0/containers.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/containers-0.4.0.0"]}])]),(PackageName "dataenc",fromList [(Version {versionBranch = [0,13,0,4], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "dataenc-0.13.0.4-35faf9ef6ab96b77e6a414944a7a49d8", sourcePackageId = PackageIdentifier {pkgName = PackageName "dataenc", pkgVersion = Version {versionBranch = [0,13,0,4], versionTags = []}}, license = BSD3, copyright = "Magnus Therning, 2007-2009", maintainer = "magnus@therning.org", author = "Magnus Therning", stability = "", homepage = "http://www.haskell.org/haskellwiki/Library/Data_encoding", pkgUrl = "", description = "Data encoding library currently providing Base16, Base32,\nBase32Hex, Base64, Base64Url, Base85, Python string escaping,\nQuoted-Printable, URL encoding, uuencode, xxencode, and yEncoding.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Binary","Base16"],ModuleName ["Codec","Binary","Base32"],ModuleName ["Codec","Binary","Base32Hex"],ModuleName ["Codec","Binary","Base64"],ModuleName ["Codec","Binary","Base64Url"],ModuleName ["Codec","Binary","Base85"],ModuleName ["Codec","Binary","DataEncoding"],ModuleName ["Codec","Binary","PythonString"],ModuleName ["Codec","Binary","QuotedPrintable"],ModuleName ["Codec","Binary","Url"],ModuleName ["Codec","Binary","Uu"],ModuleName ["Codec","Binary","Xx"],ModuleName ["Codec","Binary","Yenc"]], hiddenModules = [ModuleName ["Codec","Binary","Util"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/dataenc-0.13.0.4/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/dataenc-0.13.0.4/ghc-7.0.3"], hsLibraries = ["HSdataenc-0.13.0.4"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/dataenc-0.13.0.4/dataenc.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-dataenc-doc/html/"]}])]),(PackageName "deepseq",fromList [(Version {versionBranch = [1,1,0,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "deepseq-1.1.0.2-0465f803f7d27d264907e7e03e72a71f", sourcePackageId = PackageIdentifier {pkgName = PackageName "deepseq", pkgVersion = Version {versionBranch = [1,1,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package provides methods for fully evaluating data structures\n(\\\"deep evaluation\\\"). Deep evaluation is often used for adding\nstrictness to a program, e.g. in order to force pending exceptions,\nremove space leaks, or force lazy I/O to happen. It is also useful\nin parallel programs, to ensure pending work does not migrate to the\nwrong thread.\n\nThe primary use of this package is via the 'deepseq' function, a\n\\\"deep\\\" version of 'seq'. It is implemented on top of an 'NFData'\ntypeclass (\\\"Normal Form Data\\\", data structures with no unevaluated\ncomponents) which defines strategies for fully evaluating different\ndata types.", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","DeepSeq"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/deepseq-1.1.0.2/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/deepseq-1.1.0.2/ghc-7.0.3"], hsLibraries = ["HSdeepseq-1.1.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/deepseq-1.1.0.2/deepseq.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-deepseq-doc/html/"]}])]),(PackageName "directory",fromList [(Version {versionBranch = [1,1,0,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85", sourcePackageId = PackageIdentifier {pkgName = PackageName "directory", pkgVersion = Version {versionBranch = [1,1,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package provides a library for handling directories.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Directory"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/directory-1.1.0.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/directory-1.1.0.0"], hsLibraries = ["HSdirectory-1.1.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/directory-1.1.0.0/include"], includes = ["HsDirectory.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageId "old-time-1.0.0.6-7f15fd4b960098b2776b8c05bc17519f",InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/directory-1.1.0.0/directory.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/directory-1.1.0.0"]}])]),(PackageName "extensible-exceptions",fromList [(Version {versionBranch = [0,1,1,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831", sourcePackageId = PackageIdentifier {pkgName = PackageName "extensible-exceptions", pkgVersion = Version {versionBranch = [0,1,1,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package provides extensible exceptions for both new and\nold versions of GHC (i.e., < 6.10).", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","Exception","Extensible"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/extensible-exceptions-0.1.1.2"], libraryDirs = ["/usr/lib/ghc-7.0.3/extensible-exceptions-0.1.1.2"], hsLibraries = ["HSextensible-exceptions-0.1.1.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/extensible-exceptions-0.1.1.2/extensible-exceptions.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/extensible-exceptions-0.1.1.2"]}])]),(PackageName "filepath",fromList [(Version {versionBranch = [1,2,0,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653", sourcePackageId = PackageIdentifier {pkgName = PackageName "filepath", pkgVersion = Version {versionBranch = [1,2,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "", author = "Neil Mitchell", stability = "", homepage = "http://www-users.cs.york.ac.uk/~ndm/filepath/", pkgUrl = "", description = "", category = "System", exposed = True, exposedModules = [ModuleName ["System","FilePath"],ModuleName ["System","FilePath","Posix"],ModuleName ["System","FilePath","Windows"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/filepath-1.2.0.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/filepath-1.2.0.0"], hsLibraries = ["HSfilepath-1.2.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/filepath-1.2.0.0/filepath.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/filepath-1.2.0.0"]}])]),(PackageName "ghc-prim",fromList [(Version {versionBranch = [0,2,0,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba", sourcePackageId = PackageIdentifier {pkgName = PackageName "ghc-prim", pkgVersion = Version {versionBranch = [0,2,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "GHC primitives.", category = "", exposed = True, exposedModules = [ModuleName ["GHC","Prim"],ModuleName ["GHC","Bool"],ModuleName ["GHC","Debug"],ModuleName ["GHC","Generics"],ModuleName ["GHC","Magic"],ModuleName ["GHC","Ordering"],ModuleName ["GHC","PrimopWrappers"],ModuleName ["GHC","IntWord32"],ModuleName ["GHC","IntWord64"],ModuleName ["GHC","Tuple"],ModuleName ["GHC","Types"],ModuleName ["GHC","Unit"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/ghc-prim-0.2.0.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/ghc-prim-0.2.0.0"], hsLibraries = ["HSghc-prim-0.2.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "builtin_rts"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/ghc-prim-0.2.0.0/ghc-prim.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/ghc-prim-0.2.0.0"]}])]),(PackageName "hashed-storage",fromList [(Version {versionBranch = [0,5,7], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "hashed-storage-0.5.7-f2baae72d60d89cab6d2b5facd274d47", sourcePackageId = PackageIdentifier {pkgName = PackageName "hashed-storage", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}, license = BSD3, copyright = "2009 Petr Rockai <me@mornfall.net>", maintainer = "Petr Rockai <me@mornfall.net>", author = "Petr Rockai <me@mornfall.net>", stability = "", homepage = "", pkgUrl = "", description = "Support code for reading and manipulating hashed file storage\n(where each file and directory is associated with a\ncryptographic hash, for corruption-resistant storage and fast\ncomparisons).\n\nThe supported storage formats include darcs hashed pristine, a\nplain filesystem tree and an indexed plain tree (where the index\nmaintains hashes of the plain files and directories).", category = "System", exposed = True, exposedModules = [ModuleName ["Storage","Hashed"],ModuleName ["Storage","Hashed","AnchoredPath"],ModuleName ["Storage","Hashed","Index"],ModuleName ["Storage","Hashed","Monad"],ModuleName ["Storage","Hashed","Tree"],ModuleName ["Storage","Hashed","Hash"],ModuleName ["Storage","Hashed","Packed"],ModuleName ["Storage","Hashed","Plain"],ModuleName ["Storage","Hashed","Darcs"]], hiddenModules = [ModuleName ["Bundled","Posix"],ModuleName ["Bundled","SHA256"],ModuleName ["Storage","Hashed","Utils"]], importDirs = ["/home/florent/.cabal/lib/hashed-storage-0.5.7/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/hashed-storage-0.5.7/ghc-7.0.3"], hsLibraries = ["HShashed-storage-0.5.7"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "binary-0.5.0.2-b471fd4ae9e6a992eed4cf652dba019b",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageId "dataenc-0.13.0.4-35faf9ef6ab96b77e6a414944a7a49d8",InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageId "mmap-0.5.7-127e379f104e2b945de5325ba3158467",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",InstalledPackageId "zlib-0.5.3.1-7e19941cbd00147a79723e25160ffc8b"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/hashed-storage-0.5.7/html/hashed-storage.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/hashed-storage-0.5.7/html"]}])]),(PackageName "haskeline",fromList [(Version {versionBranch = [0,6,4,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "haskeline-0.6.4.0-ea83f091fcdad61446c62afc5c94a9ed", sourcePackageId = PackageIdentifier {pkgName = PackageName "haskeline", pkgVersion = Version {versionBranch = [0,6,4,0], versionTags = []}}, license = BSD3, copyright = "(c) Judah Jacobson", maintainer = "Judah Jacobson <judah.jacobson@gmail.com>", author = "Judah Jacobson", stability = "Experimental", homepage = "http://trac.haskell.org/haskeline", pkgUrl = "", description = "Haskeline provides a user interface for line input in command-line\nprograms.  This library is similar in purpose to readline, but since\nit is written in Haskell it is (hopefully) more easily used in other\nHaskell programs.\n\nHaskeline runs both on POSIX-compatible systems and on Windows.", category = "User Interfaces", exposed = True, exposedModules = [ModuleName ["System","Console","Haskeline"],ModuleName ["System","Console","Haskeline","Completion"],ModuleName ["System","Console","Haskeline","Encoding"],ModuleName ["System","Console","Haskeline","MonadException"],ModuleName ["System","Console","Haskeline","History"],ModuleName ["System","Console","Haskeline","IO"]], hiddenModules = [ModuleName ["System","Console","Haskeline","Backend","Terminfo"],ModuleName ["System","Console","Haskeline","Backend","WCWidth"],ModuleName ["System","Console","Haskeline","Backend","Posix"],ModuleName ["System","Console","Haskeline","Backend","IConv"],ModuleName ["System","Console","Haskeline","Backend","DumbTerm"],ModuleName ["System","Console","Haskeline","Backend"],ModuleName ["System","Console","Haskeline","Command"],ModuleName ["System","Console","Haskeline","Command","Completion"],ModuleName ["System","Console","Haskeline","Command","History"],ModuleName ["System","Console","Haskeline","Command","KillRing"],ModuleName ["System","Console","Haskeline","Directory"],ModuleName ["System","Console","Haskeline","Emacs"],ModuleName ["System","Console","Haskeline","InputT"],ModuleName ["System","Console","Haskeline","Key"],ModuleName ["System","Console","Haskeline","LineState"],ModuleName ["System","Console","Haskeline","Monads"],ModuleName ["System","Console","Haskeline","Prefs"],ModuleName ["System","Console","Haskeline","RunCommand"],ModuleName ["System","Console","Haskeline","Term"],ModuleName ["System","Console","Haskeline","Command","Undo"],ModuleName ["System","Console","Haskeline","Vi"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/haskeline-0.6.4.0/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/haskeline-0.6.4.0/ghc-7.0.3"], hsLibraries = ["HShaskeline-0.6.4.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/haskell-packages/ghc/lib/haskeline-0.6.4.0/ghc-7.0.3/include"], includes = ["h_iconv.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",InstalledPackageId "terminfo-0.3.1.3-d898a3b030f2d808d2a44c5ff0e2a0e1",InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff",InstalledPackageId "utf8-string-0.3.6-48af7e77f29b232f389e99d0a9a1d604"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/haskeline-0.6.4.0/haskeline.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-haskeline-doc/html/"]}])]),(PackageName "hostname",fromList [(Version {versionBranch = [1,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "hostname-1.0-75071817127be63d3548cd759f6b627c", sourcePackageId = PackageIdentifier {pkgName = PackageName "hostname", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "", pkgUrl = "", description = "", category = "Network", exposed = True, exposedModules = [ModuleName ["Network","HostName"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/hostname-1.0/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/hostname-1.0/ghc-7.0.3"], hsLibraries = ["HShostname-1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/hostname-1.0/html/hostname.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/hostname-1.0/html"]}])]),(PackageName "html",fromList [(Version {versionBranch = [1,0,1,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "html-1.0.1.2-0cdd616c514cf10f5323f121a96991b6", sourcePackageId = PackageIdentifier {pkgName = PackageName "html", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains a combinator library for constructing\nHTML documents.", category = "Web", exposed = True, exposedModules = [ModuleName ["Text","Html"],ModuleName ["Text","Html","BlockTable"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/html-1.0.1.2/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/html-1.0.1.2/ghc-7.0.3"], hsLibraries = ["HShtml-1.0.1.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/html-1.0.1.2/html.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-html-doc/html/"]}])]),(PackageName "integer-gmp",fromList [(Version {versionBranch = [0,2,0,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "integer-gmp-0.2.0.3-298c59ba68b7aaa7e76ae5b1fe5e876e", sourcePackageId = PackageIdentifier {pkgName = PackageName "integer-gmp", pkgVersion = Version {versionBranch = [0,2,0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains an Integer library based on GMP.", category = "", exposed = True, exposedModules = [ModuleName ["GHC","Integer"],ModuleName ["GHC","Integer","GMP","Internals"]], hiddenModules = [ModuleName ["GHC","Integer","Type"]], importDirs = ["/usr/lib/ghc-7.0.3/integer-gmp-0.2.0.3"], libraryDirs = ["/usr/lib/ghc-7.0.3/integer-gmp-0.2.0.3"], hsLibraries = ["HSinteger-gmp-0.2.0.3"], extraLibraries = ["gmp"], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/integer-gmp-0.2.0.3/integer-gmp.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/integer-gmp-0.2.0.3"]}])]),(PackageName "mmap",fromList [(Version {versionBranch = [0,5,7], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "mmap-0.5.7-127e379f104e2b945de5325ba3158467", sourcePackageId = PackageIdentifier {pkgName = PackageName "mmap", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}, license = BSD3, copyright = "2008, Gracjan Polak", maintainer = "Gracjan Polak <gracjanpolak@gmail.com>", author = "Gracjan Polak <gracjanpolak@gmail.com>", stability = "alpha", homepage = "", pkgUrl = "", description = "This library provides a wrapper to mmap(2) or MapViewOfFile,\nallowing files or devices to be lazily loaded into memory as\nstrict or lazy ByteStrings, ForeignPtrs or plain Ptrs, using\nthe virtual memory subsystem to do on-demand loading.\nModifications are also supported.", category = "System", exposed = True, exposedModules = [ModuleName ["System","IO","MMap"]], hiddenModules = [], importDirs = ["/usr/local/lib/mmap-0.5.7/ghc-7.0.3"], libraryDirs = ["/usr/local/lib/mmap-0.5.7/ghc-7.0.3"], hsLibraries = ["HSmmap-0.5.7"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/local/share/doc/mmap-0.5.7/html/mmap.haddock"], haddockHTMLs = ["/usr/local/share/doc/mmap-0.5.7/html"]}])]),(PackageName "mtl",fromList [(Version {versionBranch = [2,0,1,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b", sourcePackageId = PackageIdentifier {pkgName = PackageName "mtl", pkgVersion = Version {versionBranch = [2,0,1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "Andy Gill", stability = "", homepage = "", pkgUrl = "", description = "Monad classes using functional dependencies, with instances\nfor various monad transformers, inspired by the paper\n/Functional Programming with Overloading and Higher-Order Polymorphism/,\nby Mark P Jones, in /Advanced School of Functional Programming/, 1995\n(<http://web.cecs.pdx.edu/~mpj/pubs/springschool.html>).", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","Monad","Cont"],ModuleName ["Control","Monad","Cont","Class"],ModuleName ["Control","Monad","Error"],ModuleName ["Control","Monad","Error","Class"],ModuleName ["Control","Monad","Identity"],ModuleName ["Control","Monad","List"],ModuleName ["Control","Monad","RWS"],ModuleName ["Control","Monad","RWS","Class"],ModuleName ["Control","Monad","RWS","Lazy"],ModuleName ["Control","Monad","RWS","Strict"],ModuleName ["Control","Monad","Reader"],ModuleName ["Control","Monad","Reader","Class"],ModuleName ["Control","Monad","State"],ModuleName ["Control","Monad","State","Class"],ModuleName ["Control","Monad","State","Lazy"],ModuleName ["Control","Monad","State","Strict"],ModuleName ["Control","Monad","Trans"],ModuleName ["Control","Monad","Writer"],ModuleName ["Control","Monad","Writer","Class"],ModuleName ["Control","Monad","Writer","Lazy"],ModuleName ["Control","Monad","Writer","Strict"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/mtl-2.0.1.0/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/mtl-2.0.1.0/ghc-7.0.3"], hsLibraries = ["HSmtl-2.0.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "transformers-0.2.2.0-4bbbfde1fb5c4eb17cdb1963dda698f3"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/mtl-2.0.1.0/mtl.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-mtl-doc/html/"]}])]),(PackageName "network",fromList [(Version {versionBranch = [2,3,0,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "network-2.3.0.2-824dddd7e2ce0e065568730d1c080c4a", sourcePackageId = PackageIdentifier {pkgName = PackageName "network", pkgVersion = Version {versionBranch = [2,3,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Johan Tibell <johan.tibell@gmail.com>", author = "", stability = "", homepage = "http://github.com/haskell/network", pkgUrl = "", description = "Low-level networking interface", category = "Network", exposed = True, exposedModules = [ModuleName ["Network"],ModuleName ["Network","BSD"],ModuleName ["Network","Socket"],ModuleName ["Network","Socket","ByteString"],ModuleName ["Network","Socket","ByteString","Lazy"],ModuleName ["Network","Socket","Internal"],ModuleName ["Network","URI"]], hiddenModules = [ModuleName ["Network","Socket","ByteString","IOVec"],ModuleName ["Network","Socket","ByteString","MsgHdr"],ModuleName ["Network","Socket","ByteString","Internal"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/network-2.3.0.2/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/network-2.3.0.2/ghc-7.0.3"], hsLibraries = ["HSnetwork-2.3.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/haskell-packages/ghc/lib/network-2.3.0.2/ghc-7.0.3/include"], includes = ["HsNet.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "parsec-3.1.1-33474162d2bbd21ea1e4f1e3830243d8",InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/network-2.3.0.2/network.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-network-doc/html/"]}])]),(PackageName "old-locale",fromList [(Version {versionBranch = [1,0,0,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "old-locale-1.0.0.2-161f79060c89cc16ca11576ceb440486", sourcePackageId = PackageIdentifier {pkgName = PackageName "old-locale", pkgVersion = Version {versionBranch = [1,0,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package provides the old locale library.\nFor new code, the new locale library is recommended.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Locale"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/old-locale-1.0.0.2"], libraryDirs = ["/usr/lib/ghc-7.0.3/old-locale-1.0.0.2"], hsLibraries = ["HSold-locale-1.0.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/old-locale-1.0.0.2/old-locale.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/old-locale-1.0.0.2"]}])]),(PackageName "old-time",fromList [(Version {versionBranch = [1,0,0,6], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "old-time-1.0.0.6-7f15fd4b960098b2776b8c05bc17519f", sourcePackageId = PackageIdentifier {pkgName = PackageName "old-time", pkgVersion = Version {versionBranch = [1,0,0,6], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package provides the old time library.\nFor new code, the new time library is recommended.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Time"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/old-time-1.0.0.6"], libraryDirs = ["/usr/lib/ghc-7.0.3/old-time-1.0.0.6"], hsLibraries = ["HSold-time-1.0.0.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/old-time-1.0.0.6/include"], includes = ["HsTime.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "old-locale-1.0.0.2-161f79060c89cc16ca11576ceb440486"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/old-time-1.0.0.6/old-time.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/old-time-1.0.0.6"]}])]),(PackageName "parsec",fromList [(Version {versionBranch = [3,1,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "parsec-3.1.1-33474162d2bbd21ea1e4f1e3830243d8", sourcePackageId = PackageIdentifier {pkgName = PackageName "parsec", pkgVersion = Version {versionBranch = [3,1,1], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Antoine Latter <aslatter@gmail.com>", author = "Daan Leijen <daan@microsoft.com>, Paolo Martini <paolo@nemail.it>", stability = "", homepage = "http://www.cs.uu.nl/~daan/parsec.html", pkgUrl = "", description = "Parsec is designed from scratch as an industrial-strength parser\nlibrary.  It is simple, safe, well documented (on the package\nhomepage), has extensive libraries and good error messages,\nand is also fast.  It is defined as a monad transformer that can be\nstacked on arbitrary monads, and it is also parametric in the\ninput stream type.", category = "Parsing", exposed = True, exposedModules = [ModuleName ["Text","Parsec"],ModuleName ["Text","Parsec","String"],ModuleName ["Text","Parsec","ByteString"],ModuleName ["Text","Parsec","ByteString","Lazy"],ModuleName ["Text","Parsec","Pos"],ModuleName ["Text","Parsec","Error"],ModuleName ["Text","Parsec","Prim"],ModuleName ["Text","Parsec","Char"],ModuleName ["Text","Parsec","Combinator"],ModuleName ["Text","Parsec","Token"],ModuleName ["Text","Parsec","Expr"],ModuleName ["Text","Parsec","Language"],ModuleName ["Text","Parsec","Perm"],ModuleName ["Text","ParserCombinators","Parsec"],ModuleName ["Text","ParserCombinators","Parsec","Char"],ModuleName ["Text","ParserCombinators","Parsec","Combinator"],ModuleName ["Text","ParserCombinators","Parsec","Error"],ModuleName ["Text","ParserCombinators","Parsec","Expr"],ModuleName ["Text","ParserCombinators","Parsec","Language"],ModuleName ["Text","ParserCombinators","Parsec","Perm"],ModuleName ["Text","ParserCombinators","Parsec","Pos"],ModuleName ["Text","ParserCombinators","Parsec","Prim"],ModuleName ["Text","ParserCombinators","Parsec","Token"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/parsec-3.1.1/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/parsec-3.1.1/ghc-7.0.3"], hsLibraries = ["HSparsec-3.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/parsec3-3.1.1/parsec.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-parsec3-doc/html/"]}])]),(PackageName "pretty",fromList [(Version {versionBranch = [1,0,1,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "pretty-1.0.1.2-f8dc299a95cc94a3e513e27c5b80f951", sourcePackageId = PackageIdentifier {pkgName = PackageName "pretty", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains John Hughes's pretty-printing library,\nheavily modified by Simon Peyton Jones.", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","PrettyPrint"],ModuleName ["Text","PrettyPrint","HughesPJ"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/pretty-1.0.1.2"], libraryDirs = ["/usr/lib/ghc-7.0.3/pretty-1.0.1.2"], hsLibraries = ["HSpretty-1.0.1.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/pretty-1.0.1.2/pretty.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/pretty-1.0.1.2"]}])]),(PackageName "primitive",fromList [(Version {versionBranch = [0,3,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "primitive-0.3.1-c9e4468cc744c0e030467f8c31383955", sourcePackageId = PackageIdentifier {pkgName = PackageName "primitive", pkgVersion = Version {versionBranch = [0,3,1], versionTags = []}}, license = BSD3, copyright = "(c) Roman Leshchinskiy 2009-2010", maintainer = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", author = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", stability = "", homepage = "http://code.haskell.org/primitive", pkgUrl = "", description = ".\nThis package provides wrappers for primitive array operations from\nGHC.Prim.", category = "Data", exposed = True, exposedModules = [ModuleName ["Control","Monad","Primitive"],ModuleName ["Data","Primitive"],ModuleName ["Data","Primitive","MachDeps"],ModuleName ["Data","Primitive","Types"],ModuleName ["Data","Primitive","Array"],ModuleName ["Data","Primitive","ByteArray"],ModuleName ["Data","Primitive","Addr"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/primitive-0.3.1/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/primitive-0.3.1/ghc-7.0.3"], hsLibraries = ["HSprimitive-0.3.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/haskell-packages/ghc/lib/primitive-0.3.1/ghc-7.0.3/include"], includes = ["primitive-memops.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/primitive-0.3.1/primitive.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-primitive-doc/html/"]}])]),(PackageName "process",fromList [(Version {versionBranch = [1,0,1,5], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "process-1.0.1.5-da4848a2eec47420cd09fe9edba7e83c", sourcePackageId = PackageIdentifier {pkgName = PackageName "process", pkgVersion = Version {versionBranch = [1,0,1,5], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains libraries for dealing with system processes.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Process","Internals"],ModuleName ["System","Process"],ModuleName ["System","Cmd"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/process-1.0.1.5"], libraryDirs = ["/usr/lib/ghc-7.0.3/process-1.0.1.5"], hsLibraries = ["HSprocess-1.0.1.5"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/process-1.0.1.5/include"], includes = ["runProcess.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/process-1.0.1.5/process.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/process-1.0.1.5"]}])]),(PackageName "random",fromList [(Version {versionBranch = [1,0,0,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "random-1.0.0.3-7511feaba03eecc22356464da8976c7e", sourcePackageId = PackageIdentifier {pkgName = PackageName "random", pkgVersion = Version {versionBranch = [1,0,0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package provides a random number library.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Random"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/random-1.0.0.3"], libraryDirs = ["/usr/lib/ghc-7.0.3/random-1.0.0.3"], hsLibraries = ["HSrandom-1.0.0.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "time-1.2.0.3-3493203919ef238f1a58223fa55b1ceb"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/random-1.0.0.3/random.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/random-1.0.0.3"]}])]),(PackageName "regex-base",fromList [(Version {versionBranch = [0,93,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "regex-base-0.93.2-ea22834f5565d6f16b2cec3e7a63917a", sourcePackageId = PackageIdentifier {pkgName = PackageName "regex-base", pkgVersion = Version {versionBranch = [0,93,2], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2006, Christopher Kuklewicz", maintainer = "TextRegexLazy@personal.mightyreason.com", author = "Christopher Kuklewicz", stability = "Seems to work, passes a few tests", homepage = "http://sourceforge.net/projects/lazy-regex", pkgUrl = "http://darcs.haskell.org/packages/regex-unstable/regex-base/", description = "Interface API for regex-posix,pcre,parsec,tdfa,dfa", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","Regex","Base"],ModuleName ["Text","Regex","Base","RegexLike"],ModuleName ["Text","Regex","Base","Context"],ModuleName ["Text","Regex","Base","Impl"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/regex-base-0.93.2/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/regex-base-0.93.2/ghc-7.0.3"], hsLibraries = ["HSregex-base-0.93.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/regex-base-0.93.2/regex-base.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-regex-base-doc/html/"]}])]),(PackageName "regex-compat",fromList [(Version {versionBranch = [0,95,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "regex-compat-0.95.1-3e607bc84f3c3925033bb247b8ebab65", sourcePackageId = PackageIdentifier {pkgName = PackageName "regex-compat", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2006, Christopher Kuklewicz", maintainer = "TextRegexLazy@personal.mightyreason.com", author = "Christopher Kuklewicz", stability = "Seems to work, passes a few tests", homepage = "http://sourceforge.net/projects/lazy-regex", pkgUrl = "http://darcs.haskell.org/packages/regex-unstable/regex-compat/", description = "One module layer over regex-posix to replace Text.Regex", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","Regex"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/regex-compat-0.95.1/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/regex-compat-0.95.1/ghc-7.0.3"], hsLibraries = ["HSregex-compat-0.95.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "regex-base-0.93.2-ea22834f5565d6f16b2cec3e7a63917a",InstalledPackageId "regex-posix-0.95.1-a7a63b8d8d2c01aa7eca73b4f7221d81"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/regex-compat-0.95.1/html/regex-compat.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/regex-compat-0.95.1/html"]}])]),(PackageName "regex-posix",fromList [(Version {versionBranch = [0,95,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "regex-posix-0.95.1-a7a63b8d8d2c01aa7eca73b4f7221d81", sourcePackageId = PackageIdentifier {pkgName = PackageName "regex-posix", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2007-2010, Christopher Kuklewicz", maintainer = "TextRegexLazy@personal.mightyreason.com", author = "Christopher Kuklewicz", stability = "Seems to work, passes a few tests", homepage = "http://sourceforge.net/projects/lazy-regex", pkgUrl = "http://code.haskell.org/regex-posix/", description = "The posix regex backend for regex-base", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","Regex","Posix"],ModuleName ["Text","Regex","Posix","Wrap"],ModuleName ["Text","Regex","Posix","String"],ModuleName ["Text","Regex","Posix","Sequence"],ModuleName ["Text","Regex","Posix","ByteString"],ModuleName ["Text","Regex","Posix","ByteString","Lazy"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/regex-posix-0.95.1/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/regex-posix-0.95.1/ghc-7.0.3"], hsLibraries = ["HSregex-posix-0.95.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageId "regex-base-0.93.2-ea22834f5565d6f16b2cec3e7a63917a"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/regex-posix-0.95.1/html/regex-posix.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/regex-posix-0.95.1/html"]}])]),(PackageName "rts",fromList [(Version {versionBranch = [1,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "builtin_rts", sourcePackageId = PackageIdentifier {pkgName = PackageName "rts", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "glasgow-haskell-users@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "", category = "", exposed = True, exposedModules = [], hiddenModules = [], importDirs = [], libraryDirs = ["/usr/lib/ghc-7.0.3"], hsLibraries = ["HSrts"], extraLibraries = ["ffi","m","rt","dl"], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/include"], includes = ["Stg.h"], depends = [], hugsOptions = [], ccOptions = [], ldOptions = ["-u","ghczmprim_GHCziTypes_Izh_static_info","-u","ghczmprim_GHCziTypes_Czh_static_info","-u","ghczmprim_GHCziTypes_Fzh_static_info","-u","ghczmprim_GHCziTypes_Dzh_static_info","-u","base_GHCziPtr_Ptr_static_info","-u","base_GHCziWord_Wzh_static_info","-u","base_GHCziInt_I8zh_static_info","-u","base_GHCziInt_I16zh_static_info","-u","base_GHCziInt_I32zh_static_info","-u","base_GHCziInt_I64zh_static_info","-u","base_GHCziWord_W8zh_static_info","-u","base_GHCziWord_W16zh_static_info","-u","base_GHCziWord_W32zh_static_info","-u","base_GHCziWord_W64zh_static_info","-u","base_GHCziStable_StablePtr_static_info","-u","ghczmprim_GHCziTypes_Izh_con_info","-u","ghczmprim_GHCziTypes_Czh_con_info","-u","ghczmprim_GHCziTypes_Fzh_con_info","-u","ghczmprim_GHCziTypes_Dzh_con_info","-u","base_GHCziPtr_Ptr_con_info","-u","base_GHCziPtr_FunPtr_con_info","-u","base_GHCziStable_StablePtr_con_info","-u","ghczmprim_GHCziBool_False_closure","-u","ghczmprim_GHCziBool_True_closure","-u","base_GHCziPack_unpackCString_closure","-u","base_GHCziIOziException_stackOverflow_closure","-u","base_GHCziIOziException_heapOverflow_closure","-u","base_ControlziExceptionziBase_nonTermination_closure","-u","base_GHCziIOziException_blockedIndefinitelyOnMVar_closure","-u","base_GHCziIOziException_blockedIndefinitelyOnSTM_closure","-u","base_ControlziExceptionziBase_nestedAtomically_closure","-u","base_GHCziWeak_runFinalizzerBatch_closure","-u","base_GHCziTopHandler_runIO_closure","-u","base_GHCziTopHandler_runNonIO_closure","-u","base_GHCziConcziIO_ensureIOManagerIsRunning_closure","-u","base_GHCziConcziSync_runSparks_closure","-u","base_GHCziConcziSignal_runHandlers_closure"], frameworkDirs = [], frameworks = [], haddockInterfaces = [], haddockHTMLs = []}])]),(PackageName "shellish",fromList [(Version {versionBranch = [0,1,4], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "shellish-0.1.4-5b908e0ef83b4d4990e862a2d582acb1", sourcePackageId = PackageIdentifier {pkgName = PackageName "shellish", pkgVersion = Version {versionBranch = [0,1,4], versionTags = []}}, license = BSD3, copyright = "", maintainer = "me@mornfall.net", author = "Petr Rockai <me@mornfall.net>", stability = "", homepage = "http://repos.mornfall.net/shellish", pkgUrl = "", description = "The shellisg package provides a single module for convenient\n\\\"systems\\\" programming in Haskell, similar in spirit to POSIX\nshells or PERL.\n\n* Elegance and safety is sacrificed for conciseness and\nswiss-army-knife-ness.\n\n* The interface exported by Shellish is thread-safe.\n\nOverall, the module should help you to get a job done quickly,\nwithout getting too dirty.", category = "Development", exposed = True, exposedModules = [ModuleName ["Shellish"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/shellish-0.1.4/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/shellish-0.1.4/ghc-7.0.3"], hsLibraries = ["HSshellish-0.1.4"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageId "mtl-2.0.1.0-5b7a9cce5565d8cc8721ba4f95becf1b",InstalledPackageId "process-1.0.1.5-da4848a2eec47420cd09fe9edba7e83c",InstalledPackageId "strict-0.3.2-0f622b96a8041532e7c92ccfb057496f",InstalledPackageId "time-1.2.0.3-3493203919ef238f1a58223fa55b1ceb",InstalledPackageId "unix-compat-0.2.1.1-dd8ef5a3a99896df43dc15cc23b08467"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/shellish-0.1.4/html/shellish.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/shellish-0.1.4/html"]}])]),(PackageName "split",fromList [(Version {versionBranch = [0,1,4], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "split-0.1.4-25b8dac0b87dfab6d3ad4b8a7e345e45", sourcePackageId = PackageIdentifier {pkgName = PackageName "split", pkgVersion = Version {versionBranch = [0,1,4], versionTags = []}}, license = BSD3, copyright = "", maintainer = "byorgey@cis.upenn.edu", author = "Brent Yorgey", stability = "stable", homepage = "http://code.haskell.org/~byorgey/code/split", pkgUrl = "", description = "Combinator library and utility functions for splitting lists.", category = "List", exposed = True, exposedModules = [ModuleName ["Data","List","Split"],ModuleName ["Data","List","Split","Internals"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/split-0.1.4/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/split-0.1.4/ghc-7.0.3"], hsLibraries = ["HSsplit-0.1.4"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/split-0.1.4/html/split.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/split-0.1.4/html"]}])]),(PackageName "strict",fromList [(Version {versionBranch = [0,3,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "strict-0.3.2-0f622b96a8041532e7c92ccfb057496f", sourcePackageId = PackageIdentifier {pkgName = PackageName "strict", pkgVersion = Version {versionBranch = [0,3,2], versionTags = []}}, license = BSD3, copyright = "(c) 2006-2007 by Roman Leshchinskiy", maintainer = "Don Stewart <dons@galois.com>", author = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", stability = "", homepage = "http://www.cse.unsw.edu.au/~rl/code/strict.html", pkgUrl = "", description = "This package provides strict versions of some standard Haskell data\ntypes (pairs, Maybe and Either). It also contains strict IO\noperations.", category = "Data, System", exposed = True, exposedModules = [ModuleName ["Data","Strict","Tuple"],ModuleName ["Data","Strict","Maybe"],ModuleName ["Data","Strict","Either"],ModuleName ["Data","Strict"],ModuleName ["System","IO","Strict"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/strict-0.3.2/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/strict-0.3.2/ghc-7.0.3"], hsLibraries = ["HSstrict-0.3.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-143060371bda4ff52c270d1067551fe8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/strict-0.3.2/html/strict.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/strict-0.3.2/html"]}])]),(PackageName "syb",fromList [(Version {versionBranch = [0,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "syb-0.3-00d8c06f799942b01364e795b2a54d70", sourcePackageId = PackageIdentifier {pkgName = PackageName "syb", pkgVersion = Version {versionBranch = [0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "generics@haskell.org", author = "Ralf Lammel, Simon Peyton Jones", stability = "provisional", homepage = "http://www.cs.uu.nl/wiki/GenericProgramming/SYB", pkgUrl = "", description = "This package contains the generics system described in the\n/Scrap Your Boilerplate/ papers (see\n<http://www.cs.uu.nl/wiki/GenericProgramming/SYB>).\nIt defines the @Data@ class of types permitting folding and unfolding\nof constructor applications, instances of this class for primitive\ntypes, and a variety of traversals.", category = "Generics", exposed = True, exposedModules = [ModuleName ["Data","Generics"],ModuleName ["Data","Generics","Basics"],ModuleName ["Data","Generics","Instances"],ModuleName ["Data","Generics","Aliases"],ModuleName ["Data","Generics","Schemes"],ModuleName ["Data","Generics","Text"],ModuleName ["Data","Generics","Twins"],ModuleName ["Data","Generics","Builders"],ModuleName ["Generics","SYB"],ModuleName ["Generics","SYB","Basics"],ModuleName ["Generics","SYB","Instances"],ModuleName ["Generics","SYB","Aliases"],ModuleName ["Generics","SYB","Schemes"],ModuleName ["Generics","SYB","Text"],ModuleName ["Generics","SYB","Twins"],ModuleName ["Generics","SYB","Builders"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/syb-0.3/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/syb-0.3/ghc-7.0.3"], hsLibraries = ["HSsyb-0.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/syb-0.3/syb.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-syb-doc/html/"]}])]),(PackageName "tar",fromList [(Version {versionBranch = [0,3,1,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "tar-0.3.1.0-e78ec4eae84b755f8263c8666140ed0b", sourcePackageId = PackageIdentifier {pkgName = PackageName "tar", pkgVersion = Version {versionBranch = [0,3,1,0], versionTags = []}}, license = BSD3, copyright = "2007 Bjorn Bringert <bjorn@bringert.net>\n2008-2009 Duncan Coutts <duncan@haskell.org>", maintainer = "Duncan Coutts <duncan@haskell.org>", author = "Bjorn Bringert <bjorn@bringert.net>\nDuncan Coutts <duncan@haskell.org>", stability = "", homepage = "", pkgUrl = "", description = "This library is for working with \\\"@.tar@\\\" archive files. It\ncan read and write a range of common variations of archive\nformat including V7, USTAR, POSIX and GNU formats. It provides\nsupport for packing and unpacking portable archives. This\nmakes it suitable for distribution but not backup because\ndetails like file ownership and exact permissions are not\npreserved.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Archive","Tar"],ModuleName ["Codec","Archive","Tar","Entry"],ModuleName ["Codec","Archive","Tar","Check"]], hiddenModules = [ModuleName ["Codec","Archive","Tar","Types"],ModuleName ["Codec","Archive","Tar","Read"],ModuleName ["Codec","Archive","Tar","Write"],ModuleName ["Codec","Archive","Tar","Pack"],ModuleName ["Codec","Archive","Tar","Unpack"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/tar-0.3.1.0/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/tar-0.3.1.0/ghc-7.0.3"], hsLibraries = ["HStar-0.3.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "directory-1.1.0.0-393d8e95f1c0dd6ee908e122f924ac85",InstalledPackageId "filepath-1.2.0.0-b4f4cf7e95546b00f075372f0ccb0653",InstalledPackageId "old-time-1.0.0.6-7f15fd4b960098b2776b8c05bc17519f"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/tar-0.3.1.0/tar.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-tar-doc/html/"]}])]),(PackageName "template-haskell",fromList [(Version {versionBranch = [2,5,0,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "template-haskell-2.5.0.0-957162165c2e6480a35f6d14f7e5220f", sourcePackageId = PackageIdentifier {pkgName = PackageName "template-haskell", pkgVersion = Version {versionBranch = [2,5,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "Facilities for manipulating Haskell source code using Template Haskell.", category = "", exposed = True, exposedModules = [ModuleName ["Language","Haskell","TH","Syntax","Internals"],ModuleName ["Language","Haskell","TH","Syntax"],ModuleName ["Language","Haskell","TH","PprLib"],ModuleName ["Language","Haskell","TH","Ppr"],ModuleName ["Language","Haskell","TH","Lib"],ModuleName ["Language","Haskell","TH","Quote"],ModuleName ["Language","Haskell","TH"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/template-haskell-2.5.0.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/template-haskell-2.5.0.0"], hsLibraries = ["HStemplate-haskell-2.5.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageId "pretty-1.0.1.2-f8dc299a95cc94a3e513e27c5b80f951"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/template-haskell-2.5.0.0/template-haskell.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/template-haskell-2.5.0.0"]}])]),(PackageName "terminfo",fromList [(Version {versionBranch = [0,3,1,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "terminfo-0.3.1.3-d898a3b030f2d808d2a44c5ff0e2a0e1", sourcePackageId = PackageIdentifier {pkgName = PackageName "terminfo", pkgVersion = Version {versionBranch = [0,3,1,3], versionTags = []}}, license = BSD3, copyright = "(c) Judah Jacobson", maintainer = "Judah Jacobson <judah.jacobson@gmail.com>", author = "Judah Jacobson", stability = "Experimental", homepage = "http://code.haskell.org/terminfo", pkgUrl = "", description = "This library provides an interface to the terminfo database (via bindings to the\ncurses library).  Terminfo allows POSIX systems to interact with a variety of terminals\nusing a standard set of capabilities.", category = "User Interfaces", exposed = True, exposedModules = [ModuleName ["System","Console","Terminfo"],ModuleName ["System","Console","Terminfo","Base"],ModuleName ["System","Console","Terminfo","Cursor"],ModuleName ["System","Console","Terminfo","Color"],ModuleName ["System","Console","Terminfo","Edit"],ModuleName ["System","Console","Terminfo","Effects"],ModuleName ["System","Console","Terminfo","Keys"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/terminfo-0.3.1.3/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/terminfo-0.3.1.3/ghc-7.0.3"], hsLibraries = ["HSterminfo-0.3.1.3"], extraLibraries = ["ncurses"], extraGHCiLibraries = [], includeDirs = [], includes = ["ncurses.h","term.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/terminfo-0.3.1.3/terminfo.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-terminfo-doc/html/"]}])]),(PackageName "test-framework",fromList [(Version {versionBranch = [0,4,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "test-framework-0.4.0-3570e5fce12246859c27f7b4577044ed", sourcePackageId = PackageIdentifier {pkgName = PackageName "test-framework", pkgVersion = Version {versionBranch = [0,4,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "http://batterseapower.github.com/test-framework/", pkgUrl = "", description = "Allows tests such as QuickCheck properties and HUnit test cases to be assembled into test groups, run in\nparallel (but reported in deterministic order, to aid diff interpretation) and filtered and controlled by\ncommand line options. All of this comes with colored test output, progress reporting and test statistics output.", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","Framework"],ModuleName ["Test","Framework","Options"],ModuleName ["Test","Framework","Providers","API"],ModuleName ["Test","Framework","Runners","Console"],ModuleName ["Test","Framework","Runners","Options"],ModuleName ["Test","Framework","Seed"]], hiddenModules = [ModuleName ["Test","Framework","Core"],ModuleName ["Test","Framework","Improving"],ModuleName ["Test","Framework","Runners","Console","Colors"],ModuleName ["Test","Framework","Runners","Console","ProgressBar"],ModuleName ["Test","Framework","Runners","Console","Run"],ModuleName ["Test","Framework","Runners","Console","Statistics"],ModuleName ["Test","Framework","Runners","Console","Table"],ModuleName ["Test","Framework","Runners","Console","Utilities"],ModuleName ["Test","Framework","Runners","Core"],ModuleName ["Test","Framework","Runners","Processors"],ModuleName ["Test","Framework","Runners","Statistics"],ModuleName ["Test","Framework","Runners","TestPattern"],ModuleName ["Test","Framework","Runners","ThreadPool"],ModuleName ["Test","Framework","Runners","TimedConsumption"],ModuleName ["Test","Framework","Runners","XML","JUnitWriter"],ModuleName ["Test","Framework","Runners","XML"],ModuleName ["Test","Framework","Utilities"]], importDirs = ["/home/florent/.cabal/lib/test-framework-0.4.0/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/test-framework-0.4.0/ghc-7.0.3"], hsLibraries = ["HStest-framework-0.4.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1",InstalledPackageId "ansi-wl-pprint-0.6.3-e572fb77d5bf7bcb04a7444a9b54f822",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "containers-0.4.0.0-b4885363abca642443ccd842502a3b7e",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "hostname-1.0-75071817127be63d3548cd759f6b627c",InstalledPackageId "old-locale-1.0.0.2-161f79060c89cc16ca11576ceb440486",InstalledPackageId "random-1.0.0.3-7511feaba03eecc22356464da8976c7e",InstalledPackageId "regex-posix-0.95.1-a7a63b8d8d2c01aa7eca73b4f7221d81",InstalledPackageId "time-1.2.0.3-3493203919ef238f1a58223fa55b1ceb",InstalledPackageId "xml-1.3.8-f68d711e0aeaecb47b69c384ed0ad21a"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/test-framework-0.4.0/html/test-framework.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/test-framework-0.4.0/html"]}])]),(PackageName "test-framework-hunit",fromList [(Version {versionBranch = [0,2,6], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "test-framework-hunit-0.2.6-ca043988073add792f5cddeb80a08ce9", sourcePackageId = PackageIdentifier {pkgName = PackageName "test-framework-hunit", pkgVersion = Version {versionBranch = [0,2,6], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "http://batterseapower.github.com/test-framework/", pkgUrl = "", description = "", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","Framework","Providers","HUnit"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/test-framework-hunit-0.2.6/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/test-framework-hunit-0.2.6/ghc-7.0.3"], hsLibraries = ["HStest-framework-hunit-0.2.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "HUnit-1.2.2.3-8fe95e501b1318ef285c39ed79ca4209",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "test-framework-0.4.0-3570e5fce12246859c27f7b4577044ed"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/test-framework-hunit-0.2.6/html/test-framework-hunit.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/test-framework-hunit-0.2.6/html"]}])]),(PackageName "test-framework-quickcheck2",fromList [(Version {versionBranch = [0,2,10], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "test-framework-quickcheck2-0.2.10-48c3729ab4f2ea19741d59800542207a", sourcePackageId = PackageIdentifier {pkgName = PackageName "test-framework-quickcheck2", pkgVersion = Version {versionBranch = [0,2,10], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "http://batterseapower.github.com/test-framework/", pkgUrl = "", description = "", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","Framework","Providers","QuickCheck2"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/test-framework-quickcheck2-0.2.10/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/test-framework-quickcheck2-0.2.10/ghc-7.0.3"], hsLibraries = ["HStest-framework-quickcheck2-0.2.10"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "QuickCheck-2.4.1.1-6b2df10756c9ae534bddffc57c532df8",InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "random-1.0.0.3-7511feaba03eecc22356464da8976c7e",InstalledPackageId "test-framework-0.4.0-3570e5fce12246859c27f7b4577044ed"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/test-framework-quickcheck2-0.2.10/html/test-framework-quickcheck2.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/test-framework-quickcheck2-0.2.10/html"]}])]),(PackageName "text",fromList [(Version {versionBranch = [0,11,0,6], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "text-0.11.0.6-139d7472dd2398472c7d962de013c741", sourcePackageId = PackageIdentifier {pkgName = PackageName "text", pkgVersion = Version {versionBranch = [0,11,0,6], versionTags = []}}, license = BSD3, copyright = "2008-2009 Tom Harper, 2009-2010 Bryan O'Sullivan", maintainer = "Bryan O'Sullivan <bos@serpentine.com>\nTom Harper <rtomharper@googlemail.com>\nDuncan Coutts <duncan@haskell.org>", author = "Bryan O'Sullivan <bos@serpentine.com>", stability = "", homepage = "http://bitbucket.org/bos/text", pkgUrl = "", description = ".\nAn efficient packed, immutable Unicode text type (both strict and\nlazy), with a powerful loop fusion optimization framework.\n\nThe 'Text' type represents Unicode character strings, in a time and\nspace-efficient manner. This package provides text processing\ncapabilities that are optimized for performance critical use, both\nin terms of large data quantities and high speed.\n\nThe 'Text' type provides character-encoding, type-safe case\nconversion via whole-string case conversion functions. It also\nprovides a range of functions for converting 'Text' values to and from\n'ByteStrings', using several standard encodings.\n\nEfficient locale-sensitive support for text IO is also supported.\n\nThese modules are intended to be imported qualified, to avoid name\nclashes with Prelude functions, e.g.\n\n> import qualified Data.Text as T\n\nTo use an extended and very rich family of functions for working\nwith Unicode text (including normalization, regular expressions,\nnon-standard encodings, text breaking, and locales), see\nthe @text-icu@ package:\n<http://hackage.haskell.org/package/text-icu>", category = "Data, Text", exposed = True, exposedModules = [ModuleName ["Data","Text"],ModuleName ["Data","Text","Array"],ModuleName ["Data","Text","Encoding"],ModuleName ["Data","Text","Encoding","Error"],ModuleName ["Data","Text","Foreign"],ModuleName ["Data","Text","IO"],ModuleName ["Data","Text","Internal"],ModuleName ["Data","Text","Lazy"],ModuleName ["Data","Text","Lazy","Builder"],ModuleName ["Data","Text","Lazy","Encoding"],ModuleName ["Data","Text","Lazy","IO"],ModuleName ["Data","Text","Lazy","Internal"],ModuleName ["Data","Text","Lazy","Read"],ModuleName ["Data","Text","Read"]], hiddenModules = [ModuleName ["Data","Text","Encoding","Fusion"],ModuleName ["Data","Text","Encoding","Fusion","Common"],ModuleName ["Data","Text","Encoding","Utf16"],ModuleName ["Data","Text","Encoding","Utf32"],ModuleName ["Data","Text","Encoding","Utf8"],ModuleName ["Data","Text","Fusion"],ModuleName ["Data","Text","Fusion","CaseMapping"],ModuleName ["Data","Text","Fusion","Common"],ModuleName ["Data","Text","Fusion","Internal"],ModuleName ["Data","Text","Fusion","Size"],ModuleName ["Data","Text","IO","Internal"],ModuleName ["Data","Text","Lazy","Encoding","Fusion"],ModuleName ["Data","Text","Lazy","Fusion"],ModuleName ["Data","Text","Lazy","Search"],ModuleName ["Data","Text","Search"],ModuleName ["Data","Text","Unsafe"],ModuleName ["Data","Text","UnsafeChar"],ModuleName ["Data","Text","UnsafeShift"],ModuleName ["Data","Text","Util"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/text-0.11.0.6/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/text-0.11.0.6/ghc-7.0.3"], hsLibraries = ["HStext-0.11.0.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4",InstalledPackageId "deepseq-1.1.0.2-0465f803f7d27d264907e7e03e72a71f",InstalledPackageId "ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/text-0.11.0.6/text.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-text-doc/html/"]}])]),(PackageName "time",fromList [(Version {versionBranch = [1,2,0,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "time-1.2.0.3-3493203919ef238f1a58223fa55b1ceb", sourcePackageId = PackageIdentifier {pkgName = PackageName "time", pkgVersion = Version {versionBranch = [1,2,0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "<ashley@semantic.org>", author = "Ashley Yakeley", stability = "stable", homepage = "http://semantic.org/TimeLib/", pkgUrl = "", description = "A time library", category = "System", exposed = True, exposedModules = [ModuleName ["Data","Time","Calendar"],ModuleName ["Data","Time","Calendar","MonthDay"],ModuleName ["Data","Time","Calendar","OrdinalDate"],ModuleName ["Data","Time","Calendar","WeekDate"],ModuleName ["Data","Time","Calendar","Julian"],ModuleName ["Data","Time","Calendar","Easter"],ModuleName ["Data","Time","Clock"],ModuleName ["Data","Time","Clock","POSIX"],ModuleName ["Data","Time","Clock","TAI"],ModuleName ["Data","Time","LocalTime"],ModuleName ["Data","Time","Format"],ModuleName ["Data","Time"]], hiddenModules = [ModuleName ["Data","Time","Calendar","Private"],ModuleName ["Data","Time","Calendar","Days"],ModuleName ["Data","Time","Calendar","Gregorian"],ModuleName ["Data","Time","Calendar","JulianYearDay"],ModuleName ["Data","Time","Clock","Scale"],ModuleName ["Data","Time","Clock","UTC"],ModuleName ["Data","Time","Clock","CTimeval"],ModuleName ["Data","Time","Clock","UTCDiff"],ModuleName ["Data","Time","LocalTime","TimeZone"],ModuleName ["Data","Time","LocalTime","TimeOfDay"],ModuleName ["Data","Time","LocalTime","LocalTime"],ModuleName ["Data","Time","Format","Parse"]], importDirs = ["/usr/lib/ghc-7.0.3/time-1.2.0.3"], libraryDirs = ["/usr/lib/ghc-7.0.3/time-1.2.0.3"], hsLibraries = ["HStime-1.2.0.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/time-1.2.0.3/include"], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "old-locale-1.0.0.2-161f79060c89cc16ca11576ceb440486"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/time-1.2.0.3/time.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/time-1.2.0.3"]}])]),(PackageName "transformers",fromList [(Version {versionBranch = [0,2,2,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "transformers-0.2.2.0-4bbbfde1fb5c4eb17cdb1963dda698f3", sourcePackageId = PackageIdentifier {pkgName = PackageName "transformers", pkgVersion = Version {versionBranch = [0,2,2,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Ross Paterson <ross@soi.city.ac.uk>", author = "Andy Gill, Ross Paterson", stability = "", homepage = "", pkgUrl = "", description = "Haskell 98 part of a monad transformer library, inspired by the paper\n\\\"Functional Programming with Overloading and Higher-Order Polymorphism\\\",\nby Mark P Jones, in /Advanced School of Functional Programming/, 1995\n(<http://web.cecs.pdx.edu/~mpj/pubs/springschool.html>).\n\nThis part contains the monad transformer class, the concrete monad\ntransformers, operations and liftings.  It can be used on its own\nin Haskell 98 code, or with the monad classes in the @monads-fd@ or\n@monads-tf@ packages, which automatically lift operations introduced\nby monad transformers through other transformers.", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","Monad","IO","Class"],ModuleName ["Control","Monad","Trans","Class"],ModuleName ["Control","Monad","Trans","Cont"],ModuleName ["Control","Monad","Trans","Error"],ModuleName ["Control","Monad","Trans","Identity"],ModuleName ["Control","Monad","Trans","List"],ModuleName ["Control","Monad","Trans","Maybe"],ModuleName ["Control","Monad","Trans","Reader"],ModuleName ["Control","Monad","Trans","RWS"],ModuleName ["Control","Monad","Trans","RWS","Lazy"],ModuleName ["Control","Monad","Trans","RWS","Strict"],ModuleName ["Control","Monad","Trans","State"],ModuleName ["Control","Monad","Trans","State","Lazy"],ModuleName ["Control","Monad","Trans","State","Strict"],ModuleName ["Control","Monad","Trans","Writer"],ModuleName ["Control","Monad","Trans","Writer","Lazy"],ModuleName ["Control","Monad","Trans","Writer","Strict"],ModuleName ["Data","Functor","Compose"],ModuleName ["Data","Functor","Constant"],ModuleName ["Data","Functor","Identity"],ModuleName ["Data","Functor","Product"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/transformers-0.2.2.0/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/transformers-0.2.2.0/ghc-7.0.3"], hsLibraries = ["HStransformers-0.2.2.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/transformers-0.2.2.0/transformers.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-transformers-doc/html/"]}])]),(PackageName "unix",fromList [(Version {versionBranch = [2,4,2,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff", sourcePackageId = PackageIdentifier {pkgName = PackageName "unix", pkgVersion = Version {versionBranch = [2,4,2,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package gives you access to the set of operating system\nservices standardised by POSIX 1003.1b (or the IEEE Portable\nOperating System Interface for Computing Environments -\nIEEE Std. 1003.1).\n\nThe package is not supported under Windows (except under Cygwin).", category = "System", exposed = True, exposedModules = [ModuleName ["System","Posix"],ModuleName ["System","Posix","DynamicLinker","Module"],ModuleName ["System","Posix","DynamicLinker","Prim"],ModuleName ["System","Posix","Directory"],ModuleName ["System","Posix","DynamicLinker"],ModuleName ["System","Posix","Env"],ModuleName ["System","Posix","Error"],ModuleName ["System","Posix","Files"],ModuleName ["System","Posix","IO"],ModuleName ["System","Posix","Process"],ModuleName ["System","Posix","Process","Internals"],ModuleName ["System","Posix","Resource"],ModuleName ["System","Posix","Temp"],ModuleName ["System","Posix","Terminal"],ModuleName ["System","Posix","Time"],ModuleName ["System","Posix","Unistd"],ModuleName ["System","Posix","User"],ModuleName ["System","Posix","Signals"],ModuleName ["System","Posix","Signals","Exts"],ModuleName ["System","Posix","Semaphore"],ModuleName ["System","Posix","SharedMem"]], hiddenModules = [], importDirs = ["/usr/lib/ghc-7.0.3/unix-2.4.2.0"], libraryDirs = ["/usr/lib/ghc-7.0.3/unix-2.4.2.0"], hsLibraries = ["HSunix-2.4.2.0"], extraLibraries = ["rt","util","dl","pthread"], extraGHCiLibraries = [], includeDirs = ["/usr/lib/ghc-7.0.3/unix-2.4.2.0/include"], includes = ["HsUnix.h","execvpe.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/unix-2.4.2.0/unix.haddock"], haddockHTMLs = ["/usr/share/doc/ghc-doc/html/libraries/unix-2.4.2.0"]}])]),(PackageName "unix-compat",fromList [(Version {versionBranch = [0,2,1,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "unix-compat-0.2.1.1-dd8ef5a3a99896df43dc15cc23b08467", sourcePackageId = PackageIdentifier {pkgName = PackageName "unix-compat", pkgVersion = Version {versionBranch = [0,2,1,1], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Jacob Stanley <jacob@stanley.io>", author = "Bj\246rn Bringert, Duncan Coutts, Jacob Stanley", stability = "", homepage = "http://github.com/jystic/unix-compat", pkgUrl = "", description = "This package provides portable implementations of parts\nof the unix package. This package re-exports the unix\npackage when available. When it isn't available,\nportable implementations are used.", category = "System", exposed = True, exposedModules = [ModuleName ["System","PosixCompat"],ModuleName ["System","PosixCompat","Extensions"],ModuleName ["System","PosixCompat","Files"],ModuleName ["System","PosixCompat","Time"],ModuleName ["System","PosixCompat","Types"],ModuleName ["System","PosixCompat","User"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/unix-compat-0.2.1.1/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/unix-compat-0.2.1.1/ghc-7.0.3"], hsLibraries = ["HSunix-compat-0.2.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/florent/.cabal/lib/unix-compat-0.2.1.1/ghc-7.0.3/include"], includes = ["HsUnixCompat.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "unix-2.4.2.0-58b1a2dba5afd4464c2e3918310189ff"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/unix-compat-0.2.1.1/html/unix-compat.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/unix-compat-0.2.1.1/html"]}])]),(PackageName "utf8-string",fromList [(Version {versionBranch = [0,3,6], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "utf8-string-0.3.6-48af7e77f29b232f389e99d0a9a1d604", sourcePackageId = PackageIdentifier {pkgName = PackageName "utf8-string", pkgVersion = Version {versionBranch = [0,3,6], versionTags = []}}, license = BSD3, copyright = "", maintainer = "emertens@galois.com", author = "Eric Mertens", stability = "", homepage = "http://github.com/glguy/utf8-string/", pkgUrl = "", description = "A UTF8 layer for IO and Strings. The utf8-string\npackage provides operations for encoding UTF8\nstrings to Word8 lists and back, and for reading and\nwriting UTF8 without truncation.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Binary","UTF8","String"],ModuleName ["Codec","Binary","UTF8","Generic"],ModuleName ["System","IO","UTF8"],ModuleName ["System","Environment","UTF8"],ModuleName ["Data","String","UTF8"],ModuleName ["Data","ByteString","UTF8"],ModuleName ["Data","ByteString","Lazy","UTF8"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/utf8-string-0.3.6/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/utf8-string-0.3.6/ghc-7.0.3"], hsLibraries = ["HSutf8-string-0.3.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/utf8-string-0.3.6/utf8-string.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-utf8-string-doc/html/"]}])]),(PackageName "vector",fromList [(Version {versionBranch = [0,7,0,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "vector-0.7.0.1-f3d66d9edbfc37118398d6cdca0ca5ee", sourcePackageId = PackageIdentifier {pkgName = PackageName "vector", pkgVersion = Version {versionBranch = [0,7,0,1], versionTags = []}}, license = BSD3, copyright = "(c) Roman Leshchinskiy 2008-2010", maintainer = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", author = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", stability = "", homepage = "http://code.haskell.org/vector", pkgUrl = "", description = ".\nAn efficient implementation of Int-indexed arrays (both mutable\nand immutable), with a powerful loop fusion optimization framework .\n\nIt is structured as follows:\n\n[@Data.Vector@] Boxed vectors of arbitrary types.\n\n[@Data.Vector.Unboxed@] Unboxed vectors with an adaptive\nrepresentation based on data type families.\n\n[@Data.Vector.Storable@] Unboxed vectors of 'Storable' types.\n\n[@Data.Vector.Primitive@] Unboxed vectors of primitive types as\ndefined by the @primitive@ package. @Data.Vector.Unboxed@ is more\nflexible at no performance cost.\n\n[@Data.Vector.Generic@] Generic interface to the vector types.\n\nThere is also a (draft) tutorial on common uses of vector.\n\n* <http://haskell.org/haskellwiki/Numeric_Haskell:_A_Vector_Tutorial>\n\nPlease use the project trac to submit bug reports and feature\nrequests.\n\n* <http://trac.haskell.org/vector>\n\nChanges in version 0.7.0.1\n\n* Dependency on package ghc removed\n\nChanges in version 0.7\n\n* New functions for freezing, copying and thawing vectors: @freeze@,\n@thaw@, @unsafeThaw@ and @clone@\n\n* @newWith@ and @newUnsafeWith@ on mutable vectors replaced by\n@replicate@\n\n* New function: @concat@\n\n* New function for safe indexing: @(!?)@\n\n* @Monoid@ instances for all vector types\n\n* Significant recycling and fusion improvements\n\n* Bug fixes\n\n* Support for GHC 7.0", category = "Data, Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Vector","Internal","Check"],ModuleName ["Data","Vector","Fusion","Util"],ModuleName ["Data","Vector","Fusion","Stream","Size"],ModuleName ["Data","Vector","Fusion","Stream","Monadic"],ModuleName ["Data","Vector","Fusion","Stream"],ModuleName ["Data","Vector","Generic","Mutable"],ModuleName ["Data","Vector","Generic","Base"],ModuleName ["Data","Vector","Generic","New"],ModuleName ["Data","Vector","Generic"],ModuleName ["Data","Vector","Primitive","Mutable"],ModuleName ["Data","Vector","Primitive"],ModuleName ["Data","Vector","Storable","Internal"],ModuleName ["Data","Vector","Storable","Mutable"],ModuleName ["Data","Vector","Storable"],ModuleName ["Data","Vector","Unboxed","Base"],ModuleName ["Data","Vector","Unboxed","Mutable"],ModuleName ["Data","Vector","Unboxed"],ModuleName ["Data","Vector","Mutable"],ModuleName ["Data","Vector"]], hiddenModules = [], importDirs = ["/usr/lib/haskell-packages/ghc/lib/vector-0.7.0.1/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/vector-0.7.0.1/ghc-7.0.3"], hsLibraries = ["HSvector-0.7.0.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/usr/lib/haskell-packages/ghc/lib/vector-0.7.0.1/ghc-7.0.3/include"], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "primitive-0.3.1-c9e4468cc744c0e030467f8c31383955"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/vector-0.7.0.1/vector.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-vector-doc/html/"]}])]),(PackageName "xml",fromList [(Version {versionBranch = [1,3,8], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "xml-1.3.8-f68d711e0aeaecb47b69c384ed0ad21a", sourcePackageId = PackageIdentifier {pkgName = PackageName "xml", pkgVersion = Version {versionBranch = [1,3,8], versionTags = []}}, license = BSD3, copyright = "(c) 2007-2008 Galois Inc.", maintainer = "diatchki@galois.com", author = "Galois Inc.", stability = "", homepage = "http://code.galois.com", pkgUrl = "", description = "A simple XML library.", category = "Text, XML", exposed = True, exposedModules = [ModuleName ["Text","XML","Light"],ModuleName ["Text","XML","Light","Types"],ModuleName ["Text","XML","Light","Output"],ModuleName ["Text","XML","Light","Input"],ModuleName ["Text","XML","Light","Lexer"],ModuleName ["Text","XML","Light","Proc"],ModuleName ["Text","XML","Light","Cursor"]], hiddenModules = [], importDirs = ["/home/florent/.cabal/lib/xml-1.3.8/ghc-7.0.3"], libraryDirs = ["/home/florent/.cabal/lib/xml-1.3.8/ghc-7.0.3"], hsLibraries = ["HSxml-1.3.8"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/florent/.cabal/share/doc/xml-1.3.8/html/xml.haddock"], haddockHTMLs = ["/home/florent/.cabal/share/doc/xml-1.3.8/html"]}])]),(PackageName "zlib",fromList [(Version {versionBranch = [0,5,3,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "zlib-0.5.3.1-7e19941cbd00147a79723e25160ffc8b", sourcePackageId = PackageIdentifier {pkgName = PackageName "zlib", pkgVersion = Version {versionBranch = [0,5,3,1], versionTags = []}}, license = BSD3, copyright = "(c) 2006-2008 Duncan Coutts", maintainer = "Duncan Coutts <duncan@community.haskell.org>", author = "Duncan Coutts <duncan@community.haskell.org>", stability = "", homepage = "", pkgUrl = "", description = "This package provides a pure interface for compressing and\ndecompressing streams of data represented as lazy\n'ByteString's. It uses the zlib C library so it has high\nperformance. It supports the \\\"zlib\\\", \\\"gzip\\\" and \\\"raw\\\"\ncompression formats.\n\nIt provides a convenient high level API suitable for most\ntasks and for the few cases where more control is needed it\nprovides access to the full zlib feature set.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Compression","GZip"],ModuleName ["Codec","Compression","Zlib"],ModuleName ["Codec","Compression","Zlib","Raw"],ModuleName ["Codec","Compression","Zlib","Internal"]], hiddenModules = [ModuleName ["Codec","Compression","Zlib","Stream"]], importDirs = ["/usr/lib/haskell-packages/ghc/lib/zlib-0.5.3.1/ghc-7.0.3"], libraryDirs = ["/usr/lib/haskell-packages/ghc/lib/zlib-0.5.3.1/ghc-7.0.3"], hsLibraries = ["HSzlib-0.5.3.1"], extraLibraries = ["z"], extraGHCiLibraries = [], includeDirs = [], includes = ["zlib.h"], depends = [InstalledPackageId "base-4.3.1.0-91c3839608ff4d3ec95f734c5ae4f31c",InstalledPackageId "bytestring-0.9.1.10-6aa1efbfa95d1689fc03d61e7c4b27c4"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/usr/lib/ghc-7.0.3/haddock/zlib-0.5.3.1/zlib.haddock"], haddockHTMLs = ["/usr/share/doc/libghc-zlib-doc/html/"]}])])]), pkgDescrFile = Just "./darcs-beta.cabal", localPkgDescr = PackageDescription {package = PackageIdentifier {pkgName = PackageName "darcs-beta", pkgVersion = Version {versionBranch = [2,7,98,1], versionTags = []}}, license = GPL Nothing, licenseFile = "COPYING", copyright = "", maintainer = "<darcs-users@darcs.net>", author = "David Roundy <droundy@darcs.net>, <darcs-users@darcs.net>", stability = "Experimental", testedWith = [(GHC,ThisVersion (Version {versionBranch = [6,8,2], versionTags = []}))], homepage = "http://darcs.net/", pkgUrl = "", bugReports = "", sourceRepos = [SourceRepo {repoKind = RepoHead, repoType = Just Darcs, repoLocation = Just "http://darcs.net/", repoModule = Nothing, repoBranch = Nothing, repoTag = Nothing, repoSubdir = Nothing}], synopsis = "a distributed, interactive, smart revision control system", description = "Darcs is a free, open source revision control\nsystem. It is:\n\n* Distributed: Every user has access to the full\ncommand set, removing boundaries between server and\nclient or committer and non-committers.\n\n* Interactive: Darcs is easy to learn and efficient to\nuse because it asks you questions in response to\nsimple commands, giving you choices in your work\nflow. You can choose to record one change in a file,\nwhile ignoring another. As you update from upstream,\nyou can review each patch name, even the full \"diff\"\nfor interesting patches.\n\n* Smart: Originally developed by physicist David\nRoundy, darcs is based on a unique algebra of\npatches.\n\nThis smartness lets you respond to changing demands\nin ways that would otherwise not be possible. Learn\nmore about spontaneous branches with darcs.", category = "Development", customFieldsPD = [], buildDepends = [Dependency (PackageName "HTTP") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [3000,0], versionTags = []})) (LaterVersion (Version {versionBranch = [3000,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4000,2], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [3000,0], versionTags = []})) (LaterVersion (Version {versionBranch = [3000,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4000,2], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [3000,0], versionTags = []})) (LaterVersion (Version {versionBranch = [3000,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4000,2], versionTags = []}))))),Dependency (PackageName "HUnit") (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))),Dependency (PackageName "QuickCheck") (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,3], versionTags = []})) (LaterVersion (Version {versionBranch = [2,3], versionTags = []}))),Dependency (PackageName "array") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,4], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,4], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,4], versionTags = []}))))),Dependency (PackageName "base") (IntersectVersionRanges (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [5], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [5], versionTags = []})))) (IntersectVersionRanges (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [5], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [5], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [5], versionTags = []})))))),Dependency (PackageName "bytestring") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,9,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,9,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,10], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,9,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,9,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,10], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,9,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,9,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,10], versionTags = []}))))),Dependency (PackageName "cmdlib") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,4], versionTags = []}))),Dependency (PackageName "containers") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))))),Dependency (PackageName "directory") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))))),Dependency (PackageName "extensible-exceptions") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))))),Dependency (PackageName "filepath") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,1,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,1,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,3,0,0], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,1,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,1,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,3,0,0], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,1,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,1,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,3,0,0], versionTags = []}))))),Dependency (PackageName "hashed-storage") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))))),Dependency (PackageName "haskeline") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,6,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,6,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,7], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,6,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,6,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,7], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,6,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,6,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,7], versionTags = []}))))),Dependency (PackageName "html") (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})) (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})) (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})))),Dependency (PackageName "mmap") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))))),Dependency (PackageName "mtl") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,1], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,1], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,1], versionTags = []}))))),Dependency (PackageName "network") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [2,2], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,4], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [2,2], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,4], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [2,2], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,4], versionTags = []}))))),Dependency (PackageName "old-time") (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})) (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})) (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})))),Dependency (PackageName "parsec") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,0], versionTags = []})) (LaterVersion (Version {versionBranch = [2,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [3,2], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,0], versionTags = []})) (LaterVersion (Version {versionBranch = [2,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [3,2], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,0], versionTags = []})) (LaterVersion (Version {versionBranch = [2,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [3,2], versionTags = []}))))),Dependency (PackageName "process") (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})) (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})) (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})))),Dependency (PackageName "random") (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})) (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})) (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})))),Dependency (PackageName "regex-compat") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,95,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,95,1], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,95,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,95,1], versionTags = []}))) (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,95,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,95,1], versionTags = []}))))),Dependency (PackageName "shellish") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))),Dependency (PackageName "tar") (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})) (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})) (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})))),Dependency (PackageName "terminfo") (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})) (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})) (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})))),Dependency (PackageName "test-framework") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,2], versionTags = []}))),Dependency (PackageName "test-framework-hunit") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,2], versionTags = []}))),Dependency (PackageName "test-framework-quickcheck2") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,8], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,8], versionTags = []}))),Dependency (PackageName "text") (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [0,11], versionTags = []})) (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [0,11], versionTags = []})) (WildcardVersion (Version {versionBranch = [0,11], versionTags = []})))),Dependency (PackageName "unix") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,5], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,5], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,5], versionTags = []}))))),Dependency (PackageName "vector") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,7], versionTags = []})) (LaterVersion (Version {versionBranch = [0,7], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,7], versionTags = []})) (LaterVersion (Version {versionBranch = [0,7], versionTags = []}))) (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,7], versionTags = []})) (LaterVersion (Version {versionBranch = [0,7], versionTags = []}))))),Dependency (PackageName "zlib") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6,0,0], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6,0,0], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6,0,0], versionTags = []})))))], specVersionRaw = Right (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,8], versionTags = []})) (LaterVersion (Version {versionBranch = [1,8], versionTags = []}))), buildType = Just Custom, library = Just (Library {exposedModules = [ModuleName ["CommandLine"],ModuleName ["Crypt","SHA256"],ModuleName ["Darcs","Annotate"],ModuleName ["Darcs","ArgumentDefaults"],ModuleName ["Darcs","Arguments"],ModuleName ["Darcs","Bug"],ModuleName ["Darcs","ColorPrinter"],ModuleName ["Darcs","Commands"],ModuleName ["Darcs","Commands","Add"],ModuleName ["Darcs","Commands","AmendRecord"],ModuleName ["Darcs","Commands","Annotate"],ModuleName ["Darcs","Commands","Apply"],ModuleName ["Darcs","CommandsAux"],ModuleName ["Darcs","Commands","Changes"],ModuleName ["Darcs","Commands","Check"],ModuleName ["Darcs","Commands","Convert"],ModuleName ["Darcs","Commands","Diff"],ModuleName ["Darcs","Commands","Dist"],ModuleName ["Darcs","Commands","Get"],ModuleName ["Darcs","Commands","GZCRCs"],ModuleName ["Darcs","Commands","Help"],ModuleName ["Darcs","Commands","Init"],ModuleName ["Darcs","Commands","MarkConflicts"],ModuleName ["Darcs","Commands","Move"],ModuleName ["Darcs","Commands","Optimize"],ModuleName ["Darcs","Commands","Pull"],ModuleName ["Darcs","Commands","Push"],ModuleName ["Darcs","Commands","Put"],ModuleName ["Darcs","Commands","Record"],ModuleName ["Darcs","Commands","Remove"],ModuleName ["Darcs","Commands","Replace"],ModuleName ["Darcs","Commands","Revert"],ModuleName ["Darcs","Commands","Rollback"],ModuleName ["Darcs","Commands","Send"],ModuleName ["Darcs","Commands","SetPref"],ModuleName ["Darcs","Commands","Show"],ModuleName ["Darcs","Commands","ShowAuthors"],ModuleName ["Darcs","Commands","ShowBug"],ModuleName ["Darcs","Commands","ShowContents"],ModuleName ["Darcs","Commands","ShowFiles"],ModuleName ["Darcs","Commands","ShowIndex"],ModuleName ["Darcs","Commands","ShowRepo"],ModuleName ["Darcs","Commands","ShowTags"],ModuleName ["Darcs","Commands","Tag"],ModuleName ["Darcs","Commands","TrackDown"],ModuleName ["Darcs","Commands","TransferMode"],ModuleName ["Darcs","Commands","Util"],ModuleName ["Darcs","Commands","Unrecord"],ModuleName ["Darcs","Commands","Unrevert"],ModuleName ["Darcs","Commands","WhatsNew"],ModuleName ["Darcs","Compat"],ModuleName ["Darcs","Diff"],ModuleName ["Darcs","Email"],ModuleName ["Darcs","External"],ModuleName ["Darcs","Flags"],ModuleName ["Darcs","Global"],ModuleName ["Darcs","IO"],ModuleName ["Darcs","Lock"],ModuleName ["Darcs","Match"],ModuleName ["Darcs","MonadProgress"],ModuleName ["Darcs","Patch"],ModuleName ["Darcs","Patch","Apply"],ModuleName ["Darcs","Patch","ApplyMonad"],ModuleName ["Darcs","Patch","Bracketed"],ModuleName ["Darcs","Patch","Bracketed","Instances"],ModuleName ["Darcs","Patch","Bundle"],ModuleName ["Darcs","Patch","Choices"],ModuleName ["Darcs","Patch","Commute"],ModuleName ["Darcs","Patch","Conflict"],ModuleName ["Darcs","Patch","ConflictMarking"],ModuleName ["Darcs","Patch","Depends"],ModuleName ["Darcs","Patch","Dummy"],ModuleName ["Darcs","Patch","Effect"],ModuleName ["Darcs","Patch","FileName"],ModuleName ["Darcs","Patch","FileHunk"],ModuleName ["Darcs","Patch","Format"],ModuleName ["Darcs","Patch","Info"],ModuleName ["Darcs","Patch","Inspect"],ModuleName ["Darcs","Patch","Invert"],ModuleName ["Darcs","Patch","Match"],ModuleName ["Darcs","Patch","MatchData"],ModuleName ["Darcs","Patch","Merge"],ModuleName ["Darcs","Patch","Named"],ModuleName ["Darcs","Patch","OldDate"],ModuleName ["Darcs","Patch","PatchInfoAnd"],ModuleName ["Darcs","Patch","Patchy"],ModuleName ["Darcs","Patch","Patchy","Instances"],ModuleName ["Darcs","Patch","Permutations"],ModuleName ["Darcs","Patch","Prim"],ModuleName ["Darcs","Patch","Prim","Class"],ModuleName ["Darcs","Patch","Prim","V1"],ModuleName ["Darcs","Patch","Prim","V1","Apply"],ModuleName ["Darcs","Patch","Prim","V1","Coalesce"],ModuleName ["Darcs","Patch","Prim","V1","Commute"],ModuleName ["Darcs","Patch","Prim","V1","Core"],ModuleName ["Darcs","Patch","Prim","V1","Details"],ModuleName ["Darcs","Patch","Prim","V1","Read"],ModuleName ["Darcs","Patch","Prim","V1","Show"],ModuleName ["Darcs","Patch","Read"],ModuleName ["Darcs","Patch","ReadMonads"],ModuleName ["Darcs","Patch","RegChars"],ModuleName ["Darcs","Patch","Repair"],ModuleName ["Darcs","Patch","RepoPatch"],ModuleName ["Darcs","Patch","Set"],ModuleName ["Darcs","Patch","Show"],ModuleName ["Darcs","Patch","Split"],ModuleName ["Darcs","Patch","Summary"],ModuleName ["Darcs","Patch","SummaryData"],ModuleName ["Darcs","Patch","TokenReplace"],ModuleName ["Darcs","Patch","TouchesFiles"],ModuleName ["Darcs","Patch","Viewing"],ModuleName ["Darcs","Patch","V1"],ModuleName ["Darcs","Patch","V1","Apply"],ModuleName ["Darcs","Patch","V1","Commute"],ModuleName ["Darcs","Patch","V1","Core"],ModuleName ["Darcs","Patch","V1","Read"],ModuleName ["Darcs","Patch","V1","Show"],ModuleName ["Darcs","Patch","V1","Viewing"],ModuleName ["Darcs","Patch","V2"],ModuleName ["Darcs","Patch","V2","Non"],ModuleName ["Darcs","Patch","V2","Real"],ModuleName ["Darcs","PrintPatch"],ModuleName ["Darcs","ProgressPatches"],ModuleName ["Darcs","RemoteApply"],ModuleName ["Darcs","RepoPath"],ModuleName ["Darcs","Repository"],ModuleName ["Darcs","Repository","ApplyPatches"],ModuleName ["Darcs","Repository","Cache"],ModuleName ["Darcs","Repository","Format"],ModuleName ["Darcs","Repository","HashedIO"],ModuleName ["Darcs","Repository","HashedRepo"],ModuleName ["Darcs","Repository","Internal"],ModuleName ["Darcs","Repository","LowLevel"],ModuleName ["Darcs","Repository","Merge"],ModuleName ["Darcs","Repository","InternalTypes"],ModuleName ["Darcs","Repository","Motd"],ModuleName ["Darcs","Repository","Old"],ModuleName ["Darcs","Repository","Prefs"],ModuleName ["Darcs","Repository","Repair"],ModuleName ["Darcs","Repository","State"],ModuleName ["Darcs","Resolution"],ModuleName ["Darcs","RunCommand"],ModuleName ["Darcs","SelectChanges"],ModuleName ["Darcs","SignalHandler"],ModuleName ["Darcs","Test"],ModuleName ["Darcs","TheCommands"],ModuleName ["Darcs","URL"],ModuleName ["Darcs","Utils"],ModuleName ["Darcs","Witnesses","Eq"],ModuleName ["Darcs","Witnesses","Ordered"],ModuleName ["Darcs","Witnesses","Sealed"],ModuleName ["Darcs","Witnesses","Show"],ModuleName ["Darcs","Witnesses","Unsafe"],ModuleName ["Darcs","Witnesses","WZipper"],ModuleName ["DateMatcher"],ModuleName ["English"],ModuleName ["Exec"],ModuleName ["ByteStringUtils"],ModuleName ["HTTP"],ModuleName ["IsoDate"],ModuleName ["Lcs"],ModuleName ["Printer"],ModuleName ["Progress"],ModuleName ["Ratified"],ModuleName ["SHA1"],ModuleName ["Ssh"],ModuleName ["URL"],ModuleName ["Workaround"]], libExposed = True, libBuildInfo = BuildInfo {buildable = True, buildTools = [], cppOptions = ["-DHAVE_CURL","-DHAVE_HTTP","-DHAVE_MMAP","-DHAVE_TERMINFO","-DGADT_WITNESSES=1"], ccOptions = ["-DHAVE_CURL","-D_REENTRANT"], ldOptions = [], pkgconfigDepends = [], frameworks = [], cSources = ["src/hscurl.c","src/atomic_create.c","src/fpstring.c","src/maybe_relink.c","src/umask.c","src/Crypt/sha2.c"], hsSourceDirs = ["src"], otherModules = [ModuleName ["Version"]], defaultLanguage = Nothing, otherLanguages = [], defaultExtensions = [], otherExtensions = [], oldExtensions = [CPP,BangPatterns,PatternGuards,GADTs,TypeOperators,FlexibleContexts,FlexibleInstances,ScopedTypeVariables,KindSignatures,RankNTypes,TypeFamilies,UnknownExtension "NoMonoLocalBinds"], extraLibs = ["curl"], extraLibDirs = [], includeDirs = ["src"], includes = ["curl/curl.h"], installIncludes = [], options = [(GHC,["-O2"]),(GHC,["-Wall","-funbox-strict-fields","-fwarn-tabs"])], ghcProfOptions = ["-prof","-auto-all"], ghcSharedOptions = [], customFieldsBI = [("x-have-http",""),("x-use-color","")], targetBuildDepends = [Dependency (PackageName "HTTP") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [3000,0], versionTags = []})) (LaterVersion (Version {versionBranch = [3000,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4000,2], versionTags = []}))),Dependency (PackageName "array") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,4], versionTags = []}))),Dependency (PackageName "base") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [5], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [5], versionTags = []})))),Dependency (PackageName "bytestring") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,9,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,9,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,10], versionTags = []}))),Dependency (PackageName "containers") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))),Dependency (PackageName "directory") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))),Dependency (PackageName "extensible-exceptions") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))),Dependency (PackageName "filepath") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,1,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,1,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,3,0,0], versionTags = []}))),Dependency (PackageName "hashed-storage") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))),Dependency (PackageName "haskeline") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,6,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,6,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,7], versionTags = []}))),Dependency (PackageName "html") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "mmap") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))),Dependency (PackageName "mtl") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,1], versionTags = []}))),Dependency (PackageName "network") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [2,2], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,4], versionTags = []}))),Dependency (PackageName "old-time") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "parsec") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,0], versionTags = []})) (LaterVersion (Version {versionBranch = [2,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [3,2], versionTags = []}))),Dependency (PackageName "process") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "random") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "regex-compat") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,95,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,95,1], versionTags = []}))),Dependency (PackageName "tar") (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})),Dependency (PackageName "terminfo") (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})),Dependency (PackageName "text") (WildcardVersion (Version {versionBranch = [0,11], versionTags = []})),Dependency (PackageName "unix") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,5], versionTags = []}))),Dependency (PackageName "vector") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,7], versionTags = []})) (LaterVersion (Version {versionBranch = [0,7], versionTags = []}))),Dependency (PackageName "zlib") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6,0,0], versionTags = []})))]}}), executables = [Executable {exeName = "darcs", modulePath = "darcs.hs", buildInfo = BuildInfo {buildable = True, buildTools = [], cppOptions = ["-DHAVE_CURL","-DHAVE_HTTP","-DHAVE_MMAP","-DHAVE_TERMINFO"], ccOptions = ["-DHAVE_CURL","-D_REENTRANT"], ldOptions = [], pkgconfigDepends = [], frameworks = [], cSources = ["src/hscurl.c","src/atomic_create.c","src/fpstring.c","src/maybe_relink.c","src/umask.c","src/Crypt/sha2.c"], hsSourceDirs = ["src"], otherModules = [], defaultLanguage = Nothing, otherLanguages = [], defaultExtensions = [], otherExtensions = [], oldExtensions = [CPP,BangPatterns,PatternGuards,GADTs,TypeOperators,FlexibleContexts,FlexibleInstances,ScopedTypeVariables,KindSignatures,RankNTypes,TypeFamilies,UnknownExtension "NoMonoLocalBinds"], extraLibs = ["curl"], extraLibDirs = [], includeDirs = ["src"], includes = ["curl/curl.h"], installIncludes = [], options = [(GHC,["-O2"]),(GHC,["-Wall","-funbox-strict-fields","-fwarn-tabs"]),(GHC,["-threaded"])], ghcProfOptions = ["-prof","-auto-all"], ghcSharedOptions = [], customFieldsBI = [("x-have-http",""),("x-use-color","")], targetBuildDepends = [Dependency (PackageName "HTTP") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [3000,0], versionTags = []})) (LaterVersion (Version {versionBranch = [3000,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4000,2], versionTags = []}))),Dependency (PackageName "array") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,4], versionTags = []}))),Dependency (PackageName "base") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [5], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [5], versionTags = []})))),Dependency (PackageName "bytestring") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,9,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,9,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,10], versionTags = []}))),Dependency (PackageName "containers") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))),Dependency (PackageName "directory") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))),Dependency (PackageName "extensible-exceptions") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))),Dependency (PackageName "filepath") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,1,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,1,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,3,0,0], versionTags = []}))),Dependency (PackageName "hashed-storage") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))),Dependency (PackageName "haskeline") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,6,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,6,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,7], versionTags = []}))),Dependency (PackageName "html") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "mmap") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))),Dependency (PackageName "mtl") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,1], versionTags = []}))),Dependency (PackageName "network") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [2,2], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,4], versionTags = []}))),Dependency (PackageName "old-time") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "parsec") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,0], versionTags = []})) (LaterVersion (Version {versionBranch = [2,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [3,2], versionTags = []}))),Dependency (PackageName "process") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "random") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "regex-compat") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,95,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,95,1], versionTags = []}))),Dependency (PackageName "tar") (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})),Dependency (PackageName "terminfo") (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})),Dependency (PackageName "text") (WildcardVersion (Version {versionBranch = [0,11], versionTags = []})),Dependency (PackageName "unix") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,5], versionTags = []}))),Dependency (PackageName "vector") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,7], versionTags = []})) (LaterVersion (Version {versionBranch = [0,7], versionTags = []}))),Dependency (PackageName "zlib") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6,0,0], versionTags = []})))]}},Executable {exeName = "darcs-test", modulePath = "test.hs", buildInfo = BuildInfo {buildable = True, buildTools = [], cppOptions = ["-DHAVE_MMAP","-DHAVE_TERMINFO","-DGADT_WITNESSES=1"], ccOptions = ["-D_REENTRANT"], ldOptions = [], pkgconfigDepends = [], frameworks = [], cSources = ["src/atomic_create.c","src/fpstring.c","src/maybe_relink.c","src/umask.c","src/Crypt/sha2.c"], hsSourceDirs = ["src"], otherModules = [ModuleName ["Darcs","Test","Email"],ModuleName ["Darcs","Test","Patch","Check"],ModuleName ["Darcs","Test","Patch","Examples"],ModuleName ["Darcs","Test","Patch","Examples2"],ModuleName ["Darcs","Test","Patch","Info"],ModuleName ["Darcs","Test","Patch","Prim","V1"],ModuleName ["Darcs","Test","Patch","Properties"],ModuleName ["Darcs","Test","Patch","Properties2"],ModuleName ["Darcs","Test","Patch","QuickCheck"],ModuleName ["Darcs","Test","Patch","RepoModel"],ModuleName ["Darcs","Test","Patch","Test"],ModuleName ["Darcs","Test","Patch","Unit"],ModuleName ["Darcs","Test","Patch","Unit2"],ModuleName ["Darcs","Test","Patch","Utils"],ModuleName ["Darcs","Test","Patch","WithState"],ModuleName ["Darcs","Test","Patch"],ModuleName ["Darcs","Test","Misc"],ModuleName ["Darcs","Test","Util","TestResult"],ModuleName ["Darcs","Test","Util","QuickCheck"]], defaultLanguage = Nothing, otherLanguages = [], defaultExtensions = [], otherExtensions = [], oldExtensions = [CPP,BangPatterns,PatternGuards,GADTs,TypeOperators,FlexibleContexts,FlexibleInstances,ScopedTypeVariables,KindSignatures,RankNTypes,TypeFamilies,UnknownExtension "NoMonoLocalBinds"], extraLibs = [], extraLibDirs = [], includeDirs = ["src"], includes = [], installIncludes = [], options = [(GHC,["-O2"]),(GHC,["-Wall","-funbox-strict-fields","-fwarn-tabs"]),(GHC,["-threaded"])], ghcProfOptions = ["-prof","-auto-all"], ghcSharedOptions = [], customFieldsBI = [("x-use-color","")], targetBuildDepends = [Dependency (PackageName "HTTP") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [3000,0], versionTags = []})) (LaterVersion (Version {versionBranch = [3000,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4000,2], versionTags = []}))),Dependency (PackageName "HUnit") (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))),Dependency (PackageName "QuickCheck") (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,3], versionTags = []})) (LaterVersion (Version {versionBranch = [2,3], versionTags = []}))),Dependency (PackageName "array") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,4], versionTags = []}))),Dependency (PackageName "base") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [5], versionTags = []}))),Dependency (PackageName "bytestring") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,9,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,9,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,10], versionTags = []}))),Dependency (PackageName "cmdlib") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,4], versionTags = []}))),Dependency (PackageName "containers") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))),Dependency (PackageName "directory") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))),Dependency (PackageName "extensible-exceptions") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))),Dependency (PackageName "filepath") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,1,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,1,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,3,0,0], versionTags = []}))),Dependency (PackageName "hashed-storage") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))),Dependency (PackageName "haskeline") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,6,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,6,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,7], versionTags = []}))),Dependency (PackageName "html") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "mmap") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))),Dependency (PackageName "mtl") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,1], versionTags = []}))),Dependency (PackageName "network") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [2,2], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,4], versionTags = []}))),Dependency (PackageName "old-time") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "parsec") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,0], versionTags = []})) (LaterVersion (Version {versionBranch = [2,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [3,2], versionTags = []}))),Dependency (PackageName "process") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "random") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "regex-compat") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,95,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,95,1], versionTags = []}))),Dependency (PackageName "shellish") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))),Dependency (PackageName "tar") (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})),Dependency (PackageName "terminfo") (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})),Dependency (PackageName "test-framework") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,2], versionTags = []}))),Dependency (PackageName "test-framework-hunit") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,2], versionTags = []}))),Dependency (PackageName "test-framework-quickcheck2") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,8], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,8], versionTags = []}))),Dependency (PackageName "text") (WildcardVersion (Version {versionBranch = [0,11], versionTags = []})),Dependency (PackageName "unix") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,5], versionTags = []}))),Dependency (PackageName "vector") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,7], versionTags = []})) (LaterVersion (Version {versionBranch = [0,7], versionTags = []}))),Dependency (PackageName "zlib") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6,0,0], versionTags = []})))]}}], testSuites = [], dataFiles = [], dataDir = "", extraSrcFiles = ["src/*.h","src/Crypt/sha2.h","src/win32/send_email.h","src/win32/sys/mman.h","contrib/_darcs.zsh","contrib/darcs_completion","contrib/cygwin-wrapper.bash","contrib/update_roundup.pl","contrib/upload.cgi","contrib/darcs-errors.hlint","doc/src/best_practices.tex","doc/src/building_darcs.tex","doc/src/configuring_darcs.tex","doc/src/features.tex","doc/src/gpl.tex","doc/src/darcs.tex","doc/darcs.css","README","NEWS","release/distributed-version","release/distributed-context","tests/data/*.tgz","tests/data/README","tests/data/*.dpatch","tests/data/convert/darcs1/*.dpatch","tests/data/convert/darcs2/*.dpatch","tests/*.sh","tests/bin/trackdown-bisect-helper.hs","tests/bin/hspwd.hs","tests/network/*.sh","tests/lib","tests/data/example_binary.png","tests/README.test_maintainers.txt","GNUmakefile"], extraTmpFiles = []}, withPrograms = [("ar",ConfiguredProgram {programId = "ar", programVersion = Nothing, programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/ar"}}),("gcc",ConfiguredProgram {programId = "gcc", programVersion = Just (Version {versionBranch = [4,6,1], versionTags = []}), programDefaultArgs = ["-fno-stack-protector"], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/gcc"}}),("ghc",ConfiguredProgram {programId = "ghc", programVersion = Just (Version {versionBranch = [7,0,3], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/ghc"}}),("ghc-pkg",ConfiguredProgram {programId = "ghc-pkg", programVersion = Just (Version {versionBranch = [7,0,3], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/ghc-pkg"}}),("haddock",ConfiguredProgram {programId = "haddock", programVersion = Just (Version {versionBranch = [2,9,2], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/haddock"}}),("hsc2hs",ConfiguredProgram {programId = "hsc2hs", programVersion = Just (Version {versionBranch = [0,67], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/hsc2hs"}}),("hscolour",ConfiguredProgram {programId = "hscolour", programVersion = Just (Version {versionBranch = [1,17], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/HsColour"}}),("ld",ConfiguredProgram {programId = "ld", programVersion = Nothing, programDefaultArgs = ["-x"], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/ld"}}),("pkg-config",ConfiguredProgram {programId = "pkg-config", programVersion = Just (Version {versionBranch = [0,26], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/pkg-config"}}),("ranlib",ConfiguredProgram {programId = "ranlib", programVersion = Nothing, programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/ranlib"}}),("strip",ConfiguredProgram {programId = "strip", programVersion = Nothing, programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/strip"}}),("tar",ConfiguredProgram {programId = "tar", programVersion = Nothing, programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/bin/tar"}})], withPackageDB = [GlobalPackageDB,UserPackageDB], withVanillaLib = True, withProfLib = False, withSharedLib = False, withProfExe = False, withOptimization = NormalOptimisation, withGHCiLib = True, splitObjs = False, stripExes = True, progPrefix = "", progSuffix = ""}
+Saved package config for darcs-beta-2.7.98.2 written by Cabal-1.13.3 using ghc-7.0
+LocalBuildInfo {configFlags = ConfigFlags {configPrograms = [], configProgramPaths = [], configProgramArgs = [], configHcFlavor = Flag GHC, configHcPath = NoFlag, configHcPkg = NoFlag, configVanillaLib = Flag True, configProfLib = Flag False, configSharedLib = Flag False, configDynExe = Flag False, configProfExe = Flag False, configConfigureArgs = [], configOptimization = Flag NormalOptimisation, configProgPrefix = Flag "", configProgSuffix = Flag "", configInstallDirs = InstallDirs {prefix = NoFlag, bindir = NoFlag, libdir = NoFlag, libsubdir = NoFlag, dynlibdir = NoFlag, libexecdir = NoFlag, progdir = NoFlag, includedir = NoFlag, datadir = NoFlag, datasubdir = NoFlag, docdir = NoFlag, mandir = NoFlag, htmldir = NoFlag, haddockdir = NoFlag}, configScratchDir = NoFlag, configExtraLibDirs = [], configExtraIncludeDirs = [], configDistPref = Flag "dist", configVerbosity = Flag Normal, configUserInstall = Flag True, configPackageDB = NoFlag, configGHCiLib = Flag True, configSplitObjs = Flag False, configStripExes = Flag True, configConstraints = [], configConfigurationsFlags = [(FlagName "test",True)], configTests = Flag False, configBenchmarks = Flag False, configLibCoverage = Flag False}, extraConfigArgs = [], installDirTemplates = InstallDirs {prefix = "/home/ganesh/.cabal", bindir = "$prefix/bin", libdir = "$prefix/lib", libsubdir = "$pkgid/$compiler", dynlibdir = "$libdir", libexecdir = "$prefix/libexec", progdir = "$libdir/hugs/programs", includedir = "$libdir/$libsubdir/include", datadir = "$prefix/share", datasubdir = "$pkgid", docdir = "$datadir/doc/$pkgid", mandir = "$datadir/man", htmldir = "$docdir/html", haddockdir = "$htmldir"}, compiler = Compiler {compilerId = CompilerId GHC (Version {versionBranch = [7,0,4], versionTags = []}), compilerLanguages = [(Haskell98,"-XHaskell98"),(Haskell2010,"-XHaskell2010")], compilerExtensions = [(EnableExtension NondecreasingIndentation,""),(DisableExtension NondecreasingIndentation,""),(UnknownExtension "Haskell98","-XHaskell98"),(UnknownExtension "Haskell2010","-XHaskell2010"),(EnableExtension CPP,"-XCPP"),(DisableExtension CPP,"-XNoCPP"),(EnableExtension PostfixOperators,"-XPostfixOperators"),(DisableExtension PostfixOperators,"-XNoPostfixOperators"),(EnableExtension TupleSections,"-XTupleSections"),(DisableExtension TupleSections,"-XNoTupleSections"),(EnableExtension PatternGuards,"-XPatternGuards"),(DisableExtension PatternGuards,"-XNoPatternGuards"),(EnableExtension UnicodeSyntax,"-XUnicodeSyntax"),(DisableExtension UnicodeSyntax,"-XNoUnicodeSyntax"),(EnableExtension MagicHash,"-XMagicHash"),(DisableExtension MagicHash,"-XNoMagicHash"),(EnableExtension PolymorphicComponents,"-XPolymorphicComponents"),(DisableExtension PolymorphicComponents,"-XNoPolymorphicComponents"),(EnableExtension ExistentialQuantification,"-XExistentialQuantification"),(DisableExtension ExistentialQuantification,"-XNoExistentialQuantification"),(EnableExtension KindSignatures,"-XKindSignatures"),(DisableExtension KindSignatures,"-XNoKindSignatures"),(EnableExtension EmptyDataDecls,"-XEmptyDataDecls"),(DisableExtension EmptyDataDecls,"-XNoEmptyDataDecls"),(EnableExtension ParallelListComp,"-XParallelListComp"),(DisableExtension ParallelListComp,"-XNoParallelListComp"),(EnableExtension TransformListComp,"-XTransformListComp"),(DisableExtension TransformListComp,"-XNoTransformListComp"),(EnableExtension ForeignFunctionInterface,"-XForeignFunctionInterface"),(DisableExtension ForeignFunctionInterface,"-XNoForeignFunctionInterface"),(EnableExtension UnliftedFFITypes,"-XUnliftedFFITypes"),(DisableExtension UnliftedFFITypes,"-XNoUnliftedFFITypes"),(EnableExtension GHCForeignImportPrim,"-XGHCForeignImportPrim"),(DisableExtension GHCForeignImportPrim,"-XNoGHCForeignImportPrim"),(EnableExtension LiberalTypeSynonyms,"-XLiberalTypeSynonyms"),(DisableExtension LiberalTypeSynonyms,"-XNoLiberalTypeSynonyms"),(EnableExtension Rank2Types,"-XRank2Types"),(DisableExtension Rank2Types,"-XNoRank2Types"),(EnableExtension RankNTypes,"-XRankNTypes"),(DisableExtension RankNTypes,"-XNoRankNTypes"),(EnableExtension ImpredicativeTypes,"-XImpredicativeTypes"),(DisableExtension ImpredicativeTypes,"-XNoImpredicativeTypes"),(EnableExtension TypeOperators,"-XTypeOperators"),(DisableExtension TypeOperators,"-XNoTypeOperators"),(EnableExtension RecursiveDo,"-XRecursiveDo"),(DisableExtension RecursiveDo,"-XNoRecursiveDo"),(EnableExtension DoRec,"-XDoRec"),(DisableExtension DoRec,"-XNoDoRec"),(EnableExtension Arrows,"-XArrows"),(DisableExtension Arrows,"-XNoArrows"),(UnknownExtension "PArr","-XPArr"),(UnknownExtension "NoPArr","-XNoPArr"),(EnableExtension TemplateHaskell,"-XTemplateHaskell"),(DisableExtension TemplateHaskell,"-XNoTemplateHaskell"),(EnableExtension QuasiQuotes,"-XQuasiQuotes"),(DisableExtension QuasiQuotes,"-XNoQuasiQuotes"),(EnableExtension Generics,"-XGenerics"),(DisableExtension Generics,"-XNoGenerics"),(EnableExtension ImplicitPrelude,"-XImplicitPrelude"),(DisableExtension ImplicitPrelude,"-XNoImplicitPrelude"),(EnableExtension RecordWildCards,"-XRecordWildCards"),(DisableExtension RecordWildCards,"-XNoRecordWildCards"),(EnableExtension NamedFieldPuns,"-XNamedFieldPuns"),(DisableExtension NamedFieldPuns,"-XNoNamedFieldPuns"),(EnableExtension RecordPuns,"-XRecordPuns"),(DisableExtension RecordPuns,"-XNoRecordPuns"),(EnableExtension DisambiguateRecordFields,"-XDisambiguateRecordFields"),(DisableExtension DisambiguateRecordFields,"-XNoDisambiguateRecordFields"),(EnableExtension OverloadedStrings,"-XOverloadedStrings"),(DisableExtension OverloadedStrings,"-XNoOverloadedStrings"),(EnableExtension GADTs,"-XGADTs"),(DisableExtension GADTs,"-XNoGADTs"),(EnableExtension ViewPatterns,"-XViewPatterns"),(DisableExtension ViewPatterns,"-XNoViewPatterns"),(EnableExtension TypeFamilies,"-XTypeFamilies"),(DisableExtension TypeFamilies,"-XNoTypeFamilies"),(EnableExtension BangPatterns,"-XBangPatterns"),(DisableExtension BangPatterns,"-XNoBangPatterns"),(EnableExtension MonomorphismRestriction,"-XMonomorphismRestriction"),(DisableExtension MonomorphismRestriction,"-XNoMonomorphismRestriction"),(EnableExtension NPlusKPatterns,"-XNPlusKPatterns"),(DisableExtension NPlusKPatterns,"-XNoNPlusKPatterns"),(EnableExtension DoAndIfThenElse,"-XDoAndIfThenElse"),(DisableExtension DoAndIfThenElse,"-XNoDoAndIfThenElse"),(EnableExtension RebindableSyntax,"-XRebindableSyntax"),(DisableExtension RebindableSyntax,"-XNoRebindableSyntax"),(EnableExtension MonoPatBinds,"-XMonoPatBinds"),(DisableExtension MonoPatBinds,"-XNoMonoPatBinds"),(EnableExtension ExplicitForAll,"-XExplicitForAll"),(DisableExtension ExplicitForAll,"-XNoExplicitForAll"),(UnknownExtension "AlternativeLayoutRule","-XAlternativeLayoutRule"),(UnknownExtension "NoAlternativeLayoutRule","-XNoAlternativeLayoutRule"),(UnknownExtension "AlternativeLayoutRuleTransitional","-XAlternativeLayoutRuleTransitional"),(UnknownExtension "NoAlternativeLayoutRuleTransitional","-XNoAlternativeLayoutRuleTransitional"),(EnableExtension DatatypeContexts,"-XDatatypeContexts"),(DisableExtension DatatypeContexts,"-XNoDatatypeContexts"),(EnableExtension MonoLocalBinds,"-XMonoLocalBinds"),(DisableExtension MonoLocalBinds,"-XNoMonoLocalBinds"),(EnableExtension RelaxedPolyRec,"-XRelaxedPolyRec"),(DisableExtension RelaxedPolyRec,"-XNoRelaxedPolyRec"),(EnableExtension ExtendedDefaultRules,"-XExtendedDefaultRules"),(DisableExtension ExtendedDefaultRules,"-XNoExtendedDefaultRules"),(EnableExtension ImplicitParams,"-XImplicitParams"),(DisableExtension ImplicitParams,"-XNoImplicitParams"),(EnableExtension ScopedTypeVariables,"-XScopedTypeVariables"),(DisableExtension ScopedTypeVariables,"-XNoScopedTypeVariables"),(EnableExtension PatternSignatures,"-XPatternSignatures"),(DisableExtension PatternSignatures,"-XNoPatternSignatures"),(EnableExtension UnboxedTuples,"-XUnboxedTuples"),(DisableExtension UnboxedTuples,"-XNoUnboxedTuples"),(EnableExtension StandaloneDeriving,"-XStandaloneDeriving"),(DisableExtension StandaloneDeriving,"-XNoStandaloneDeriving"),(EnableExtension DeriveDataTypeable,"-XDeriveDataTypeable"),(DisableExtension DeriveDataTypeable,"-XNoDeriveDataTypeable"),(EnableExtension DeriveFunctor,"-XDeriveFunctor"),(DisableExtension DeriveFunctor,"-XNoDeriveFunctor"),(EnableExtension DeriveTraversable,"-XDeriveTraversable"),(DisableExtension DeriveTraversable,"-XNoDeriveTraversable"),(EnableExtension DeriveFoldable,"-XDeriveFoldable"),(DisableExtension DeriveFoldable,"-XNoDeriveFoldable"),(EnableExtension TypeSynonymInstances,"-XTypeSynonymInstances"),(DisableExtension TypeSynonymInstances,"-XNoTypeSynonymInstances"),(EnableExtension FlexibleContexts,"-XFlexibleContexts"),(DisableExtension FlexibleContexts,"-XNoFlexibleContexts"),(EnableExtension FlexibleInstances,"-XFlexibleInstances"),(DisableExtension FlexibleInstances,"-XNoFlexibleInstances"),(EnableExtension ConstrainedClassMethods,"-XConstrainedClassMethods"),(DisableExtension ConstrainedClassMethods,"-XNoConstrainedClassMethods"),(EnableExtension MultiParamTypeClasses,"-XMultiParamTypeClasses"),(DisableExtension MultiParamTypeClasses,"-XNoMultiParamTypeClasses"),(EnableExtension FunctionalDependencies,"-XFunctionalDependencies"),(DisableExtension FunctionalDependencies,"-XNoFunctionalDependencies"),(EnableExtension GeneralizedNewtypeDeriving,"-XGeneralizedNewtypeDeriving"),(DisableExtension GeneralizedNewtypeDeriving,"-XNoGeneralizedNewtypeDeriving"),(EnableExtension OverlappingInstances,"-XOverlappingInstances"),(DisableExtension OverlappingInstances,"-XNoOverlappingInstances"),(EnableExtension UndecidableInstances,"-XUndecidableInstances"),(DisableExtension UndecidableInstances,"-XNoUndecidableInstances"),(EnableExtension IncoherentInstances,"-XIncoherentInstances"),(DisableExtension IncoherentInstances,"-XNoIncoherentInstances"),(EnableExtension PackageImports,"-XPackageImports"),(DisableExtension PackageImports,"-XNoPackageImports"),(EnableExtension NewQualifiedOperators,"-XNewQualifiedOperators"),(DisableExtension NewQualifiedOperators,"-XNoNewQualifiedOperators")]}, buildDir = "dist/build", scratchDir = "dist/scratch", libraryConfig = Just (ComponentLocalBuildInfo {componentPackageDeps = [(InstalledPackageId "HTTP-4000.1.1-7307331a7f052a69bdd620a27081320d",PackageIdentifier {pkgName = PackageName "HTTP", pkgVersion = Version {versionBranch = [4000,1,1], versionTags = []}}),(InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",PackageIdentifier {pkgName = PackageName "array", pkgVersion = Version {versionBranch = [0,3,0,2], versionTags = []}}),(InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,3,1,0], versionTags = []}}),(InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",PackageIdentifier {pkgName = PackageName "bytestring", pkgVersion = Version {versionBranch = [0,9,1,10], versionTags = []}}),(InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",PackageIdentifier {pkgName = PackageName "containers", pkgVersion = Version {versionBranch = [0,4,0,0], versionTags = []}}),(InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",PackageIdentifier {pkgName = PackageName "directory", pkgVersion = Version {versionBranch = [1,1,0,0], versionTags = []}}),(InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",PackageIdentifier {pkgName = PackageName "extensible-exceptions", pkgVersion = Version {versionBranch = [0,1,1,2], versionTags = []}}),(InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",PackageIdentifier {pkgName = PackageName "filepath", pkgVersion = Version {versionBranch = [1,2,0,0], versionTags = []}}),(InstalledPackageId "hashed-storage-0.5.7-209e6e98f7c10343c7fc1181f2421d8e",PackageIdentifier {pkgName = PackageName "hashed-storage", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}),(InstalledPackageId "haskeline-0.6.4.0-666d47334a8ec9818526b80c10496091",PackageIdentifier {pkgName = PackageName "haskeline", pkgVersion = Version {versionBranch = [0,6,4,0], versionTags = []}}),(InstalledPackageId "html-1.0.1.2-a494249f98a0f38b1a8db28bc70f8b0b",PackageIdentifier {pkgName = PackageName "html", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}),(InstalledPackageId "mmap-0.5.7-a26fcb5c2a07acc22fe29ab256e71f9f",PackageIdentifier {pkgName = PackageName "mmap", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}),(InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",PackageIdentifier {pkgName = PackageName "mtl", pkgVersion = Version {versionBranch = [2,0,1,0], versionTags = []}}),(InstalledPackageId "network-2.3.0.4-3ac6bb38978a0758e807f7956decb2f2",PackageIdentifier {pkgName = PackageName "network", pkgVersion = Version {versionBranch = [2,3,0,4], versionTags = []}}),(InstalledPackageId "old-time-1.0.0.6-37d6575186c36059fbc372c289dbddd4",PackageIdentifier {pkgName = PackageName "old-time", pkgVersion = Version {versionBranch = [1,0,0,6], versionTags = []}}),(InstalledPackageId "parsec-3.1.1-9ad7689ce68f46e0751207509e882c5b",PackageIdentifier {pkgName = PackageName "parsec", pkgVersion = Version {versionBranch = [3,1,1], versionTags = []}}),(InstalledPackageId "process-1.0.1.5-4cab1bf0666275ac101dd48c7565b64c",PackageIdentifier {pkgName = PackageName "process", pkgVersion = Version {versionBranch = [1,0,1,5], versionTags = []}}),(InstalledPackageId "random-1.0.0.3-57524486875e0c4c260dd22788921013",PackageIdentifier {pkgName = PackageName "random", pkgVersion = Version {versionBranch = [1,0,0,3], versionTags = []}}),(InstalledPackageId "regex-compat-0.95.1-55ae1a721bfd43f57655a2c250a4ba9a",PackageIdentifier {pkgName = PackageName "regex-compat", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}),(InstalledPackageId "tar-0.3.1.0-40adceea7b7dde44c58982a945493d60",PackageIdentifier {pkgName = PackageName "tar", pkgVersion = Version {versionBranch = [0,3,1,0], versionTags = []}}),(InstalledPackageId "terminfo-0.3.1.3-ac8ae791e59af4b07646e3465163bc35",PackageIdentifier {pkgName = PackageName "terminfo", pkgVersion = Version {versionBranch = [0,3,1,3], versionTags = []}}),(InstalledPackageId "text-0.11.1.1-ff6d7d9a492863e8bcac7b0b64d124a7",PackageIdentifier {pkgName = PackageName "text", pkgVersion = Version {versionBranch = [0,11,1,1], versionTags = []}}),(InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1",PackageIdentifier {pkgName = PackageName "unix", pkgVersion = Version {versionBranch = [2,4,2,0], versionTags = []}}),(InstalledPackageId "vector-0.7.1-d0453ff83191033a2912b337e66eb0f7",PackageIdentifier {pkgName = PackageName "vector", pkgVersion = Version {versionBranch = [0,7,1], versionTags = []}}),(InstalledPackageId "zlib-0.5.3.1-5fbdf714525b76e0e601c2ffb25f2044",PackageIdentifier {pkgName = PackageName "zlib", pkgVersion = Version {versionBranch = [0,5,3,1], versionTags = []}})]}), executableConfigs = [("darcs-test",ComponentLocalBuildInfo {componentPackageDeps = [(InstalledPackageId "HTTP-4000.1.1-7307331a7f052a69bdd620a27081320d",PackageIdentifier {pkgName = PackageName "HTTP", pkgVersion = Version {versionBranch = [4000,1,1], versionTags = []}}),(InstalledPackageId "HUnit-1.2.2.3-e1267035fbfcf63ba78af031f8e974a5",PackageIdentifier {pkgName = PackageName "HUnit", pkgVersion = Version {versionBranch = [1,2,2,3], versionTags = []}}),(InstalledPackageId "QuickCheck-2.4.1.1-b24a010efafa7347b56b3001ff218a37",PackageIdentifier {pkgName = PackageName "QuickCheck", pkgVersion = Version {versionBranch = [2,4,1,1], versionTags = []}}),(InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",PackageIdentifier {pkgName = PackageName "array", pkgVersion = Version {versionBranch = [0,3,0,2], versionTags = []}}),(InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,3,1,0], versionTags = []}}),(InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",PackageIdentifier {pkgName = PackageName "bytestring", pkgVersion = Version {versionBranch = [0,9,1,10], versionTags = []}}),(InstalledPackageId "cmdlib-0.3.3-b129826ff596e08d3a82f0f658aa48fb",PackageIdentifier {pkgName = PackageName "cmdlib", pkgVersion = Version {versionBranch = [0,3,3], versionTags = []}}),(InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",PackageIdentifier {pkgName = PackageName "containers", pkgVersion = Version {versionBranch = [0,4,0,0], versionTags = []}}),(InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",PackageIdentifier {pkgName = PackageName "directory", pkgVersion = Version {versionBranch = [1,1,0,0], versionTags = []}}),(InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",PackageIdentifier {pkgName = PackageName "extensible-exceptions", pkgVersion = Version {versionBranch = [0,1,1,2], versionTags = []}}),(InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",PackageIdentifier {pkgName = PackageName "filepath", pkgVersion = Version {versionBranch = [1,2,0,0], versionTags = []}}),(InstalledPackageId "hashed-storage-0.5.7-209e6e98f7c10343c7fc1181f2421d8e",PackageIdentifier {pkgName = PackageName "hashed-storage", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}),(InstalledPackageId "haskeline-0.6.4.0-666d47334a8ec9818526b80c10496091",PackageIdentifier {pkgName = PackageName "haskeline", pkgVersion = Version {versionBranch = [0,6,4,0], versionTags = []}}),(InstalledPackageId "html-1.0.1.2-a494249f98a0f38b1a8db28bc70f8b0b",PackageIdentifier {pkgName = PackageName "html", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}),(InstalledPackageId "mmap-0.5.7-a26fcb5c2a07acc22fe29ab256e71f9f",PackageIdentifier {pkgName = PackageName "mmap", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}),(InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",PackageIdentifier {pkgName = PackageName "mtl", pkgVersion = Version {versionBranch = [2,0,1,0], versionTags = []}}),(InstalledPackageId "network-2.3.0.4-3ac6bb38978a0758e807f7956decb2f2",PackageIdentifier {pkgName = PackageName "network", pkgVersion = Version {versionBranch = [2,3,0,4], versionTags = []}}),(InstalledPackageId "old-time-1.0.0.6-37d6575186c36059fbc372c289dbddd4",PackageIdentifier {pkgName = PackageName "old-time", pkgVersion = Version {versionBranch = [1,0,0,6], versionTags = []}}),(InstalledPackageId "parsec-3.1.1-9ad7689ce68f46e0751207509e882c5b",PackageIdentifier {pkgName = PackageName "parsec", pkgVersion = Version {versionBranch = [3,1,1], versionTags = []}}),(InstalledPackageId "process-1.0.1.5-4cab1bf0666275ac101dd48c7565b64c",PackageIdentifier {pkgName = PackageName "process", pkgVersion = Version {versionBranch = [1,0,1,5], versionTags = []}}),(InstalledPackageId "random-1.0.0.3-57524486875e0c4c260dd22788921013",PackageIdentifier {pkgName = PackageName "random", pkgVersion = Version {versionBranch = [1,0,0,3], versionTags = []}}),(InstalledPackageId "regex-compat-0.95.1-55ae1a721bfd43f57655a2c250a4ba9a",PackageIdentifier {pkgName = PackageName "regex-compat", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}),(InstalledPackageId "shellish-0.1.4-59e9bb189ba13277e9b8c1aa6ac88e81",PackageIdentifier {pkgName = PackageName "shellish", pkgVersion = Version {versionBranch = [0,1,4], versionTags = []}}),(InstalledPackageId "tar-0.3.1.0-40adceea7b7dde44c58982a945493d60",PackageIdentifier {pkgName = PackageName "tar", pkgVersion = Version {versionBranch = [0,3,1,0], versionTags = []}}),(InstalledPackageId "terminfo-0.3.1.3-ac8ae791e59af4b07646e3465163bc35",PackageIdentifier {pkgName = PackageName "terminfo", pkgVersion = Version {versionBranch = [0,3,1,3], versionTags = []}}),(InstalledPackageId "test-framework-0.3.3-baed105bc570d96f6735672240decba6",PackageIdentifier {pkgName = PackageName "test-framework", pkgVersion = Version {versionBranch = [0,3,3], versionTags = []}}),(InstalledPackageId "test-framework-hunit-0.2.6-d48f373da830a4693347d5428bf55fa4",PackageIdentifier {pkgName = PackageName "test-framework-hunit", pkgVersion = Version {versionBranch = [0,2,6], versionTags = []}}),(InstalledPackageId "test-framework-quickcheck2-0.2.10-45e76d2c5ec0caf49548c83c8f304ba6",PackageIdentifier {pkgName = PackageName "test-framework-quickcheck2", pkgVersion = Version {versionBranch = [0,2,10], versionTags = []}}),(InstalledPackageId "text-0.11.1.1-ff6d7d9a492863e8bcac7b0b64d124a7",PackageIdentifier {pkgName = PackageName "text", pkgVersion = Version {versionBranch = [0,11,1,1], versionTags = []}}),(InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1",PackageIdentifier {pkgName = PackageName "unix", pkgVersion = Version {versionBranch = [2,4,2,0], versionTags = []}}),(InstalledPackageId "vector-0.7.1-d0453ff83191033a2912b337e66eb0f7",PackageIdentifier {pkgName = PackageName "vector", pkgVersion = Version {versionBranch = [0,7,1], versionTags = []}}),(InstalledPackageId "zlib-0.5.3.1-5fbdf714525b76e0e601c2ffb25f2044",PackageIdentifier {pkgName = PackageName "zlib", pkgVersion = Version {versionBranch = [0,5,3,1], versionTags = []}})]}),("darcs",ComponentLocalBuildInfo {componentPackageDeps = [(InstalledPackageId "HTTP-4000.1.1-7307331a7f052a69bdd620a27081320d",PackageIdentifier {pkgName = PackageName "HTTP", pkgVersion = Version {versionBranch = [4000,1,1], versionTags = []}}),(InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",PackageIdentifier {pkgName = PackageName "array", pkgVersion = Version {versionBranch = [0,3,0,2], versionTags = []}}),(InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,3,1,0], versionTags = []}}),(InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",PackageIdentifier {pkgName = PackageName "bytestring", pkgVersion = Version {versionBranch = [0,9,1,10], versionTags = []}}),(InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",PackageIdentifier {pkgName = PackageName "containers", pkgVersion = Version {versionBranch = [0,4,0,0], versionTags = []}}),(InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",PackageIdentifier {pkgName = PackageName "directory", pkgVersion = Version {versionBranch = [1,1,0,0], versionTags = []}}),(InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",PackageIdentifier {pkgName = PackageName "extensible-exceptions", pkgVersion = Version {versionBranch = [0,1,1,2], versionTags = []}}),(InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",PackageIdentifier {pkgName = PackageName "filepath", pkgVersion = Version {versionBranch = [1,2,0,0], versionTags = []}}),(InstalledPackageId "hashed-storage-0.5.7-209e6e98f7c10343c7fc1181f2421d8e",PackageIdentifier {pkgName = PackageName "hashed-storage", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}),(InstalledPackageId "haskeline-0.6.4.0-666d47334a8ec9818526b80c10496091",PackageIdentifier {pkgName = PackageName "haskeline", pkgVersion = Version {versionBranch = [0,6,4,0], versionTags = []}}),(InstalledPackageId "html-1.0.1.2-a494249f98a0f38b1a8db28bc70f8b0b",PackageIdentifier {pkgName = PackageName "html", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}),(InstalledPackageId "mmap-0.5.7-a26fcb5c2a07acc22fe29ab256e71f9f",PackageIdentifier {pkgName = PackageName "mmap", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}),(InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",PackageIdentifier {pkgName = PackageName "mtl", pkgVersion = Version {versionBranch = [2,0,1,0], versionTags = []}}),(InstalledPackageId "network-2.3.0.4-3ac6bb38978a0758e807f7956decb2f2",PackageIdentifier {pkgName = PackageName "network", pkgVersion = Version {versionBranch = [2,3,0,4], versionTags = []}}),(InstalledPackageId "old-time-1.0.0.6-37d6575186c36059fbc372c289dbddd4",PackageIdentifier {pkgName = PackageName "old-time", pkgVersion = Version {versionBranch = [1,0,0,6], versionTags = []}}),(InstalledPackageId "parsec-3.1.1-9ad7689ce68f46e0751207509e882c5b",PackageIdentifier {pkgName = PackageName "parsec", pkgVersion = Version {versionBranch = [3,1,1], versionTags = []}}),(InstalledPackageId "process-1.0.1.5-4cab1bf0666275ac101dd48c7565b64c",PackageIdentifier {pkgName = PackageName "process", pkgVersion = Version {versionBranch = [1,0,1,5], versionTags = []}}),(InstalledPackageId "random-1.0.0.3-57524486875e0c4c260dd22788921013",PackageIdentifier {pkgName = PackageName "random", pkgVersion = Version {versionBranch = [1,0,0,3], versionTags = []}}),(InstalledPackageId "regex-compat-0.95.1-55ae1a721bfd43f57655a2c250a4ba9a",PackageIdentifier {pkgName = PackageName "regex-compat", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}),(InstalledPackageId "tar-0.3.1.0-40adceea7b7dde44c58982a945493d60",PackageIdentifier {pkgName = PackageName "tar", pkgVersion = Version {versionBranch = [0,3,1,0], versionTags = []}}),(InstalledPackageId "terminfo-0.3.1.3-ac8ae791e59af4b07646e3465163bc35",PackageIdentifier {pkgName = PackageName "terminfo", pkgVersion = Version {versionBranch = [0,3,1,3], versionTags = []}}),(InstalledPackageId "text-0.11.1.1-ff6d7d9a492863e8bcac7b0b64d124a7",PackageIdentifier {pkgName = PackageName "text", pkgVersion = Version {versionBranch = [0,11,1,1], versionTags = []}}),(InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1",PackageIdentifier {pkgName = PackageName "unix", pkgVersion = Version {versionBranch = [2,4,2,0], versionTags = []}}),(InstalledPackageId "vector-0.7.1-d0453ff83191033a2912b337e66eb0f7",PackageIdentifier {pkgName = PackageName "vector", pkgVersion = Version {versionBranch = [0,7,1], versionTags = []}}),(InstalledPackageId "zlib-0.5.3.1-5fbdf714525b76e0e601c2ffb25f2044",PackageIdentifier {pkgName = PackageName "zlib", pkgVersion = Version {versionBranch = [0,5,3,1], versionTags = []}})]})], compBuildOrder = [CLibName,CExeName "darcs-test",CExeName "darcs"], testSuiteConfigs = [], benchmarkConfigs = [], installedPkgs = PackageIndex (fromList [(InstalledPackageId "HTTP-4000.1.1-7307331a7f052a69bdd620a27081320d",InstalledPackageInfo {installedPackageId = InstalledPackageId "HTTP-4000.1.1-7307331a7f052a69bdd620a27081320d", sourcePackageId = PackageIdentifier {pkgName = PackageName "HTTP", pkgVersion = Version {versionBranch = [4000,1,1], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2002, Warrick Gray\nCopyright (c) 2002-2005, Ian Lynagh\nCopyright (c) 2003-2006, Bjorn Bringert\nCopyright (c) 2004, Andre Furtado\nCopyright (c) 2004, Ganesh Sittampalam\nCopyright (c) 2004-2005, Dominic Steinitz\nCopyright 2007 Robin Bate Boerop\nCopyright 2008- Sigbjorn Finne", maintainer = "Ganesh Sittampalam <ganesh@earth.li>", author = "Warrick Gray <warrick.gray@hotmail.com>", stability = "", homepage = "http://projects.haskell.org/http/", pkgUrl = "", synopsis = "", description = "The HTTP package supports client-side web programming in Haskell. It lets you set up\nHTTP connections, transmitting requests and processing the responses coming back, all\nfrom within the comforts of Haskell. It's dependent on the network package to operate,\nbut other than that, the implementation is all written in Haskell.\n\nA basic API for issuing single HTTP requests + receiving responses is provided. On top\nof that, a session-level abstraction is also on offer  (the @BrowserAction@ monad);\nit taking care of handling the management of persistent connections, proxies,\nstate (cookies) and authentication credentials required to handle multi-step\ninteractions with a web server.\n\nThe representation of the bytes flowing across is extensible via the use of a type class,\nletting you pick the representation of requests and responses that best fits your use.\nSome pre-packaged, common instances are provided for you (@ByteString@, @String@.)\n\nHere's an example use:\n\n>\n>    do\n>      rsp <- Network.HTTP.simpleHTTP (getRequest \"http://www.haskell.org/\")\n>              -- fetch document and return it (as a 'String'.)\n>      fmap (take 100) (getResponseBody rsp)\n>\n>    do\n>      rsp <- Network.Browser.browse $ do\n>               setAllowRedirects True -- handle HTTP redirects\n>               request $ getRequest \"http://google.com/\"\n>      fmap (take 100) (getResponseBody rsp)\n>\n\nGit repository available at <git://github.com/haskell/HTTP.git>", category = "Network", exposed = True, exposedModules = [ModuleName ["Network","BufferType"],ModuleName ["Network","Stream"],ModuleName ["Network","StreamDebugger"],ModuleName ["Network","StreamSocket"],ModuleName ["Network","TCP"],ModuleName ["Network","HTTP"],ModuleName ["Network","HTTP","Headers"],ModuleName ["Network","HTTP","Base"],ModuleName ["Network","HTTP","Stream"],ModuleName ["Network","HTTP","Auth"],ModuleName ["Network","HTTP","Cookie"],ModuleName ["Network","HTTP","Proxy"],ModuleName ["Network","HTTP","HandleStream"],ModuleName ["Network","Browser"]], hiddenModules = [ModuleName ["Network","HTTP","Base64"],ModuleName ["Network","HTTP","MD5"],ModuleName ["Network","HTTP","MD5Aux"],ModuleName ["Network","HTTP","Utils"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/HTTP-4000.1.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/HTTP-4000.1.1"], hsLibraries = ["HSHTTP-4000.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",InstalledPackageId "network-2.3.0.4-3ac6bb38978a0758e807f7956decb2f2",InstalledPackageId "old-time-1.0.0.6-37d6575186c36059fbc372c289dbddd4",InstalledPackageId "parsec-3.1.1-9ad7689ce68f46e0751207509e882c5b"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/HTTP-4000.1.1/html/HTTP.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/HTTP-4000.1.1/html"]}),(InstalledPackageId "HUnit-1.2.2.3-e1267035fbfcf63ba78af031f8e974a5",InstalledPackageInfo {installedPackageId = InstalledPackageId "HUnit-1.2.2.3-e1267035fbfcf63ba78af031f8e974a5", sourcePackageId = PackageIdentifier {pkgName = PackageName "HUnit", pkgVersion = Version {versionBranch = [1,2,2,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "hunit@richardg.name", author = "Dean Herington", stability = "stable", homepage = "http://hunit.sourceforge.net/", pkgUrl = "", synopsis = "", description = "HUnit is a unit testing framework for Haskell, inspired by the\nJUnit tool for Java, see: <http://www.junit.org>.", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","HUnit","Base"],ModuleName ["Test","HUnit","Lang"],ModuleName ["Test","HUnit","Terminal"],ModuleName ["Test","HUnit","Text"],ModuleName ["Test","HUnit"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/HUnit-1.2.2.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/HUnit-1.2.2.3"], hsLibraries = ["HSHUnit-1.2.2.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/HUnit-1.2.2.3/html/HUnit.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/HUnit-1.2.2.3/html"]}),(InstalledPackageId "QuickCheck-2.4.1.1-b24a010efafa7347b56b3001ff218a37",InstalledPackageInfo {installedPackageId = InstalledPackageId "QuickCheck-2.4.1.1-b24a010efafa7347b56b3001ff218a37", sourcePackageId = PackageIdentifier {pkgName = PackageName "QuickCheck", pkgVersion = Version {versionBranch = [2,4,1,1], versionTags = []}}, license = BSD3, copyright = "2000-2011 Koen Claessen, 2006-2008 Bj\246rn Bringert, 2009-2011 Nick Smallbone", maintainer = "QuickCheck developers <quickcheck@projects.haskell.org>", author = "Koen Claessen <koen@chalmers.se>", stability = "", homepage = "http://code.haskell.org/QuickCheck", pkgUrl = "", synopsis = "", description = "QuickCheck is a library for random testing of program properties.\n\nThe programmer provides a specification of the program, in\nthe form of properties which functions should satisfy, and\nQuickCheck then tests that the properties hold in a large number\nof randomly generated cases.\n\nSpecifications are expressed in\nHaskell, using combinators defined in the QuickCheck library.\nQuickCheck provides combinators to define properties, observe\nthe distribution of test data, and define test\ndata generators.", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","QuickCheck","All"],ModuleName ["Test","QuickCheck","Function"],ModuleName ["Test","QuickCheck"],ModuleName ["Test","QuickCheck","Arbitrary"],ModuleName ["Test","QuickCheck","Gen"],ModuleName ["Test","QuickCheck","Monadic"],ModuleName ["Test","QuickCheck","Modifiers"],ModuleName ["Test","QuickCheck","Property"],ModuleName ["Test","QuickCheck","Test"],ModuleName ["Test","QuickCheck","Text"],ModuleName ["Test","QuickCheck","Poly"],ModuleName ["Test","QuickCheck","State"]], hiddenModules = [ModuleName ["Test","QuickCheck","Exception"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/QuickCheck-2.4.1.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/QuickCheck-2.4.1.1"], hsLibraries = ["HSQuickCheck-2.4.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "random-1.0.0.3-57524486875e0c4c260dd22788921013",InstalledPackageId "template-haskell-2.5.0.0-f0c8f015e470d561d64a578434331367"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/QuickCheck-2.4.1.1/html/QuickCheck.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/QuickCheck-2.4.1.1/html"]}),(InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1",InstalledPackageInfo {installedPackageId = InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1", sourcePackageId = PackageIdentifier {pkgName = PackageName "ansi-terminal", pkgVersion = Version {versionBranch = [0,5,5], versionTags = []}}, license = BSD3, copyright = "", maintainer = "batterseapower@hotmail.com", author = "Max Bolingbroke", stability = "", homepage = "http://batterseapower.github.com/ansi-terminal", pkgUrl = "", synopsis = "", description = "ANSI terminal support for Haskell: allows cursor movement, screen clearing, color output showing or hiding the cursor, and\nchanging the title. Compatible with Windows and those Unixes with ANSI terminals, but only GHC is supported as a compiler.", category = "User Interfaces", exposed = True, exposedModules = [ModuleName ["System","Console","ANSI"]], hiddenModules = [ModuleName ["System","Console","ANSI","Unix"],ModuleName ["System","Console","ANSI","Common"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/ansi-terminal-0.5.5"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/ansi-terminal-0.5.5"], hsLibraries = ["HSansi-terminal-0.5.5"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/ansi-terminal-0.5.5/html/ansi-terminal.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/ansi-terminal-0.5.5/html"]}),(InstalledPackageId "ansi-wl-pprint-0.6.3-20baf12c8af15109902ffbd6603448ce",InstalledPackageInfo {installedPackageId = InstalledPackageId "ansi-wl-pprint-0.6.3-20baf12c8af15109902ffbd6603448ce", sourcePackageId = PackageIdentifier {pkgName = PackageName "ansi-wl-pprint", pkgVersion = Version {versionBranch = [0,6,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "batterseapower@hotmail.com", author = "Daan Leijen, Max Bolingbroke", stability = "", homepage = "http://github.com/batterseapower/ansi-wl-pprint", pkgUrl = "", synopsis = "", description = "This is a pretty printing library based on Wadler's paper \"A Prettier Printer\". It has been enhanced with support for ANSI terminal colored output using the ansi-terminal package.", category = "User Interfaces, Text", exposed = True, exposedModules = [ModuleName ["Text","PrettyPrint","ANSI","Leijen"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/ansi-wl-pprint-0.6.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/ansi-wl-pprint-0.6.3"], hsLibraries = ["HSansi-wl-pprint-0.6.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/ansi-wl-pprint-0.6.3/html/ansi-wl-pprint.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/ansi-wl-pprint-0.6.3/html"]}),(InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageInfo {installedPackageId = InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4", sourcePackageId = PackageIdentifier {pkgName = PackageName "array", pkgVersion = Version {versionBranch = [0,3,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package defines the classes @IArray@ of immutable arrays and\n@MArray@ of arrays mutable within appropriate monads, as well as\nsome instances of these classes.", category = "Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Array","Base"],ModuleName ["Data","Array","IArray"],ModuleName ["Data","Array","IO"],ModuleName ["Data","Array","IO","Internals"],ModuleName ["Data","Array","MArray"],ModuleName ["Data","Array","ST"],ModuleName ["Data","Array","Storable"],ModuleName ["Data","Array","Unboxed"],ModuleName ["Data","Array"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/array-0.3.0.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/array-0.3.0.2"], hsLibraries = ["HSarray-0.3.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/array-0.3.0.2/array.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/array-0.3.0.2"]}),(InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageInfo {installedPackageId = InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e", sourcePackageId = PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,3,1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package contains the Prelude and its support libraries,\nand a large collection of useful libraries ranging from data\nstructures to parsing combinators and debugging utilities.", category = "", exposed = True, exposedModules = [ModuleName ["Foreign","Concurrent"],ModuleName ["GHC","Arr"],ModuleName ["GHC","Base"],ModuleName ["GHC","Classes"],ModuleName ["GHC","Conc"],ModuleName ["GHC","Conc","IO"],ModuleName ["GHC","Conc","Signal"],ModuleName ["GHC","Conc","Sync"],ModuleName ["GHC","ConsoleHandler"],ModuleName ["GHC","Constants"],ModuleName ["GHC","Desugar"],ModuleName ["GHC","Enum"],ModuleName ["GHC","Environment"],ModuleName ["GHC","Err"],ModuleName ["GHC","Exception"],ModuleName ["GHC","Exts"],ModuleName ["GHC","Float"],ModuleName ["GHC","ForeignPtr"],ModuleName ["GHC","MVar"],ModuleName ["GHC","IO"],ModuleName ["GHC","IO","IOMode"],ModuleName ["GHC","IO","Buffer"],ModuleName ["GHC","IO","Device"],ModuleName ["GHC","IO","BufferedIO"],ModuleName ["GHC","IO","FD"],ModuleName ["GHC","IO","Exception"],ModuleName ["GHC","IO","Encoding"],ModuleName ["GHC","IO","Encoding","Latin1"],ModuleName ["GHC","IO","Encoding","UTF8"],ModuleName ["GHC","IO","Encoding","UTF16"],ModuleName ["GHC","IO","Encoding","UTF32"],ModuleName ["GHC","IO","Encoding","Types"],ModuleName ["GHC","IO","Encoding","Iconv"],ModuleName ["GHC","IO","Encoding","CodePage"],ModuleName ["GHC","IO","Handle"],ModuleName ["GHC","IO","Handle","Types"],ModuleName ["GHC","IO","Handle","Internals"],ModuleName ["GHC","IO","Handle","FD"],ModuleName ["GHC","IO","Handle","Text"],ModuleName ["GHC","IOBase"],ModuleName ["GHC","Handle"],ModuleName ["GHC","IORef"],ModuleName ["GHC","IOArray"],ModuleName ["GHC","Int"],ModuleName ["GHC","List"],ModuleName ["GHC","Num"],ModuleName ["GHC","PArr"],ModuleName ["GHC","Pack"],ModuleName ["GHC","Ptr"],ModuleName ["GHC","Read"],ModuleName ["GHC","Real"],ModuleName ["GHC","ST"],ModuleName ["GHC","STRef"],ModuleName ["GHC","Show"],ModuleName ["GHC","Stable"],ModuleName ["GHC","Storable"],ModuleName ["GHC","TopHandler"],ModuleName ["GHC","Unicode"],ModuleName ["GHC","Weak"],ModuleName ["GHC","Word"],ModuleName ["System","Timeout"],ModuleName ["System","Event"],ModuleName ["Control","Applicative"],ModuleName ["Control","Arrow"],ModuleName ["Control","Category"],ModuleName ["Control","Concurrent"],ModuleName ["Control","Concurrent","Chan"],ModuleName ["Control","Concurrent","MVar"],ModuleName ["Control","Concurrent","QSem"],ModuleName ["Control","Concurrent","QSemN"],ModuleName ["Control","Concurrent","SampleVar"],ModuleName ["Control","Exception"],ModuleName ["Control","Exception","Base"],ModuleName ["Control","OldException"],ModuleName ["Control","Monad"],ModuleName ["Control","Monad","Fix"],ModuleName ["Control","Monad","Instances"],ModuleName ["Control","Monad","ST"],ModuleName ["Control","Monad","ST","Lazy"],ModuleName ["Control","Monad","ST","Strict"],ModuleName ["Data","Bits"],ModuleName ["Data","Bool"],ModuleName ["Data","Char"],ModuleName ["Data","Complex"],ModuleName ["Data","Dynamic"],ModuleName ["Data","Either"],ModuleName ["Data","Eq"],ModuleName ["Data","Data"],ModuleName ["Data","Fixed"],ModuleName ["Data","Foldable"],ModuleName ["Data","Function"],ModuleName ["Data","Functor"],ModuleName ["Data","HashTable"],ModuleName ["Data","IORef"],ModuleName ["Data","Int"],ModuleName ["Data","Ix"],ModuleName ["Data","List"],ModuleName ["Data","Maybe"],ModuleName ["Data","Monoid"],ModuleName ["Data","Ord"],ModuleName ["Data","Ratio"],ModuleName ["Data","STRef"],ModuleName ["Data","STRef","Lazy"],ModuleName ["Data","STRef","Strict"],ModuleName ["Data","String"],ModuleName ["Data","Traversable"],ModuleName ["Data","Tuple"],ModuleName ["Data","Typeable"],ModuleName ["Data","Unique"],ModuleName ["Data","Version"],ModuleName ["Data","Word"],ModuleName ["Debug","Trace"],ModuleName ["Foreign"],ModuleName ["Foreign","C"],ModuleName ["Foreign","C","Error"],ModuleName ["Foreign","C","String"],ModuleName ["Foreign","C","Types"],ModuleName ["Foreign","ForeignPtr"],ModuleName ["Foreign","Marshal"],ModuleName ["Foreign","Marshal","Alloc"],ModuleName ["Foreign","Marshal","Array"],ModuleName ["Foreign","Marshal","Error"],ModuleName ["Foreign","Marshal","Pool"],ModuleName ["Foreign","Marshal","Utils"],ModuleName ["Foreign","Ptr"],ModuleName ["Foreign","StablePtr"],ModuleName ["Foreign","Storable"],ModuleName ["Numeric"],ModuleName ["Prelude"],ModuleName ["System","Console","GetOpt"],ModuleName ["System","CPUTime"],ModuleName ["System","Environment"],ModuleName ["System","Exit"],ModuleName ["System","IO"],ModuleName ["System","IO","Error"],ModuleName ["System","IO","Unsafe"],ModuleName ["System","Info"],ModuleName ["System","Mem"],ModuleName ["System","Mem","StableName"],ModuleName ["System","Mem","Weak"],ModuleName ["System","Posix","Internals"],ModuleName ["System","Posix","Types"],ModuleName ["Text","ParserCombinators","ReadP"],ModuleName ["Text","ParserCombinators","ReadPrec"],ModuleName ["Text","Printf"],ModuleName ["Text","Read"],ModuleName ["Text","Read","Lex"],ModuleName ["Text","Show"],ModuleName ["Text","Show","Functions"],ModuleName ["Unsafe","Coerce"]], hiddenModules = [ModuleName ["System","Event","Array"],ModuleName ["System","Event","Clock"],ModuleName ["System","Event","Control"],ModuleName ["System","Event","EPoll"],ModuleName ["System","Event","IntMap"],ModuleName ["System","Event","Internal"],ModuleName ["System","Event","KQueue"],ModuleName ["System","Event","Manager"],ModuleName ["System","Event","PSQ"],ModuleName ["System","Event","Poll"],ModuleName ["System","Event","Thread"],ModuleName ["System","Event","Unique"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/base-4.3.1.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/base-4.3.1.0"], hsLibraries = ["HSbase-4.3.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/base-4.3.1.0/include"], includes = ["HsBase.h"], depends = [InstalledPackageId "ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2",InstalledPackageId "integer-gmp-0.2.0.3-91607778cf3ae8f3948a50062b4f8479",InstalledPackageId "builtin_rts"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/base-4.3.1.0/base.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/base-4.3.1.0"]}),(InstalledPackageId "binary-0.5.0.2-403bbefac1f83c5b5f7445fa050e39c3",InstalledPackageInfo {installedPackageId = InstalledPackageId "binary-0.5.0.2-403bbefac1f83c5b5f7445fa050e39c3", sourcePackageId = PackageIdentifier {pkgName = PackageName "binary", pkgVersion = Version {versionBranch = [0,5,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Lennart Kolmodin, Don Stewart <dons@galois.com>", author = "Lennart Kolmodin <kolmodin@dtek.chalmers.se>", stability = "provisional", homepage = "http://code.haskell.org/binary/", pkgUrl = "", synopsis = "", description = "Efficient, pure binary serialisation using lazy ByteStrings.\nHaskell values may be encoded to and from binary formats,\nwritten to disk as binary, or sent over the network.\nSerialisation speeds of over 1 G\\/sec have been observed,\nso this library should be suitable for high performance\nscenarios.", category = "Data, Parsing", exposed = True, exposedModules = [ModuleName ["Data","Binary"],ModuleName ["Data","Binary","Put"],ModuleName ["Data","Binary","Get"],ModuleName ["Data","Binary","Builder"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/binary-0.5.0.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/binary-0.5.0.2"], hsLibraries = ["HSbinary-0.5.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/binary-0.5.0.2/html/binary.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/binary-0.5.0.2/html"]}),(InstalledPackageId "builtin_ffi",InstalledPackageInfo {installedPackageId = InstalledPackageId "builtin_ffi", sourcePackageId = PackageIdentifier {pkgName = PackageName "ffi", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "glasgow-haskell-users@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "", category = "", exposed = True, exposedModules = [], hiddenModules = [], trusted = False, importDirs = [], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4"], hsLibraries = ["HSffi"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/include"], includes = [], depends = [], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = [], haddockHTMLs = []}),(InstalledPackageId "builtin_rts",InstalledPackageInfo {installedPackageId = InstalledPackageId "builtin_rts", sourcePackageId = PackageIdentifier {pkgName = PackageName "rts", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "glasgow-haskell-users@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "", category = "", exposed = True, exposedModules = [], hiddenModules = [], trusted = False, importDirs = [], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4"], hsLibraries = ["HSrts"], extraLibraries = ["m","rt","dl"], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/include"], includes = ["Stg.h"], depends = [InstalledPackageId "builtin_ffi"], hugsOptions = [], ccOptions = [], ldOptions = ["-u","ghczmprim_GHCziTypes_Izh_static_info","-u","ghczmprim_GHCziTypes_Czh_static_info","-u","ghczmprim_GHCziTypes_Fzh_static_info","-u","ghczmprim_GHCziTypes_Dzh_static_info","-u","base_GHCziPtr_Ptr_static_info","-u","base_GHCziWord_Wzh_static_info","-u","base_GHCziInt_I8zh_static_info","-u","base_GHCziInt_I16zh_static_info","-u","base_GHCziInt_I32zh_static_info","-u","base_GHCziInt_I64zh_static_info","-u","base_GHCziWord_W8zh_static_info","-u","base_GHCziWord_W16zh_static_info","-u","base_GHCziWord_W32zh_static_info","-u","base_GHCziWord_W64zh_static_info","-u","base_GHCziStable_StablePtr_static_info","-u","ghczmprim_GHCziTypes_Izh_con_info","-u","ghczmprim_GHCziTypes_Czh_con_info","-u","ghczmprim_GHCziTypes_Fzh_con_info","-u","ghczmprim_GHCziTypes_Dzh_con_info","-u","base_GHCziPtr_Ptr_con_info","-u","base_GHCziPtr_FunPtr_con_info","-u","base_GHCziStable_StablePtr_con_info","-u","ghczmprim_GHCziBool_False_closure","-u","ghczmprim_GHCziBool_True_closure","-u","base_GHCziPack_unpackCString_closure","-u","base_GHCziIOziException_stackOverflow_closure","-u","base_GHCziIOziException_heapOverflow_closure","-u","base_ControlziExceptionziBase_nonTermination_closure","-u","base_GHCziIOziException_blockedIndefinitelyOnMVar_closure","-u","base_GHCziIOziException_blockedIndefinitelyOnSTM_closure","-u","base_ControlziExceptionziBase_nestedAtomically_closure","-u","base_GHCziWeak_runFinalizzerBatch_closure","-u","base_GHCziTopHandler_runIO_closure","-u","base_GHCziTopHandler_runNonIO_closure","-u","base_GHCziConcziIO_ensureIOManagerIsRunning_closure","-u","base_GHCziConcziSync_runSparks_closure","-u","base_GHCziConcziSignal_runHandlers_closure"], frameworkDirs = [], frameworks = [], haddockInterfaces = [], haddockHTMLs = []}),(InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageInfo {installedPackageId = InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1", sourcePackageId = PackageIdentifier {pkgName = PackageName "bytestring", pkgVersion = Version {versionBranch = [0,9,1,10], versionTags = []}}, license = BSD3, copyright = "Copyright (c) Don Stewart   2005-2009,\n(c) Duncan Coutts 2006-2009,\n(c) David Roundy  2003-2005.", maintainer = "dons@galois.com, duncan@haskell.org", author = "Don Stewart, Duncan Coutts", stability = "", homepage = "http://www.cse.unsw.edu.au/~dons/fps.html", pkgUrl = "", synopsis = "", description = "A time and space-efficient implementation of byte vectors using\npacked Word8 arrays, suitable for high performance use, both in terms\nof large data quantities, or high speed requirements. Byte vectors\nare encoded as strict 'Word8' arrays of bytes, and lazy lists of\nstrict chunks, held in a 'ForeignPtr', and can be passed between C\nand Haskell with little effort.\n\nTest coverage data for this library is available at:\n<http://code.haskell.org/~dons/tests/bytestring/hpc_index.html>", category = "Data", exposed = True, exposedModules = [ModuleName ["Data","ByteString"],ModuleName ["Data","ByteString","Char8"],ModuleName ["Data","ByteString","Unsafe"],ModuleName ["Data","ByteString","Internal"],ModuleName ["Data","ByteString","Lazy"],ModuleName ["Data","ByteString","Lazy","Char8"],ModuleName ["Data","ByteString","Lazy","Internal"],ModuleName ["Data","ByteString","Fusion"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/bytestring-0.9.1.10"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/bytestring-0.9.1.10"], hsLibraries = ["HSbytestring-0.9.1.10"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/bytestring-0.9.1.10/include"], includes = ["fpstring.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/bytestring-0.9.1.10/bytestring.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/bytestring-0.9.1.10"]}),(InstalledPackageId "cmdlib-0.3.3-b129826ff596e08d3a82f0f658aa48fb",InstalledPackageInfo {installedPackageId = InstalledPackageId "cmdlib-0.3.3-b129826ff596e08d3a82f0f658aa48fb", sourcePackageId = PackageIdentifier {pkgName = PackageName "cmdlib", pkgVersion = Version {versionBranch = [0,3,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "me@mornfall.net", author = "Petr Rockai", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "A commandline parsing library, based on getopt. Comes with a\npowerful attribute system. Supports complex interfaces with many\noptions and commands, with option & command grouping, with simple\nand convenient API. Even though quite powerful, it strives to keep\nsimple things simple. The library uses \"System.Console.GetOpt\" as\nits backend.\n\nIn comparison to the other commandline handling libraries:\n\nCompared to cmdargs, cmdlib has a pure attribute system and is\nbased on GetOpt for help formatting & argument parsing. Cmdlib may\nalso be more extendable due to typeclass design, and can use\nuser-supplied types for option arguments.\n\nCmdargs >= 0.4 can optionally use a pure attribute system,\nalthough this is clearly an add-on and the API is a second-class\ncitizen in relation to the impure version.\n\nGetOpt and parseargs both require explicit flag representation, so\nthey live a level below cmdlib. GetOpt is in fact used as a\nbackend by cmdlib.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Console","CmdLib"]], hiddenModules = [ModuleName ["System","Console","CmdLib","Attribute"],ModuleName ["System","Console","CmdLib","Flag"],ModuleName ["System","Console","CmdLib","Command"],ModuleName ["System","Console","CmdLib","ADTs"],ModuleName ["System","Console","CmdLib","Record"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/cmdlib-0.3.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/cmdlib-0.3.3"], hsLibraries = ["HScmdlib-0.3.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",InstalledPackageId "split-0.1.4-4cdf09209f5cdfad041512f4da77b459",InstalledPackageId "syb-0.3.2-7bcfe6bded2b7e8d9901b1793580d5db"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/cmdlib-0.3.3/html/cmdlib.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/cmdlib-0.3.3/html"]}),(InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageInfo {installedPackageId = InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e", sourcePackageId = PackageIdentifier {pkgName = PackageName "containers", pkgVersion = Version {versionBranch = [0,4,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package contains efficient general-purpose implementations\nof various basic immutable container types.  The declared cost of\neach operation is either worst-case or amortized, but remains\nvalid even if structures are shared.", category = "Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Graph"],ModuleName ["Data","Sequence"],ModuleName ["Data","Tree"],ModuleName ["Data","IntMap"],ModuleName ["Data","IntSet"],ModuleName ["Data","Map"],ModuleName ["Data","Set"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/containers-0.4.0.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/containers-0.4.0.0"], hsLibraries = ["HScontainers-0.4.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/containers-0.4.0.0/containers.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/containers-0.4.0.0"]}),(InstalledPackageId "dataenc-0.14-0bef7a1d7c7f4b0b442f08b6daa031c8",InstalledPackageInfo {installedPackageId = InstalledPackageId "dataenc-0.14-0bef7a1d7c7f4b0b442f08b6daa031c8", sourcePackageId = PackageIdentifier {pkgName = PackageName "dataenc", pkgVersion = Version {versionBranch = [0,14], versionTags = []}}, license = BSD3, copyright = "Magnus Therning, 2007-2011", maintainer = "magnus@therning.org", author = "Magnus Therning", stability = "", homepage = "http://www.haskell.org/haskellwiki/Library/Data_encoding", pkgUrl = "", synopsis = "", description = "Data encoding library currently providing Base16, Base32,\nBase32Hex, Base64, Base64Url, Base85, Python string escaping,\nQuoted-Printable, URL encoding, uuencode, xxencode, and yEncoding.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Binary","Base16"],ModuleName ["Codec","Binary","Base32"],ModuleName ["Codec","Binary","Base32Hex"],ModuleName ["Codec","Binary","Base64"],ModuleName ["Codec","Binary","Base64Url"],ModuleName ["Codec","Binary","Base85"],ModuleName ["Codec","Binary","DataEncoding"],ModuleName ["Codec","Binary","PythonString"],ModuleName ["Codec","Binary","QuotedPrintable"],ModuleName ["Codec","Binary","Url"],ModuleName ["Codec","Binary","Uu"],ModuleName ["Codec","Binary","Xx"],ModuleName ["Codec","Binary","Yenc"]], hiddenModules = [ModuleName ["Codec","Binary","Util"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/dataenc-0.14"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/dataenc-0.14"], hsLibraries = ["HSdataenc-0.14"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/dataenc-0.14/html/dataenc.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/dataenc-0.14/html"]}),(InstalledPackageId "deepseq-1.1.0.2-09b3aed0c4982bbc6569c668100876fa",InstalledPackageInfo {installedPackageId = InstalledPackageId "deepseq-1.1.0.2-09b3aed0c4982bbc6569c668100876fa", sourcePackageId = PackageIdentifier {pkgName = PackageName "deepseq", pkgVersion = Version {versionBranch = [1,1,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides methods for fully evaluating data structures\n(\\\"deep evaluation\\\"). Deep evaluation is often used for adding\nstrictness to a program, e.g. in order to force pending exceptions,\nremove space leaks, or force lazy I/O to happen. It is also useful\nin parallel programs, to ensure pending work does not migrate to the\nwrong thread.\n\nThe primary use of this package is via the 'deepseq' function, a\n\\\"deep\\\" version of 'seq'. It is implemented on top of an 'NFData'\ntypeclass (\\\"Normal Form Data\\\", data structures with no unevaluated\ncomponents) which defines strategies for fully evaluating different\ndata types.", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","DeepSeq"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/deepseq-1.1.0.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/deepseq-1.1.0.2"], hsLibraries = ["HSdeepseq-1.1.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/deepseq-1.1.0.2/html/deepseq.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/deepseq-1.1.0.2/html"]}),(InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",InstalledPackageInfo {installedPackageId = InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f", sourcePackageId = PackageIdentifier {pkgName = PackageName "directory", pkgVersion = Version {versionBranch = [1,1,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides a library for handling directories.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Directory"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/directory-1.1.0.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/directory-1.1.0.0"], hsLibraries = ["HSdirectory-1.1.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/directory-1.1.0.0/include"], includes = ["HsDirectory.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageId "old-time-1.0.0.6-37d6575186c36059fbc372c289dbddd4",InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/directory-1.1.0.0/directory.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/directory-1.1.0.0"]}),(InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageInfo {installedPackageId = InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831", sourcePackageId = PackageIdentifier {pkgName = PackageName "extensible-exceptions", pkgVersion = Version {versionBranch = [0,1,1,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides extensible exceptions for both new and\nold versions of GHC (i.e., < 6.10).", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","Exception","Extensible"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/extensible-exceptions-0.1.1.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/extensible-exceptions-0.1.1.2"], hsLibraries = ["HSextensible-exceptions-0.1.1.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/extensible-exceptions-0.1.1.2/extensible-exceptions.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/extensible-exceptions-0.1.1.2"]}),(InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageInfo {installedPackageId = InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4", sourcePackageId = PackageIdentifier {pkgName = PackageName "filepath", pkgVersion = Version {versionBranch = [1,2,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "", author = "Neil Mitchell", stability = "", homepage = "http://www-users.cs.york.ac.uk/~ndm/filepath/", pkgUrl = "", synopsis = "", description = "", category = "System", exposed = True, exposedModules = [ModuleName ["System","FilePath"],ModuleName ["System","FilePath","Posix"],ModuleName ["System","FilePath","Windows"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/filepath-1.2.0.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/filepath-1.2.0.0"], hsLibraries = ["HSfilepath-1.2.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/filepath-1.2.0.0/filepath.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/filepath-1.2.0.0"]}),(InstalledPackageId "ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2",InstalledPackageInfo {installedPackageId = InstalledPackageId "ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2", sourcePackageId = PackageIdentifier {pkgName = PackageName "ghc-prim", pkgVersion = Version {versionBranch = [0,2,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "GHC primitives.", category = "", exposed = True, exposedModules = [ModuleName ["GHC","Prim"],ModuleName ["GHC","Bool"],ModuleName ["GHC","Debug"],ModuleName ["GHC","Generics"],ModuleName ["GHC","Magic"],ModuleName ["GHC","Ordering"],ModuleName ["GHC","PrimopWrappers"],ModuleName ["GHC","IntWord32"],ModuleName ["GHC","IntWord64"],ModuleName ["GHC","Tuple"],ModuleName ["GHC","Types"],ModuleName ["GHC","Unit"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/ghc-prim-0.2.0.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/ghc-prim-0.2.0.0"], hsLibraries = ["HSghc-prim-0.2.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "builtin_rts"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/ghc-prim.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0"]}),(InstalledPackageId "hashed-storage-0.5.7-209e6e98f7c10343c7fc1181f2421d8e",InstalledPackageInfo {installedPackageId = InstalledPackageId "hashed-storage-0.5.7-209e6e98f7c10343c7fc1181f2421d8e", sourcePackageId = PackageIdentifier {pkgName = PackageName "hashed-storage", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}, license = BSD3, copyright = "2009 Petr Rockai <me@mornfall.net>", maintainer = "Petr Rockai <me@mornfall.net>", author = "Petr Rockai <me@mornfall.net>", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "Support code for reading and manipulating hashed file storage\n(where each file and directory is associated with a\ncryptographic hash, for corruption-resistant storage and fast\ncomparisons).\n\nThe supported storage formats include darcs hashed pristine, a\nplain filesystem tree and an indexed plain tree (where the index\nmaintains hashes of the plain files and directories).", category = "System", exposed = True, exposedModules = [ModuleName ["Storage","Hashed"],ModuleName ["Storage","Hashed","AnchoredPath"],ModuleName ["Storage","Hashed","Index"],ModuleName ["Storage","Hashed","Monad"],ModuleName ["Storage","Hashed","Tree"],ModuleName ["Storage","Hashed","Hash"],ModuleName ["Storage","Hashed","Packed"],ModuleName ["Storage","Hashed","Plain"],ModuleName ["Storage","Hashed","Darcs"]], hiddenModules = [ModuleName ["Bundled","Posix"],ModuleName ["Bundled","SHA256"],ModuleName ["Storage","Hashed","Utils"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/hashed-storage-0.5.7"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/hashed-storage-0.5.7"], hsLibraries = ["HShashed-storage-0.5.7"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "binary-0.5.0.2-403bbefac1f83c5b5f7445fa050e39c3",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageId "dataenc-0.14-0bef7a1d7c7f4b0b442f08b6daa031c8",InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageId "mmap-0.5.7-a26fcb5c2a07acc22fe29ab256e71f9f",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",InstalledPackageId "zlib-0.5.3.1-5fbdf714525b76e0e601c2ffb25f2044"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/hashed-storage-0.5.7/html/hashed-storage.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/hashed-storage-0.5.7/html"]}),(InstalledPackageId "haskeline-0.6.4.0-666d47334a8ec9818526b80c10496091",InstalledPackageInfo {installedPackageId = InstalledPackageId "haskeline-0.6.4.0-666d47334a8ec9818526b80c10496091", sourcePackageId = PackageIdentifier {pkgName = PackageName "haskeline", pkgVersion = Version {versionBranch = [0,6,4,0], versionTags = []}}, license = BSD3, copyright = "(c) Judah Jacobson", maintainer = "Judah Jacobson <judah.jacobson@gmail.com>", author = "Judah Jacobson", stability = "Experimental", homepage = "http://trac.haskell.org/haskeline", pkgUrl = "", synopsis = "", description = "Haskeline provides a user interface for line input in command-line\nprograms.  This library is similar in purpose to readline, but since\nit is written in Haskell it is (hopefully) more easily used in other\nHaskell programs.\n\nHaskeline runs both on POSIX-compatible systems and on Windows.", category = "User Interfaces", exposed = True, exposedModules = [ModuleName ["System","Console","Haskeline"],ModuleName ["System","Console","Haskeline","Completion"],ModuleName ["System","Console","Haskeline","Encoding"],ModuleName ["System","Console","Haskeline","MonadException"],ModuleName ["System","Console","Haskeline","History"],ModuleName ["System","Console","Haskeline","IO"]], hiddenModules = [ModuleName ["System","Console","Haskeline","Backend","Terminfo"],ModuleName ["System","Console","Haskeline","Backend","WCWidth"],ModuleName ["System","Console","Haskeline","Backend","Posix"],ModuleName ["System","Console","Haskeline","Backend","IConv"],ModuleName ["System","Console","Haskeline","Backend","DumbTerm"],ModuleName ["System","Console","Haskeline","Backend"],ModuleName ["System","Console","Haskeline","Command"],ModuleName ["System","Console","Haskeline","Command","Completion"],ModuleName ["System","Console","Haskeline","Command","History"],ModuleName ["System","Console","Haskeline","Command","KillRing"],ModuleName ["System","Console","Haskeline","Directory"],ModuleName ["System","Console","Haskeline","Emacs"],ModuleName ["System","Console","Haskeline","InputT"],ModuleName ["System","Console","Haskeline","Key"],ModuleName ["System","Console","Haskeline","LineState"],ModuleName ["System","Console","Haskeline","Monads"],ModuleName ["System","Console","Haskeline","Prefs"],ModuleName ["System","Console","Haskeline","RunCommand"],ModuleName ["System","Console","Haskeline","Term"],ModuleName ["System","Console","Haskeline","Command","Undo"],ModuleName ["System","Console","Haskeline","Vi"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/haskeline-0.6.4.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/haskeline-0.6.4.0"], hsLibraries = ["HShaskeline-0.6.4.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/haskeline-0.6.4.0/include"], includes = ["h_iconv.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",InstalledPackageId "terminfo-0.3.1.3-ac8ae791e59af4b07646e3465163bc35",InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1",InstalledPackageId "utf8-string-0.3.6-1c65e01135581c7189781d69090906b2"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/haskeline-0.6.4.0/html/haskeline.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/haskeline-0.6.4.0/html"]}),(InstalledPackageId "hostname-1.0-5bb472a8c4e44fdb66860bfca220e074",InstalledPackageInfo {installedPackageId = InstalledPackageId "hostname-1.0-5bb472a8c4e44fdb66860bfca220e074", sourcePackageId = PackageIdentifier {pkgName = PackageName "hostname", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "", category = "Network", exposed = True, exposedModules = [ModuleName ["Network","HostName"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/hostname-1.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/hostname-1.0"], hsLibraries = ["HShostname-1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/hostname-1.0/html/hostname.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/hostname-1.0/html"]}),(InstalledPackageId "html-1.0.1.2-a494249f98a0f38b1a8db28bc70f8b0b",InstalledPackageInfo {installedPackageId = InstalledPackageId "html-1.0.1.2-a494249f98a0f38b1a8db28bc70f8b0b", sourcePackageId = PackageIdentifier {pkgName = PackageName "html", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package contains a combinator library for constructing\nHTML documents.", category = "Web", exposed = True, exposedModules = [ModuleName ["Text","Html"],ModuleName ["Text","Html","BlockTable"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/html-1.0.1.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/html-1.0.1.2"], hsLibraries = ["HShtml-1.0.1.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/html-1.0.1.2/html/html.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/html-1.0.1.2/html"]}),(InstalledPackageId "integer-gmp-0.2.0.3-91607778cf3ae8f3948a50062b4f8479",InstalledPackageInfo {installedPackageId = InstalledPackageId "integer-gmp-0.2.0.3-91607778cf3ae8f3948a50062b4f8479", sourcePackageId = PackageIdentifier {pkgName = PackageName "integer-gmp", pkgVersion = Version {versionBranch = [0,2,0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package contains an Integer library based on GMP.", category = "", exposed = True, exposedModules = [ModuleName ["GHC","Integer"],ModuleName ["GHC","Integer","GMP","Internals"]], hiddenModules = [ModuleName ["GHC","Integer","Type"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/integer-gmp-0.2.0.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/integer-gmp-0.2.0.3"], hsLibraries = ["HSinteger-gmp-0.2.0.3"], extraLibraries = ["gmp"], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/integer-gmp-0.2.0.3/integer-gmp.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/integer-gmp-0.2.0.3"]}),(InstalledPackageId "mmap-0.5.7-a26fcb5c2a07acc22fe29ab256e71f9f",InstalledPackageInfo {installedPackageId = InstalledPackageId "mmap-0.5.7-a26fcb5c2a07acc22fe29ab256e71f9f", sourcePackageId = PackageIdentifier {pkgName = PackageName "mmap", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}, license = BSD3, copyright = "2008, Gracjan Polak", maintainer = "Gracjan Polak <gracjanpolak@gmail.com>", author = "Gracjan Polak <gracjanpolak@gmail.com>", stability = "alpha", homepage = "", pkgUrl = "", synopsis = "", description = "This library provides a wrapper to mmap(2) or MapViewOfFile,\nallowing files or devices to be lazily loaded into memory as\nstrict or lazy ByteStrings, ForeignPtrs or plain Ptrs, using\nthe virtual memory subsystem to do on-demand loading.\nModifications are also supported.", category = "System", exposed = True, exposedModules = [ModuleName ["System","IO","MMap"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/mmap-0.5.7"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/mmap-0.5.7"], hsLibraries = ["HSmmap-0.5.7"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/mmap-0.5.7/html/mmap.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/mmap-0.5.7/html"]}),(InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",InstalledPackageInfo {installedPackageId = InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2", sourcePackageId = PackageIdentifier {pkgName = PackageName "mtl", pkgVersion = Version {versionBranch = [2,0,1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "Andy Gill", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "Monad classes using functional dependencies, with instances\nfor various monad transformers, inspired by the paper\n/Functional Programming with Overloading and Higher-Order Polymorphism/,\nby Mark P Jones, in /Advanced School of Functional Programming/, 1995\n(<http://web.cecs.pdx.edu/~mpj/pubs/springschool.html>).", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","Monad","Cont"],ModuleName ["Control","Monad","Cont","Class"],ModuleName ["Control","Monad","Error"],ModuleName ["Control","Monad","Error","Class"],ModuleName ["Control","Monad","Identity"],ModuleName ["Control","Monad","List"],ModuleName ["Control","Monad","RWS"],ModuleName ["Control","Monad","RWS","Class"],ModuleName ["Control","Monad","RWS","Lazy"],ModuleName ["Control","Monad","RWS","Strict"],ModuleName ["Control","Monad","Reader"],ModuleName ["Control","Monad","Reader","Class"],ModuleName ["Control","Monad","State"],ModuleName ["Control","Monad","State","Class"],ModuleName ["Control","Monad","State","Lazy"],ModuleName ["Control","Monad","State","Strict"],ModuleName ["Control","Monad","Trans"],ModuleName ["Control","Monad","Writer"],ModuleName ["Control","Monad","Writer","Class"],ModuleName ["Control","Monad","Writer","Lazy"],ModuleName ["Control","Monad","Writer","Strict"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/mtl-2.0.1.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/mtl-2.0.1.0"], hsLibraries = ["HSmtl-2.0.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "transformers-0.2.2.0-a8a2dbba7d96131db605cf631ea0c8c4"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/mtl-2.0.1.0/html/mtl.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/mtl-2.0.1.0/html"]}),(InstalledPackageId "network-2.3.0.4-3ac6bb38978a0758e807f7956decb2f2",InstalledPackageInfo {installedPackageId = InstalledPackageId "network-2.3.0.4-3ac6bb38978a0758e807f7956decb2f2", sourcePackageId = PackageIdentifier {pkgName = PackageName "network", pkgVersion = Version {versionBranch = [2,3,0,4], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Johan Tibell <johan.tibell@gmail.com>", author = "", stability = "", homepage = "http://github.com/haskell/network", pkgUrl = "", synopsis = "", description = "Low-level networking interface", category = "Network", exposed = True, exposedModules = [ModuleName ["Network"],ModuleName ["Network","BSD"],ModuleName ["Network","Socket"],ModuleName ["Network","Socket","ByteString"],ModuleName ["Network","Socket","ByteString","Lazy"],ModuleName ["Network","Socket","Internal"],ModuleName ["Network","URI"]], hiddenModules = [ModuleName ["Network","Socket","ByteString","IOVec"],ModuleName ["Network","Socket","ByteString","MsgHdr"],ModuleName ["Network","Socket","ByteString","Internal"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/network-2.3.0.4"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/network-2.3.0.4"], hsLibraries = ["HSnetwork-2.3.0.4"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/network-2.3.0.4/include"], includes = ["HsNet.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "parsec-3.1.1-9ad7689ce68f46e0751207509e882c5b",InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/network-2.3.0.4/html/network.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/network-2.3.0.4/html"]}),(InstalledPackageId "old-locale-1.0.0.2-6e2a3c0744e8cf4e0ac2d4e58659f7b5",InstalledPackageInfo {installedPackageId = InstalledPackageId "old-locale-1.0.0.2-6e2a3c0744e8cf4e0ac2d4e58659f7b5", sourcePackageId = PackageIdentifier {pkgName = PackageName "old-locale", pkgVersion = Version {versionBranch = [1,0,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides the old locale library.\nFor new code, the new locale library is recommended.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Locale"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/old-locale-1.0.0.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/old-locale-1.0.0.2"], hsLibraries = ["HSold-locale-1.0.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/old-locale-1.0.0.2/old-locale.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/old-locale-1.0.0.2"]}),(InstalledPackageId "old-time-1.0.0.6-37d6575186c36059fbc372c289dbddd4",InstalledPackageInfo {installedPackageId = InstalledPackageId "old-time-1.0.0.6-37d6575186c36059fbc372c289dbddd4", sourcePackageId = PackageIdentifier {pkgName = PackageName "old-time", pkgVersion = Version {versionBranch = [1,0,0,6], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides the old time library.\nFor new code, the new time library is recommended.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Time"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/old-time-1.0.0.6"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/old-time-1.0.0.6"], hsLibraries = ["HSold-time-1.0.0.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/old-time-1.0.0.6/include"], includes = ["HsTime.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "old-locale-1.0.0.2-6e2a3c0744e8cf4e0ac2d4e58659f7b5"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/old-time-1.0.0.6/old-time.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/old-time-1.0.0.6"]}),(InstalledPackageId "parsec-3.1.1-9ad7689ce68f46e0751207509e882c5b",InstalledPackageInfo {installedPackageId = InstalledPackageId "parsec-3.1.1-9ad7689ce68f46e0751207509e882c5b", sourcePackageId = PackageIdentifier {pkgName = PackageName "parsec", pkgVersion = Version {versionBranch = [3,1,1], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Antoine Latter <aslatter@gmail.com>", author = "Daan Leijen <daan@microsoft.com>, Paolo Martini <paolo@nemail.it>", stability = "", homepage = "http://www.cs.uu.nl/~daan/parsec.html", pkgUrl = "", synopsis = "", description = "Parsec is designed from scratch as an industrial-strength parser\nlibrary.  It is simple, safe, well documented (on the package\nhomepage), has extensive libraries and good error messages,\nand is also fast.  It is defined as a monad transformer that can be\nstacked on arbitrary monads, and it is also parametric in the\ninput stream type.", category = "Parsing", exposed = True, exposedModules = [ModuleName ["Text","Parsec"],ModuleName ["Text","Parsec","String"],ModuleName ["Text","Parsec","ByteString"],ModuleName ["Text","Parsec","ByteString","Lazy"],ModuleName ["Text","Parsec","Pos"],ModuleName ["Text","Parsec","Error"],ModuleName ["Text","Parsec","Prim"],ModuleName ["Text","Parsec","Char"],ModuleName ["Text","Parsec","Combinator"],ModuleName ["Text","Parsec","Token"],ModuleName ["Text","Parsec","Expr"],ModuleName ["Text","Parsec","Language"],ModuleName ["Text","Parsec","Perm"],ModuleName ["Text","ParserCombinators","Parsec"],ModuleName ["Text","ParserCombinators","Parsec","Char"],ModuleName ["Text","ParserCombinators","Parsec","Combinator"],ModuleName ["Text","ParserCombinators","Parsec","Error"],ModuleName ["Text","ParserCombinators","Parsec","Expr"],ModuleName ["Text","ParserCombinators","Parsec","Language"],ModuleName ["Text","ParserCombinators","Parsec","Perm"],ModuleName ["Text","ParserCombinators","Parsec","Pos"],ModuleName ["Text","ParserCombinators","Parsec","Prim"],ModuleName ["Text","ParserCombinators","Parsec","Token"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/parsec-3.1.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/parsec-3.1.1"], hsLibraries = ["HSparsec-3.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/parsec-3.1.1/html/parsec.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/parsec-3.1.1/html"]}),(InstalledPackageId "pretty-1.0.1.2-abc7c632374e50e1c1927987c2651f0f",InstalledPackageInfo {installedPackageId = InstalledPackageId "pretty-1.0.1.2-abc7c632374e50e1c1927987c2651f0f", sourcePackageId = PackageIdentifier {pkgName = PackageName "pretty", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package contains John Hughes's pretty-printing library,\nheavily modified by Simon Peyton Jones.", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","PrettyPrint"],ModuleName ["Text","PrettyPrint","HughesPJ"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/pretty-1.0.1.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/pretty-1.0.1.2"], hsLibraries = ["HSpretty-1.0.1.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/pretty-1.0.1.2/pretty.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/pretty-1.0.1.2"]}),(InstalledPackageId "primitive-0.3.1-13f6861e052a8e08600e4045dc473931",InstalledPackageInfo {installedPackageId = InstalledPackageId "primitive-0.3.1-13f6861e052a8e08600e4045dc473931", sourcePackageId = PackageIdentifier {pkgName = PackageName "primitive", pkgVersion = Version {versionBranch = [0,3,1], versionTags = []}}, license = BSD3, copyright = "(c) Roman Leshchinskiy 2009-2010", maintainer = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", author = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", stability = "", homepage = "http://code.haskell.org/primitive", pkgUrl = "", synopsis = "", description = ".\nThis package provides wrappers for primitive array operations from\nGHC.Prim.", category = "Data", exposed = True, exposedModules = [ModuleName ["Control","Monad","Primitive"],ModuleName ["Data","Primitive"],ModuleName ["Data","Primitive","MachDeps"],ModuleName ["Data","Primitive","Types"],ModuleName ["Data","Primitive","Array"],ModuleName ["Data","Primitive","ByteArray"],ModuleName ["Data","Primitive","Addr"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/primitive-0.3.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/primitive-0.3.1"], hsLibraries = ["HSprimitive-0.3.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/primitive-0.3.1/include"], includes = ["primitive-memops.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/primitive-0.3.1/html/primitive.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/primitive-0.3.1/html"]}),(InstalledPackageId "process-1.0.1.5-4cab1bf0666275ac101dd48c7565b64c",InstalledPackageInfo {installedPackageId = InstalledPackageId "process-1.0.1.5-4cab1bf0666275ac101dd48c7565b64c", sourcePackageId = PackageIdentifier {pkgName = PackageName "process", pkgVersion = Version {versionBranch = [1,0,1,5], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package contains libraries for dealing with system processes.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Process","Internals"],ModuleName ["System","Process"],ModuleName ["System","Cmd"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/process-1.0.1.5"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/process-1.0.1.5"], hsLibraries = ["HSprocess-1.0.1.5"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/process-1.0.1.5/include"], includes = ["runProcess.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/process-1.0.1.5/process.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/process-1.0.1.5"]}),(InstalledPackageId "random-1.0.0.3-57524486875e0c4c260dd22788921013",InstalledPackageInfo {installedPackageId = InstalledPackageId "random-1.0.0.3-57524486875e0c4c260dd22788921013", sourcePackageId = PackageIdentifier {pkgName = PackageName "random", pkgVersion = Version {versionBranch = [1,0,0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides a random number library.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Random"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/random-1.0.0.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/random-1.0.0.3"], hsLibraries = ["HSrandom-1.0.0.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "time-1.2.0.3-57ebba2cc05370f666b7eceba5e468a9"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/random-1.0.0.3/random.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/random-1.0.0.3"]}),(InstalledPackageId "regex-base-0.93.2-9e1b027c41dbec856469a30982495bb9",InstalledPackageInfo {installedPackageId = InstalledPackageId "regex-base-0.93.2-9e1b027c41dbec856469a30982495bb9", sourcePackageId = PackageIdentifier {pkgName = PackageName "regex-base", pkgVersion = Version {versionBranch = [0,93,2], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2006, Christopher Kuklewicz", maintainer = "TextRegexLazy@personal.mightyreason.com", author = "Christopher Kuklewicz", stability = "Seems to work, passes a few tests", homepage = "http://sourceforge.net/projects/lazy-regex", pkgUrl = "http://darcs.haskell.org/packages/regex-unstable/regex-base/", synopsis = "", description = "Interface API for regex-posix,pcre,parsec,tdfa,dfa", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","Regex","Base"],ModuleName ["Text","Regex","Base","RegexLike"],ModuleName ["Text","Regex","Base","Context"],ModuleName ["Text","Regex","Base","Impl"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/regex-base-0.93.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/regex-base-0.93.2"], hsLibraries = ["HSregex-base-0.93.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/regex-base-0.93.2/html/regex-base.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/regex-base-0.93.2/html"]}),(InstalledPackageId "regex-compat-0.95.1-55ae1a721bfd43f57655a2c250a4ba9a",InstalledPackageInfo {installedPackageId = InstalledPackageId "regex-compat-0.95.1-55ae1a721bfd43f57655a2c250a4ba9a", sourcePackageId = PackageIdentifier {pkgName = PackageName "regex-compat", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2006, Christopher Kuklewicz", maintainer = "TextRegexLazy@personal.mightyreason.com", author = "Christopher Kuklewicz", stability = "Seems to work, passes a few tests", homepage = "http://sourceforge.net/projects/lazy-regex", pkgUrl = "http://darcs.haskell.org/packages/regex-unstable/regex-compat/", synopsis = "", description = "One module layer over regex-posix to replace Text.Regex", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","Regex"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/regex-compat-0.95.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/regex-compat-0.95.1"], hsLibraries = ["HSregex-compat-0.95.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "regex-base-0.93.2-9e1b027c41dbec856469a30982495bb9",InstalledPackageId "regex-posix-0.95.1-c9111d928f58a8f00b048fd522aed393"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/regex-compat-0.95.1/html/regex-compat.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/regex-compat-0.95.1/html"]}),(InstalledPackageId "regex-posix-0.95.1-c9111d928f58a8f00b048fd522aed393",InstalledPackageInfo {installedPackageId = InstalledPackageId "regex-posix-0.95.1-c9111d928f58a8f00b048fd522aed393", sourcePackageId = PackageIdentifier {pkgName = PackageName "regex-posix", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2007-2010, Christopher Kuklewicz", maintainer = "TextRegexLazy@personal.mightyreason.com", author = "Christopher Kuklewicz", stability = "Seems to work, passes a few tests", homepage = "http://sourceforge.net/projects/lazy-regex", pkgUrl = "http://code.haskell.org/regex-posix/", synopsis = "", description = "The posix regex backend for regex-base", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","Regex","Posix"],ModuleName ["Text","Regex","Posix","Wrap"],ModuleName ["Text","Regex","Posix","String"],ModuleName ["Text","Regex","Posix","Sequence"],ModuleName ["Text","Regex","Posix","ByteString"],ModuleName ["Text","Regex","Posix","ByteString","Lazy"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/regex-posix-0.95.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/regex-posix-0.95.1"], hsLibraries = ["HSregex-posix-0.95.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageId "regex-base-0.93.2-9e1b027c41dbec856469a30982495bb9"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/regex-posix-0.95.1/html/regex-posix.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/regex-posix-0.95.1/html"]}),(InstalledPackageId "shellish-0.1.4-59e9bb189ba13277e9b8c1aa6ac88e81",InstalledPackageInfo {installedPackageId = InstalledPackageId "shellish-0.1.4-59e9bb189ba13277e9b8c1aa6ac88e81", sourcePackageId = PackageIdentifier {pkgName = PackageName "shellish", pkgVersion = Version {versionBranch = [0,1,4], versionTags = []}}, license = BSD3, copyright = "", maintainer = "me@mornfall.net", author = "Petr Rockai <me@mornfall.net>", stability = "", homepage = "http://repos.mornfall.net/shellish", pkgUrl = "", synopsis = "", description = "The shellisg package provides a single module for convenient\n\\\"systems\\\" programming in Haskell, similar in spirit to POSIX\nshells or PERL.\n\n* Elegance and safety is sacrificed for conciseness and\nswiss-army-knife-ness.\n\n* The interface exported by Shellish is thread-safe.\n\nOverall, the module should help you to get a job done quickly,\nwithout getting too dirty.", category = "Development", exposed = True, exposedModules = [ModuleName ["Shellish"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/shellish-0.1.4"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/shellish-0.1.4"], hsLibraries = ["HSshellish-0.1.4"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",InstalledPackageId "process-1.0.1.5-4cab1bf0666275ac101dd48c7565b64c",InstalledPackageId "strict-0.3.2-d58e13203cf4a9369ea12ab257573cb7",InstalledPackageId "time-1.2.0.3-57ebba2cc05370f666b7eceba5e468a9",InstalledPackageId "unix-compat-0.2.1.3-2f4e56f2b420caf208cd3230e61645ab"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/shellish-0.1.4/html/shellish.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/shellish-0.1.4/html"]}),(InstalledPackageId "split-0.1.4-4cdf09209f5cdfad041512f4da77b459",InstalledPackageInfo {installedPackageId = InstalledPackageId "split-0.1.4-4cdf09209f5cdfad041512f4da77b459", sourcePackageId = PackageIdentifier {pkgName = PackageName "split", pkgVersion = Version {versionBranch = [0,1,4], versionTags = []}}, license = BSD3, copyright = "", maintainer = "byorgey@cis.upenn.edu", author = "Brent Yorgey", stability = "stable", homepage = "http://code.haskell.org/~byorgey/code/split", pkgUrl = "", synopsis = "", description = "Combinator library and utility functions for splitting lists.", category = "List", exposed = True, exposedModules = [ModuleName ["Data","List","Split"],ModuleName ["Data","List","Split","Internals"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/split-0.1.4"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/split-0.1.4"], hsLibraries = ["HSsplit-0.1.4"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/split-0.1.4/html/split.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/split-0.1.4/html"]}),(InstalledPackageId "strict-0.3.2-d58e13203cf4a9369ea12ab257573cb7",InstalledPackageInfo {installedPackageId = InstalledPackageId "strict-0.3.2-d58e13203cf4a9369ea12ab257573cb7", sourcePackageId = PackageIdentifier {pkgName = PackageName "strict", pkgVersion = Version {versionBranch = [0,3,2], versionTags = []}}, license = BSD3, copyright = "(c) 2006-2007 by Roman Leshchinskiy", maintainer = "Don Stewart <dons@galois.com>", author = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", stability = "", homepage = "http://www.cse.unsw.edu.au/~rl/code/strict.html", pkgUrl = "", synopsis = "", description = "This package provides strict versions of some standard Haskell data\ntypes (pairs, Maybe and Either). It also contains strict IO\noperations.", category = "Data, System", exposed = True, exposedModules = [ModuleName ["Data","Strict","Tuple"],ModuleName ["Data","Strict","Maybe"],ModuleName ["Data","Strict","Either"],ModuleName ["Data","Strict"],ModuleName ["System","IO","Strict"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/strict-0.3.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/strict-0.3.2"], hsLibraries = ["HSstrict-0.3.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/strict-0.3.2/html/strict.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/strict-0.3.2/html"]}),(InstalledPackageId "syb-0.3.2-7bcfe6bded2b7e8d9901b1793580d5db",InstalledPackageInfo {installedPackageId = InstalledPackageId "syb-0.3.2-7bcfe6bded2b7e8d9901b1793580d5db", sourcePackageId = PackageIdentifier {pkgName = PackageName "syb", pkgVersion = Version {versionBranch = [0,3,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "generics@haskell.org", author = "Ralf Lammel, Simon Peyton Jones", stability = "provisional", homepage = "http://www.cs.uu.nl/wiki/GenericProgramming/SYB", pkgUrl = "", synopsis = "", description = "This package contains the generics system described in the\n/Scrap Your Boilerplate/ papers (see\n<http://www.cs.uu.nl/wiki/GenericProgramming/SYB>).\nIt defines the @Data@ class of types permitting folding and unfolding\nof constructor applications, instances of this class for primitive\ntypes, and a variety of traversals.", category = "Generics", exposed = True, exposedModules = [ModuleName ["Data","Generics"],ModuleName ["Data","Generics","Basics"],ModuleName ["Data","Generics","Instances"],ModuleName ["Data","Generics","Aliases"],ModuleName ["Data","Generics","Schemes"],ModuleName ["Data","Generics","Text"],ModuleName ["Data","Generics","Twins"],ModuleName ["Data","Generics","Builders"],ModuleName ["Generics","SYB"],ModuleName ["Generics","SYB","Basics"],ModuleName ["Generics","SYB","Instances"],ModuleName ["Generics","SYB","Aliases"],ModuleName ["Generics","SYB","Schemes"],ModuleName ["Generics","SYB","Text"],ModuleName ["Generics","SYB","Twins"],ModuleName ["Generics","SYB","Builders"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/syb-0.3.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/syb-0.3.2"], hsLibraries = ["HSsyb-0.3.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/syb-0.3.2/html/syb.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/syb-0.3.2/html"]}),(InstalledPackageId "tar-0.3.1.0-40adceea7b7dde44c58982a945493d60",InstalledPackageInfo {installedPackageId = InstalledPackageId "tar-0.3.1.0-40adceea7b7dde44c58982a945493d60", sourcePackageId = PackageIdentifier {pkgName = PackageName "tar", pkgVersion = Version {versionBranch = [0,3,1,0], versionTags = []}}, license = BSD3, copyright = "2007 Bjorn Bringert <bjorn@bringert.net>\n2008-2009 Duncan Coutts <duncan@haskell.org>", maintainer = "Duncan Coutts <duncan@haskell.org>", author = "Bjorn Bringert <bjorn@bringert.net>\nDuncan Coutts <duncan@haskell.org>", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This library is for working with \\\"@.tar@\\\" archive files. It\ncan read and write a range of common variations of archive\nformat including V7, USTAR, POSIX and GNU formats. It provides\nsupport for packing and unpacking portable archives. This\nmakes it suitable for distribution but not backup because\ndetails like file ownership and exact permissions are not\npreserved.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Archive","Tar"],ModuleName ["Codec","Archive","Tar","Entry"],ModuleName ["Codec","Archive","Tar","Check"]], hiddenModules = [ModuleName ["Codec","Archive","Tar","Types"],ModuleName ["Codec","Archive","Tar","Read"],ModuleName ["Codec","Archive","Tar","Write"],ModuleName ["Codec","Archive","Tar","Pack"],ModuleName ["Codec","Archive","Tar","Unpack"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/tar-0.3.1.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/tar-0.3.1.0"], hsLibraries = ["HStar-0.3.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageId "old-time-1.0.0.6-37d6575186c36059fbc372c289dbddd4"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/tar-0.3.1.0/html/tar.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/tar-0.3.1.0/html"]}),(InstalledPackageId "template-haskell-2.5.0.0-f0c8f015e470d561d64a578434331367",InstalledPackageInfo {installedPackageId = InstalledPackageId "template-haskell-2.5.0.0-f0c8f015e470d561d64a578434331367", sourcePackageId = PackageIdentifier {pkgName = PackageName "template-haskell", pkgVersion = Version {versionBranch = [2,5,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "Facilities for manipulating Haskell source code using Template Haskell.", category = "", exposed = True, exposedModules = [ModuleName ["Language","Haskell","TH","Syntax","Internals"],ModuleName ["Language","Haskell","TH","Syntax"],ModuleName ["Language","Haskell","TH","PprLib"],ModuleName ["Language","Haskell","TH","Ppr"],ModuleName ["Language","Haskell","TH","Lib"],ModuleName ["Language","Haskell","TH","Quote"],ModuleName ["Language","Haskell","TH"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/template-haskell-2.5.0.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/template-haskell-2.5.0.0"], hsLibraries = ["HStemplate-haskell-2.5.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageId "pretty-1.0.1.2-abc7c632374e50e1c1927987c2651f0f"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/template-haskell-2.5.0.0/template-haskell.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/template-haskell-2.5.0.0"]}),(InstalledPackageId "terminfo-0.3.1.3-ac8ae791e59af4b07646e3465163bc35",InstalledPackageInfo {installedPackageId = InstalledPackageId "terminfo-0.3.1.3-ac8ae791e59af4b07646e3465163bc35", sourcePackageId = PackageIdentifier {pkgName = PackageName "terminfo", pkgVersion = Version {versionBranch = [0,3,1,3], versionTags = []}}, license = BSD3, copyright = "(c) Judah Jacobson", maintainer = "Judah Jacobson <judah.jacobson@gmail.com>", author = "Judah Jacobson", stability = "Experimental", homepage = "http://code.haskell.org/terminfo", pkgUrl = "", synopsis = "", description = "This library provides an interface to the terminfo database (via bindings to the\ncurses library).  Terminfo allows POSIX systems to interact with a variety of terminals\nusing a standard set of capabilities.", category = "User Interfaces", exposed = True, exposedModules = [ModuleName ["System","Console","Terminfo"],ModuleName ["System","Console","Terminfo","Base"],ModuleName ["System","Console","Terminfo","Cursor"],ModuleName ["System","Console","Terminfo","Color"],ModuleName ["System","Console","Terminfo","Edit"],ModuleName ["System","Console","Terminfo","Effects"],ModuleName ["System","Console","Terminfo","Keys"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/terminfo-0.3.1.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/terminfo-0.3.1.3"], hsLibraries = ["HSterminfo-0.3.1.3"], extraLibraries = ["ncurses"], extraGHCiLibraries = [], includeDirs = [], includes = ["ncurses.h","term.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/terminfo-0.3.1.3/html/terminfo.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/terminfo-0.3.1.3/html"]}),(InstalledPackageId "test-framework-0.3.3-baed105bc570d96f6735672240decba6",InstalledPackageInfo {installedPackageId = InstalledPackageId "test-framework-0.3.3-baed105bc570d96f6735672240decba6", sourcePackageId = PackageIdentifier {pkgName = PackageName "test-framework", pkgVersion = Version {versionBranch = [0,3,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "http://batterseapower.github.com/test-framework/", pkgUrl = "", synopsis = "", description = "Allows tests such as QuickCheck properties and HUnit test cases to be assembled into test groups, run in\nparallel (but reported in deterministic order, to aid diff interpretation) and filtered and controlled by\ncommand line options. All of this comes with colored test output, progress reporting and test statistics output.", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","Framework"],ModuleName ["Test","Framework","Options"],ModuleName ["Test","Framework","Providers","API"],ModuleName ["Test","Framework","Runners","Console"],ModuleName ["Test","Framework","Runners","Options"],ModuleName ["Test","Framework","Seed"]], hiddenModules = [ModuleName ["Test","Framework","Core"],ModuleName ["Test","Framework","Improving"],ModuleName ["Test","Framework","Runners","Console","Colors"],ModuleName ["Test","Framework","Runners","Console","ProgressBar"],ModuleName ["Test","Framework","Runners","Console","Run"],ModuleName ["Test","Framework","Runners","Console","Statistics"],ModuleName ["Test","Framework","Runners","Console","Table"],ModuleName ["Test","Framework","Runners","Console","Utilities"],ModuleName ["Test","Framework","Runners","Core"],ModuleName ["Test","Framework","Runners","Processors"],ModuleName ["Test","Framework","Runners","Statistics"],ModuleName ["Test","Framework","Runners","TestPattern"],ModuleName ["Test","Framework","Runners","ThreadPool"],ModuleName ["Test","Framework","Runners","TimedConsumption"],ModuleName ["Test","Framework","Runners","XML","JUnitWriter"],ModuleName ["Test","Framework","Runners","XML"],ModuleName ["Test","Framework","Utilities"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/test-framework-0.3.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/test-framework-0.3.3"], hsLibraries = ["HStest-framework-0.3.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1",InstalledPackageId "ansi-wl-pprint-0.6.3-20baf12c8af15109902ffbd6603448ce",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "hostname-1.0-5bb472a8c4e44fdb66860bfca220e074",InstalledPackageId "old-locale-1.0.0.2-6e2a3c0744e8cf4e0ac2d4e58659f7b5",InstalledPackageId "random-1.0.0.3-57524486875e0c4c260dd22788921013",InstalledPackageId "regex-posix-0.95.1-c9111d928f58a8f00b048fd522aed393",InstalledPackageId "time-1.2.0.3-57ebba2cc05370f666b7eceba5e468a9",InstalledPackageId "xml-1.3.8-3a9c7d987d720facfe5232b2d0494f2c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/test-framework-0.3.3/html/test-framework.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/test-framework-0.3.3/html"]}),(InstalledPackageId "test-framework-hunit-0.2.6-d48f373da830a4693347d5428bf55fa4",InstalledPackageInfo {installedPackageId = InstalledPackageId "test-framework-hunit-0.2.6-d48f373da830a4693347d5428bf55fa4", sourcePackageId = PackageIdentifier {pkgName = PackageName "test-framework-hunit", pkgVersion = Version {versionBranch = [0,2,6], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "http://batterseapower.github.com/test-framework/", pkgUrl = "", synopsis = "", description = "", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","Framework","Providers","HUnit"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/test-framework-hunit-0.2.6"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/test-framework-hunit-0.2.6"], hsLibraries = ["HStest-framework-hunit-0.2.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "HUnit-1.2.2.3-e1267035fbfcf63ba78af031f8e974a5",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "test-framework-0.3.3-baed105bc570d96f6735672240decba6"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/test-framework-hunit-0.2.6/html/test-framework-hunit.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/test-framework-hunit-0.2.6/html"]}),(InstalledPackageId "test-framework-quickcheck2-0.2.10-45e76d2c5ec0caf49548c83c8f304ba6",InstalledPackageInfo {installedPackageId = InstalledPackageId "test-framework-quickcheck2-0.2.10-45e76d2c5ec0caf49548c83c8f304ba6", sourcePackageId = PackageIdentifier {pkgName = PackageName "test-framework-quickcheck2", pkgVersion = Version {versionBranch = [0,2,10], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "http://batterseapower.github.com/test-framework/", pkgUrl = "", synopsis = "", description = "", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","Framework","Providers","QuickCheck2"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/test-framework-quickcheck2-0.2.10"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/test-framework-quickcheck2-0.2.10"], hsLibraries = ["HStest-framework-quickcheck2-0.2.10"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "QuickCheck-2.4.1.1-b24a010efafa7347b56b3001ff218a37",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "random-1.0.0.3-57524486875e0c4c260dd22788921013",InstalledPackageId "test-framework-0.3.3-baed105bc570d96f6735672240decba6"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/test-framework-quickcheck2-0.2.10/html/test-framework-quickcheck2.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/test-framework-quickcheck2-0.2.10/html"]}),(InstalledPackageId "text-0.11.1.1-ff6d7d9a492863e8bcac7b0b64d124a7",InstalledPackageInfo {installedPackageId = InstalledPackageId "text-0.11.1.1-ff6d7d9a492863e8bcac7b0b64d124a7", sourcePackageId = PackageIdentifier {pkgName = PackageName "text", pkgVersion = Version {versionBranch = [0,11,1,1], versionTags = []}}, license = BSD3, copyright = "2008-2009 Tom Harper, 2009-2010 Bryan O'Sullivan", maintainer = "Bryan O'Sullivan <bos@serpentine.com>\nTom Harper <rtomharper@googlemail.com>\nDuncan Coutts <duncan@haskell.org>", author = "Bryan O'Sullivan <bos@serpentine.com>", stability = "", homepage = "https://bitbucket.org/bos/text", pkgUrl = "", synopsis = "", description = ".\nAn efficient packed, immutable Unicode text type (both strict and\nlazy), with a powerful loop fusion optimization framework.\n\nThe 'Text' type represents Unicode character strings, in a time and\nspace-efficient manner. This package provides text processing\ncapabilities that are optimized for performance critical use, both\nin terms of large data quantities and high speed.\n\nThe 'Text' type provides character-encoding, type-safe case\nconversion via whole-string case conversion functions. It also\nprovides a range of functions for converting 'Text' values to and from\n'ByteStrings', using several standard encodings.\n\nEfficient locale-sensitive support for text IO is also supported.\n\nThese modules are intended to be imported qualified, to avoid name\nclashes with Prelude functions, e.g.\n\n> import qualified Data.Text as T\n\nTo use an extended and very rich family of functions for working\nwith Unicode text (including normalization, regular expressions,\nnon-standard encodings, text breaking, and locales), see\nthe @text-icu@ package:\n<http://hackage.haskell.org/package/text-icu>", category = "Data, Text", exposed = True, exposedModules = [ModuleName ["Data","Text"],ModuleName ["Data","Text","Array"],ModuleName ["Data","Text","Encoding"],ModuleName ["Data","Text","Encoding","Error"],ModuleName ["Data","Text","Foreign"],ModuleName ["Data","Text","IO"],ModuleName ["Data","Text","Internal"],ModuleName ["Data","Text","Lazy"],ModuleName ["Data","Text","Lazy","Builder"],ModuleName ["Data","Text","Lazy","Builder","Int"],ModuleName ["Data","Text","Lazy","Builder","RealFloat"],ModuleName ["Data","Text","Lazy","Encoding"],ModuleName ["Data","Text","Lazy","IO"],ModuleName ["Data","Text","Lazy","Internal"],ModuleName ["Data","Text","Lazy","Read"],ModuleName ["Data","Text","Read"]], hiddenModules = [ModuleName ["Data","Text","Encoding","Fusion"],ModuleName ["Data","Text","Encoding","Fusion","Common"],ModuleName ["Data","Text","Encoding","Utf16"],ModuleName ["Data","Text","Encoding","Utf32"],ModuleName ["Data","Text","Encoding","Utf8"],ModuleName ["Data","Text","Fusion"],ModuleName ["Data","Text","Fusion","CaseMapping"],ModuleName ["Data","Text","Fusion","Common"],ModuleName ["Data","Text","Fusion","Internal"],ModuleName ["Data","Text","Fusion","Size"],ModuleName ["Data","Text","IO","Internal"],ModuleName ["Data","Text","Lazy","Builder","Functions"],ModuleName ["Data","Text","Lazy","Builder","RealFloat","Functions"],ModuleName ["Data","Text","Lazy","Encoding","Fusion"],ModuleName ["Data","Text","Lazy","Fusion"],ModuleName ["Data","Text","Lazy","Search"],ModuleName ["Data","Text","Search"],ModuleName ["Data","Text","Unsafe"],ModuleName ["Data","Text","UnsafeChar"],ModuleName ["Data","Text","UnsafeShift"],ModuleName ["Data","Text","Util"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/text-0.11.1.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/text-0.11.1.1"], hsLibraries = ["HStext-0.11.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "deepseq-1.1.0.2-09b3aed0c4982bbc6569c668100876fa",InstalledPackageId "ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2",InstalledPackageId "integer-gmp-0.2.0.3-91607778cf3ae8f3948a50062b4f8479"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/text-0.11.1.1/html/text.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/text-0.11.1.1/html"]}),(InstalledPackageId "time-1.2.0.3-57ebba2cc05370f666b7eceba5e468a9",InstalledPackageInfo {installedPackageId = InstalledPackageId "time-1.2.0.3-57ebba2cc05370f666b7eceba5e468a9", sourcePackageId = PackageIdentifier {pkgName = PackageName "time", pkgVersion = Version {versionBranch = [1,2,0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "<ashley@semantic.org>", author = "Ashley Yakeley", stability = "stable", homepage = "http://semantic.org/TimeLib/", pkgUrl = "", synopsis = "", description = "A time library", category = "System", exposed = True, exposedModules = [ModuleName ["Data","Time","Calendar"],ModuleName ["Data","Time","Calendar","MonthDay"],ModuleName ["Data","Time","Calendar","OrdinalDate"],ModuleName ["Data","Time","Calendar","WeekDate"],ModuleName ["Data","Time","Calendar","Julian"],ModuleName ["Data","Time","Calendar","Easter"],ModuleName ["Data","Time","Clock"],ModuleName ["Data","Time","Clock","POSIX"],ModuleName ["Data","Time","Clock","TAI"],ModuleName ["Data","Time","LocalTime"],ModuleName ["Data","Time","Format"],ModuleName ["Data","Time"]], hiddenModules = [ModuleName ["Data","Time","Calendar","Private"],ModuleName ["Data","Time","Calendar","Days"],ModuleName ["Data","Time","Calendar","Gregorian"],ModuleName ["Data","Time","Calendar","JulianYearDay"],ModuleName ["Data","Time","Clock","Scale"],ModuleName ["Data","Time","Clock","UTC"],ModuleName ["Data","Time","Clock","CTimeval"],ModuleName ["Data","Time","Clock","UTCDiff"],ModuleName ["Data","Time","LocalTime","TimeZone"],ModuleName ["Data","Time","LocalTime","TimeOfDay"],ModuleName ["Data","Time","LocalTime","LocalTime"],ModuleName ["Data","Time","Format","Parse"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/time-1.2.0.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/time-1.2.0.3"], hsLibraries = ["HStime-1.2.0.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/time-1.2.0.3/include"], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "old-locale-1.0.0.2-6e2a3c0744e8cf4e0ac2d4e58659f7b5"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/time-1.2.0.3/time.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/time-1.2.0.3"]}),(InstalledPackageId "transformers-0.2.2.0-a8a2dbba7d96131db605cf631ea0c8c4",InstalledPackageInfo {installedPackageId = InstalledPackageId "transformers-0.2.2.0-a8a2dbba7d96131db605cf631ea0c8c4", sourcePackageId = PackageIdentifier {pkgName = PackageName "transformers", pkgVersion = Version {versionBranch = [0,2,2,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Ross Paterson <ross@soi.city.ac.uk>", author = "Andy Gill, Ross Paterson", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "Haskell 98 part of a monad transformer library, inspired by the paper\n\\\"Functional Programming with Overloading and Higher-Order Polymorphism\\\",\nby Mark P Jones, in /Advanced School of Functional Programming/, 1995\n(<http://web.cecs.pdx.edu/~mpj/pubs/springschool.html>).\n\nThis part contains the monad transformer class, the concrete monad\ntransformers, operations and liftings.  It can be used on its own\nin Haskell 98 code, or with the monad classes in the @monads-fd@ or\n@monads-tf@ packages, which automatically lift operations introduced\nby monad transformers through other transformers.", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","Monad","IO","Class"],ModuleName ["Control","Monad","Trans","Class"],ModuleName ["Control","Monad","Trans","Cont"],ModuleName ["Control","Monad","Trans","Error"],ModuleName ["Control","Monad","Trans","Identity"],ModuleName ["Control","Monad","Trans","List"],ModuleName ["Control","Monad","Trans","Maybe"],ModuleName ["Control","Monad","Trans","Reader"],ModuleName ["Control","Monad","Trans","RWS"],ModuleName ["Control","Monad","Trans","RWS","Lazy"],ModuleName ["Control","Monad","Trans","RWS","Strict"],ModuleName ["Control","Monad","Trans","State"],ModuleName ["Control","Monad","Trans","State","Lazy"],ModuleName ["Control","Monad","Trans","State","Strict"],ModuleName ["Control","Monad","Trans","Writer"],ModuleName ["Control","Monad","Trans","Writer","Lazy"],ModuleName ["Control","Monad","Trans","Writer","Strict"],ModuleName ["Data","Functor","Compose"],ModuleName ["Data","Functor","Constant"],ModuleName ["Data","Functor","Identity"],ModuleName ["Data","Functor","Product"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/transformers-0.2.2.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/transformers-0.2.2.0"], hsLibraries = ["HStransformers-0.2.2.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/transformers-0.2.2.0/html/transformers.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/transformers-0.2.2.0/html"]}),(InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1",InstalledPackageInfo {installedPackageId = InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1", sourcePackageId = PackageIdentifier {pkgName = PackageName "unix", pkgVersion = Version {versionBranch = [2,4,2,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package gives you access to the set of operating system\nservices standardised by POSIX 1003.1b (or the IEEE Portable\nOperating System Interface for Computing Environments -\nIEEE Std. 1003.1).\n\nThe package is not supported under Windows (except under Cygwin).", category = "System", exposed = True, exposedModules = [ModuleName ["System","Posix"],ModuleName ["System","Posix","DynamicLinker","Module"],ModuleName ["System","Posix","DynamicLinker","Prim"],ModuleName ["System","Posix","Directory"],ModuleName ["System","Posix","DynamicLinker"],ModuleName ["System","Posix","Env"],ModuleName ["System","Posix","Error"],ModuleName ["System","Posix","Files"],ModuleName ["System","Posix","IO"],ModuleName ["System","Posix","Process"],ModuleName ["System","Posix","Process","Internals"],ModuleName ["System","Posix","Resource"],ModuleName ["System","Posix","Temp"],ModuleName ["System","Posix","Terminal"],ModuleName ["System","Posix","Time"],ModuleName ["System","Posix","Unistd"],ModuleName ["System","Posix","User"],ModuleName ["System","Posix","Signals"],ModuleName ["System","Posix","Signals","Exts"],ModuleName ["System","Posix","Semaphore"],ModuleName ["System","Posix","SharedMem"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/unix-2.4.2.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/unix-2.4.2.0"], hsLibraries = ["HSunix-2.4.2.0"], extraLibraries = ["rt","util","dl"], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/unix-2.4.2.0/include"], includes = ["HsUnix.h","execvpe.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/unix-2.4.2.0/unix.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/unix-2.4.2.0"]}),(InstalledPackageId "unix-compat-0.2.1.3-2f4e56f2b420caf208cd3230e61645ab",InstalledPackageInfo {installedPackageId = InstalledPackageId "unix-compat-0.2.1.3-2f4e56f2b420caf208cd3230e61645ab", sourcePackageId = PackageIdentifier {pkgName = PackageName "unix-compat", pkgVersion = Version {versionBranch = [0,2,1,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Jacob Stanley <jacob@stanley.io>", author = "Bj\246rn Bringert, Duncan Coutts, Jacob Stanley", stability = "", homepage = "http://github.com/jystic/unix-compat", pkgUrl = "", synopsis = "", description = "This package provides portable implementations of parts\nof the unix package. This package re-exports the unix\npackage when available. When it isn't available,\nportable implementations are used.", category = "System", exposed = True, exposedModules = [ModuleName ["System","PosixCompat"],ModuleName ["System","PosixCompat","Extensions"],ModuleName ["System","PosixCompat","Files"],ModuleName ["System","PosixCompat","Time"],ModuleName ["System","PosixCompat","Types"],ModuleName ["System","PosixCompat","User"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/unix-compat-0.2.1.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/unix-compat-0.2.1.3"], hsLibraries = ["HSunix-compat-0.2.1.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/unix-compat-0.2.1.3/include"], includes = ["HsUnixCompat.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/unix-compat-0.2.1.3/html/unix-compat.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/unix-compat-0.2.1.3/html"]}),(InstalledPackageId "utf8-string-0.3.6-1c65e01135581c7189781d69090906b2",InstalledPackageInfo {installedPackageId = InstalledPackageId "utf8-string-0.3.6-1c65e01135581c7189781d69090906b2", sourcePackageId = PackageIdentifier {pkgName = PackageName "utf8-string", pkgVersion = Version {versionBranch = [0,3,6], versionTags = []}}, license = BSD3, copyright = "", maintainer = "emertens@galois.com", author = "Eric Mertens", stability = "", homepage = "http://github.com/glguy/utf8-string/", pkgUrl = "", synopsis = "", description = "A UTF8 layer for IO and Strings. The utf8-string\npackage provides operations for encoding UTF8\nstrings to Word8 lists and back, and for reading and\nwriting UTF8 without truncation.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Binary","UTF8","String"],ModuleName ["Codec","Binary","UTF8","Generic"],ModuleName ["System","IO","UTF8"],ModuleName ["System","Environment","UTF8"],ModuleName ["Data","String","UTF8"],ModuleName ["Data","ByteString","UTF8"],ModuleName ["Data","ByteString","Lazy","UTF8"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/utf8-string-0.3.6"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/utf8-string-0.3.6"], hsLibraries = ["HSutf8-string-0.3.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/utf8-string-0.3.6/html/utf8-string.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/utf8-string-0.3.6/html"]}),(InstalledPackageId "vector-0.7.1-d0453ff83191033a2912b337e66eb0f7",InstalledPackageInfo {installedPackageId = InstalledPackageId "vector-0.7.1-d0453ff83191033a2912b337e66eb0f7", sourcePackageId = PackageIdentifier {pkgName = PackageName "vector", pkgVersion = Version {versionBranch = [0,7,1], versionTags = []}}, license = BSD3, copyright = "(c) Roman Leshchinskiy 2008-2011", maintainer = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", author = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", stability = "", homepage = "http://code.haskell.org/vector", pkgUrl = "", synopsis = "", description = ".\nAn efficient implementation of Int-indexed arrays (both mutable\nand immutable), with a powerful loop fusion optimization framework .\n\nIt is structured as follows:\n\n[@Data.Vector@] Boxed vectors of arbitrary types.\n\n[@Data.Vector.Unboxed@] Unboxed vectors with an adaptive\nrepresentation based on data type families.\n\n[@Data.Vector.Storable@] Unboxed vectors of 'Storable' types.\n\n[@Data.Vector.Primitive@] Unboxed vectors of primitive types as\ndefined by the @primitive@ package. @Data.Vector.Unboxed@ is more\nflexible at no performance cost.\n\n[@Data.Vector.Generic@] Generic interface to the vector types.\n\nThere is also a (draft) tutorial on common uses of vector.\n\n* <http://haskell.org/haskellwiki/Numeric_Haskell:_A_Vector_Tutorial>\n\nPlease use the project trac to submit bug reports and feature\nrequests.\n\n* <http://trac.haskell.org/vector>\n\nChanges in version 0.7.1\n\n* New functions: @iterateN@, @splitAt@\n\n* New monadic operations: @generateM@, @sequence@, @foldM_@ and\nvariants\n\n* New functions for copying potentially overlapping arrays: @move@,\n@unsafeMove@\n\n* Specialisations of various monadic operations for primitive monads\n\n* Unsafe casts for Storable vectors\n\n* Efficiency improvements\n\nChanges in version 0.7.0.1\n\n* Dependency on package ghc removed\n\nChanges in version 0.7\n\n* New functions for freezing, copying and thawing vectors: @freeze@,\n@thaw@, @unsafeThaw@ and @clone@\n\n* @newWith@ and @newUnsafeWith@ on mutable vectors replaced by\n@replicate@\n\n* New function: @concat@\n\n* New function for safe indexing: @(!?)@\n\n* @Monoid@ instances for all vector types\n\n* Significant recycling and fusion improvements\n\n* Bug fixes\n\n* Support for GHC 7.0", category = "Data, Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Vector","Internal","Check"],ModuleName ["Data","Vector","Fusion","Util"],ModuleName ["Data","Vector","Fusion","Stream","Size"],ModuleName ["Data","Vector","Fusion","Stream","Monadic"],ModuleName ["Data","Vector","Fusion","Stream"],ModuleName ["Data","Vector","Generic","Mutable"],ModuleName ["Data","Vector","Generic","Base"],ModuleName ["Data","Vector","Generic","New"],ModuleName ["Data","Vector","Generic"],ModuleName ["Data","Vector","Primitive","Mutable"],ModuleName ["Data","Vector","Primitive"],ModuleName ["Data","Vector","Storable","Internal"],ModuleName ["Data","Vector","Storable","Mutable"],ModuleName ["Data","Vector","Storable"],ModuleName ["Data","Vector","Unboxed","Base"],ModuleName ["Data","Vector","Unboxed","Mutable"],ModuleName ["Data","Vector","Unboxed"],ModuleName ["Data","Vector","Mutable"],ModuleName ["Data","Vector"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/vector-0.7.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/vector-0.7.1"], hsLibraries = ["HSvector-0.7.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/vector-0.7.1/include"], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "primitive-0.3.1-13f6861e052a8e08600e4045dc473931"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/vector-0.7.1/html/vector.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/vector-0.7.1/html"]}),(InstalledPackageId "xml-1.3.8-3a9c7d987d720facfe5232b2d0494f2c",InstalledPackageInfo {installedPackageId = InstalledPackageId "xml-1.3.8-3a9c7d987d720facfe5232b2d0494f2c", sourcePackageId = PackageIdentifier {pkgName = PackageName "xml", pkgVersion = Version {versionBranch = [1,3,8], versionTags = []}}, license = BSD3, copyright = "(c) 2007-2008 Galois Inc.", maintainer = "diatchki@galois.com", author = "Galois Inc.", stability = "", homepage = "http://code.galois.com", pkgUrl = "", synopsis = "", description = "A simple XML library.", category = "Text, XML", exposed = True, exposedModules = [ModuleName ["Text","XML","Light"],ModuleName ["Text","XML","Light","Types"],ModuleName ["Text","XML","Light","Output"],ModuleName ["Text","XML","Light","Input"],ModuleName ["Text","XML","Light","Lexer"],ModuleName ["Text","XML","Light","Proc"],ModuleName ["Text","XML","Light","Cursor"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/xml-1.3.8"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/xml-1.3.8"], hsLibraries = ["HSxml-1.3.8"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/xml-1.3.8/html/xml.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/xml-1.3.8/html"]}),(InstalledPackageId "zlib-0.5.3.1-5fbdf714525b76e0e601c2ffb25f2044",InstalledPackageInfo {installedPackageId = InstalledPackageId "zlib-0.5.3.1-5fbdf714525b76e0e601c2ffb25f2044", sourcePackageId = PackageIdentifier {pkgName = PackageName "zlib", pkgVersion = Version {versionBranch = [0,5,3,1], versionTags = []}}, license = BSD3, copyright = "(c) 2006-2008 Duncan Coutts", maintainer = "Duncan Coutts <duncan@community.haskell.org>", author = "Duncan Coutts <duncan@community.haskell.org>", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides a pure interface for compressing and\ndecompressing streams of data represented as lazy\n'ByteString's. It uses the zlib C library so it has high\nperformance. It supports the \\\"zlib\\\", \\\"gzip\\\" and \\\"raw\\\"\ncompression formats.\n\nIt provides a convenient high level API suitable for most\ntasks and for the few cases where more control is needed it\nprovides access to the full zlib feature set.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Compression","GZip"],ModuleName ["Codec","Compression","Zlib"],ModuleName ["Codec","Compression","Zlib","Raw"],ModuleName ["Codec","Compression","Zlib","Internal"]], hiddenModules = [ModuleName ["Codec","Compression","Zlib","Stream"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/zlib-0.5.3.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/zlib-0.5.3.1"], hsLibraries = ["HSzlib-0.5.3.1"], extraLibraries = ["z"], extraGHCiLibraries = [], includeDirs = [], includes = ["zlib.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/zlib-0.5.3.1/html/zlib.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/zlib-0.5.3.1/html"]})]) (fromList [(PackageName "HTTP",fromList [(Version {versionBranch = [4000,1,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "HTTP-4000.1.1-7307331a7f052a69bdd620a27081320d", sourcePackageId = PackageIdentifier {pkgName = PackageName "HTTP", pkgVersion = Version {versionBranch = [4000,1,1], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2002, Warrick Gray\nCopyright (c) 2002-2005, Ian Lynagh\nCopyright (c) 2003-2006, Bjorn Bringert\nCopyright (c) 2004, Andre Furtado\nCopyright (c) 2004, Ganesh Sittampalam\nCopyright (c) 2004-2005, Dominic Steinitz\nCopyright 2007 Robin Bate Boerop\nCopyright 2008- Sigbjorn Finne", maintainer = "Ganesh Sittampalam <ganesh@earth.li>", author = "Warrick Gray <warrick.gray@hotmail.com>", stability = "", homepage = "http://projects.haskell.org/http/", pkgUrl = "", synopsis = "", description = "The HTTP package supports client-side web programming in Haskell. It lets you set up\nHTTP connections, transmitting requests and processing the responses coming back, all\nfrom within the comforts of Haskell. It's dependent on the network package to operate,\nbut other than that, the implementation is all written in Haskell.\n\nA basic API for issuing single HTTP requests + receiving responses is provided. On top\nof that, a session-level abstraction is also on offer  (the @BrowserAction@ monad);\nit taking care of handling the management of persistent connections, proxies,\nstate (cookies) and authentication credentials required to handle multi-step\ninteractions with a web server.\n\nThe representation of the bytes flowing across is extensible via the use of a type class,\nletting you pick the representation of requests and responses that best fits your use.\nSome pre-packaged, common instances are provided for you (@ByteString@, @String@.)\n\nHere's an example use:\n\n>\n>    do\n>      rsp <- Network.HTTP.simpleHTTP (getRequest \"http://www.haskell.org/\")\n>              -- fetch document and return it (as a 'String'.)\n>      fmap (take 100) (getResponseBody rsp)\n>\n>    do\n>      rsp <- Network.Browser.browse $ do\n>               setAllowRedirects True -- handle HTTP redirects\n>               request $ getRequest \"http://google.com/\"\n>      fmap (take 100) (getResponseBody rsp)\n>\n\nGit repository available at <git://github.com/haskell/HTTP.git>", category = "Network", exposed = True, exposedModules = [ModuleName ["Network","BufferType"],ModuleName ["Network","Stream"],ModuleName ["Network","StreamDebugger"],ModuleName ["Network","StreamSocket"],ModuleName ["Network","TCP"],ModuleName ["Network","HTTP"],ModuleName ["Network","HTTP","Headers"],ModuleName ["Network","HTTP","Base"],ModuleName ["Network","HTTP","Stream"],ModuleName ["Network","HTTP","Auth"],ModuleName ["Network","HTTP","Cookie"],ModuleName ["Network","HTTP","Proxy"],ModuleName ["Network","HTTP","HandleStream"],ModuleName ["Network","Browser"]], hiddenModules = [ModuleName ["Network","HTTP","Base64"],ModuleName ["Network","HTTP","MD5"],ModuleName ["Network","HTTP","MD5Aux"],ModuleName ["Network","HTTP","Utils"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/HTTP-4000.1.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/HTTP-4000.1.1"], hsLibraries = ["HSHTTP-4000.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",InstalledPackageId "network-2.3.0.4-3ac6bb38978a0758e807f7956decb2f2",InstalledPackageId "old-time-1.0.0.6-37d6575186c36059fbc372c289dbddd4",InstalledPackageId "parsec-3.1.1-9ad7689ce68f46e0751207509e882c5b"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/HTTP-4000.1.1/html/HTTP.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/HTTP-4000.1.1/html"]}])]),(PackageName "HUnit",fromList [(Version {versionBranch = [1,2,2,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "HUnit-1.2.2.3-e1267035fbfcf63ba78af031f8e974a5", sourcePackageId = PackageIdentifier {pkgName = PackageName "HUnit", pkgVersion = Version {versionBranch = [1,2,2,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "hunit@richardg.name", author = "Dean Herington", stability = "stable", homepage = "http://hunit.sourceforge.net/", pkgUrl = "", synopsis = "", description = "HUnit is a unit testing framework for Haskell, inspired by the\nJUnit tool for Java, see: <http://www.junit.org>.", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","HUnit","Base"],ModuleName ["Test","HUnit","Lang"],ModuleName ["Test","HUnit","Terminal"],ModuleName ["Test","HUnit","Text"],ModuleName ["Test","HUnit"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/HUnit-1.2.2.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/HUnit-1.2.2.3"], hsLibraries = ["HSHUnit-1.2.2.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/HUnit-1.2.2.3/html/HUnit.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/HUnit-1.2.2.3/html"]}])]),(PackageName "QuickCheck",fromList [(Version {versionBranch = [2,4,1,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "QuickCheck-2.4.1.1-b24a010efafa7347b56b3001ff218a37", sourcePackageId = PackageIdentifier {pkgName = PackageName "QuickCheck", pkgVersion = Version {versionBranch = [2,4,1,1], versionTags = []}}, license = BSD3, copyright = "2000-2011 Koen Claessen, 2006-2008 Bj\246rn Bringert, 2009-2011 Nick Smallbone", maintainer = "QuickCheck developers <quickcheck@projects.haskell.org>", author = "Koen Claessen <koen@chalmers.se>", stability = "", homepage = "http://code.haskell.org/QuickCheck", pkgUrl = "", synopsis = "", description = "QuickCheck is a library for random testing of program properties.\n\nThe programmer provides a specification of the program, in\nthe form of properties which functions should satisfy, and\nQuickCheck then tests that the properties hold in a large number\nof randomly generated cases.\n\nSpecifications are expressed in\nHaskell, using combinators defined in the QuickCheck library.\nQuickCheck provides combinators to define properties, observe\nthe distribution of test data, and define test\ndata generators.", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","QuickCheck","All"],ModuleName ["Test","QuickCheck","Function"],ModuleName ["Test","QuickCheck"],ModuleName ["Test","QuickCheck","Arbitrary"],ModuleName ["Test","QuickCheck","Gen"],ModuleName ["Test","QuickCheck","Monadic"],ModuleName ["Test","QuickCheck","Modifiers"],ModuleName ["Test","QuickCheck","Property"],ModuleName ["Test","QuickCheck","Test"],ModuleName ["Test","QuickCheck","Text"],ModuleName ["Test","QuickCheck","Poly"],ModuleName ["Test","QuickCheck","State"]], hiddenModules = [ModuleName ["Test","QuickCheck","Exception"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/QuickCheck-2.4.1.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/QuickCheck-2.4.1.1"], hsLibraries = ["HSQuickCheck-2.4.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "random-1.0.0.3-57524486875e0c4c260dd22788921013",InstalledPackageId "template-haskell-2.5.0.0-f0c8f015e470d561d64a578434331367"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/QuickCheck-2.4.1.1/html/QuickCheck.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/QuickCheck-2.4.1.1/html"]}])]),(PackageName "ansi-terminal",fromList [(Version {versionBranch = [0,5,5], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1", sourcePackageId = PackageIdentifier {pkgName = PackageName "ansi-terminal", pkgVersion = Version {versionBranch = [0,5,5], versionTags = []}}, license = BSD3, copyright = "", maintainer = "batterseapower@hotmail.com", author = "Max Bolingbroke", stability = "", homepage = "http://batterseapower.github.com/ansi-terminal", pkgUrl = "", synopsis = "", description = "ANSI terminal support for Haskell: allows cursor movement, screen clearing, color output showing or hiding the cursor, and\nchanging the title. Compatible with Windows and those Unixes with ANSI terminals, but only GHC is supported as a compiler.", category = "User Interfaces", exposed = True, exposedModules = [ModuleName ["System","Console","ANSI"]], hiddenModules = [ModuleName ["System","Console","ANSI","Unix"],ModuleName ["System","Console","ANSI","Common"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/ansi-terminal-0.5.5"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/ansi-terminal-0.5.5"], hsLibraries = ["HSansi-terminal-0.5.5"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/ansi-terminal-0.5.5/html/ansi-terminal.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/ansi-terminal-0.5.5/html"]}])]),(PackageName "ansi-wl-pprint",fromList [(Version {versionBranch = [0,6,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "ansi-wl-pprint-0.6.3-20baf12c8af15109902ffbd6603448ce", sourcePackageId = PackageIdentifier {pkgName = PackageName "ansi-wl-pprint", pkgVersion = Version {versionBranch = [0,6,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "batterseapower@hotmail.com", author = "Daan Leijen, Max Bolingbroke", stability = "", homepage = "http://github.com/batterseapower/ansi-wl-pprint", pkgUrl = "", synopsis = "", description = "This is a pretty printing library based on Wadler's paper \"A Prettier Printer\". It has been enhanced with support for ANSI terminal colored output using the ansi-terminal package.", category = "User Interfaces, Text", exposed = True, exposedModules = [ModuleName ["Text","PrettyPrint","ANSI","Leijen"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/ansi-wl-pprint-0.6.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/ansi-wl-pprint-0.6.3"], hsLibraries = ["HSansi-wl-pprint-0.6.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/ansi-wl-pprint-0.6.3/html/ansi-wl-pprint.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/ansi-wl-pprint-0.6.3/html"]}])]),(PackageName "array",fromList [(Version {versionBranch = [0,3,0,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4", sourcePackageId = PackageIdentifier {pkgName = PackageName "array", pkgVersion = Version {versionBranch = [0,3,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package defines the classes @IArray@ of immutable arrays and\n@MArray@ of arrays mutable within appropriate monads, as well as\nsome instances of these classes.", category = "Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Array","Base"],ModuleName ["Data","Array","IArray"],ModuleName ["Data","Array","IO"],ModuleName ["Data","Array","IO","Internals"],ModuleName ["Data","Array","MArray"],ModuleName ["Data","Array","ST"],ModuleName ["Data","Array","Storable"],ModuleName ["Data","Array","Unboxed"],ModuleName ["Data","Array"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/array-0.3.0.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/array-0.3.0.2"], hsLibraries = ["HSarray-0.3.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/array-0.3.0.2/array.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/array-0.3.0.2"]}])]),(PackageName "base",fromList [(Version {versionBranch = [4,3,1,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e", sourcePackageId = PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,3,1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package contains the Prelude and its support libraries,\nand a large collection of useful libraries ranging from data\nstructures to parsing combinators and debugging utilities.", category = "", exposed = True, exposedModules = [ModuleName ["Foreign","Concurrent"],ModuleName ["GHC","Arr"],ModuleName ["GHC","Base"],ModuleName ["GHC","Classes"],ModuleName ["GHC","Conc"],ModuleName ["GHC","Conc","IO"],ModuleName ["GHC","Conc","Signal"],ModuleName ["GHC","Conc","Sync"],ModuleName ["GHC","ConsoleHandler"],ModuleName ["GHC","Constants"],ModuleName ["GHC","Desugar"],ModuleName ["GHC","Enum"],ModuleName ["GHC","Environment"],ModuleName ["GHC","Err"],ModuleName ["GHC","Exception"],ModuleName ["GHC","Exts"],ModuleName ["GHC","Float"],ModuleName ["GHC","ForeignPtr"],ModuleName ["GHC","MVar"],ModuleName ["GHC","IO"],ModuleName ["GHC","IO","IOMode"],ModuleName ["GHC","IO","Buffer"],ModuleName ["GHC","IO","Device"],ModuleName ["GHC","IO","BufferedIO"],ModuleName ["GHC","IO","FD"],ModuleName ["GHC","IO","Exception"],ModuleName ["GHC","IO","Encoding"],ModuleName ["GHC","IO","Encoding","Latin1"],ModuleName ["GHC","IO","Encoding","UTF8"],ModuleName ["GHC","IO","Encoding","UTF16"],ModuleName ["GHC","IO","Encoding","UTF32"],ModuleName ["GHC","IO","Encoding","Types"],ModuleName ["GHC","IO","Encoding","Iconv"],ModuleName ["GHC","IO","Encoding","CodePage"],ModuleName ["GHC","IO","Handle"],ModuleName ["GHC","IO","Handle","Types"],ModuleName ["GHC","IO","Handle","Internals"],ModuleName ["GHC","IO","Handle","FD"],ModuleName ["GHC","IO","Handle","Text"],ModuleName ["GHC","IOBase"],ModuleName ["GHC","Handle"],ModuleName ["GHC","IORef"],ModuleName ["GHC","IOArray"],ModuleName ["GHC","Int"],ModuleName ["GHC","List"],ModuleName ["GHC","Num"],ModuleName ["GHC","PArr"],ModuleName ["GHC","Pack"],ModuleName ["GHC","Ptr"],ModuleName ["GHC","Read"],ModuleName ["GHC","Real"],ModuleName ["GHC","ST"],ModuleName ["GHC","STRef"],ModuleName ["GHC","Show"],ModuleName ["GHC","Stable"],ModuleName ["GHC","Storable"],ModuleName ["GHC","TopHandler"],ModuleName ["GHC","Unicode"],ModuleName ["GHC","Weak"],ModuleName ["GHC","Word"],ModuleName ["System","Timeout"],ModuleName ["System","Event"],ModuleName ["Control","Applicative"],ModuleName ["Control","Arrow"],ModuleName ["Control","Category"],ModuleName ["Control","Concurrent"],ModuleName ["Control","Concurrent","Chan"],ModuleName ["Control","Concurrent","MVar"],ModuleName ["Control","Concurrent","QSem"],ModuleName ["Control","Concurrent","QSemN"],ModuleName ["Control","Concurrent","SampleVar"],ModuleName ["Control","Exception"],ModuleName ["Control","Exception","Base"],ModuleName ["Control","OldException"],ModuleName ["Control","Monad"],ModuleName ["Control","Monad","Fix"],ModuleName ["Control","Monad","Instances"],ModuleName ["Control","Monad","ST"],ModuleName ["Control","Monad","ST","Lazy"],ModuleName ["Control","Monad","ST","Strict"],ModuleName ["Data","Bits"],ModuleName ["Data","Bool"],ModuleName ["Data","Char"],ModuleName ["Data","Complex"],ModuleName ["Data","Dynamic"],ModuleName ["Data","Either"],ModuleName ["Data","Eq"],ModuleName ["Data","Data"],ModuleName ["Data","Fixed"],ModuleName ["Data","Foldable"],ModuleName ["Data","Function"],ModuleName ["Data","Functor"],ModuleName ["Data","HashTable"],ModuleName ["Data","IORef"],ModuleName ["Data","Int"],ModuleName ["Data","Ix"],ModuleName ["Data","List"],ModuleName ["Data","Maybe"],ModuleName ["Data","Monoid"],ModuleName ["Data","Ord"],ModuleName ["Data","Ratio"],ModuleName ["Data","STRef"],ModuleName ["Data","STRef","Lazy"],ModuleName ["Data","STRef","Strict"],ModuleName ["Data","String"],ModuleName ["Data","Traversable"],ModuleName ["Data","Tuple"],ModuleName ["Data","Typeable"],ModuleName ["Data","Unique"],ModuleName ["Data","Version"],ModuleName ["Data","Word"],ModuleName ["Debug","Trace"],ModuleName ["Foreign"],ModuleName ["Foreign","C"],ModuleName ["Foreign","C","Error"],ModuleName ["Foreign","C","String"],ModuleName ["Foreign","C","Types"],ModuleName ["Foreign","ForeignPtr"],ModuleName ["Foreign","Marshal"],ModuleName ["Foreign","Marshal","Alloc"],ModuleName ["Foreign","Marshal","Array"],ModuleName ["Foreign","Marshal","Error"],ModuleName ["Foreign","Marshal","Pool"],ModuleName ["Foreign","Marshal","Utils"],ModuleName ["Foreign","Ptr"],ModuleName ["Foreign","StablePtr"],ModuleName ["Foreign","Storable"],ModuleName ["Numeric"],ModuleName ["Prelude"],ModuleName ["System","Console","GetOpt"],ModuleName ["System","CPUTime"],ModuleName ["System","Environment"],ModuleName ["System","Exit"],ModuleName ["System","IO"],ModuleName ["System","IO","Error"],ModuleName ["System","IO","Unsafe"],ModuleName ["System","Info"],ModuleName ["System","Mem"],ModuleName ["System","Mem","StableName"],ModuleName ["System","Mem","Weak"],ModuleName ["System","Posix","Internals"],ModuleName ["System","Posix","Types"],ModuleName ["Text","ParserCombinators","ReadP"],ModuleName ["Text","ParserCombinators","ReadPrec"],ModuleName ["Text","Printf"],ModuleName ["Text","Read"],ModuleName ["Text","Read","Lex"],ModuleName ["Text","Show"],ModuleName ["Text","Show","Functions"],ModuleName ["Unsafe","Coerce"]], hiddenModules = [ModuleName ["System","Event","Array"],ModuleName ["System","Event","Clock"],ModuleName ["System","Event","Control"],ModuleName ["System","Event","EPoll"],ModuleName ["System","Event","IntMap"],ModuleName ["System","Event","Internal"],ModuleName ["System","Event","KQueue"],ModuleName ["System","Event","Manager"],ModuleName ["System","Event","PSQ"],ModuleName ["System","Event","Poll"],ModuleName ["System","Event","Thread"],ModuleName ["System","Event","Unique"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/base-4.3.1.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/base-4.3.1.0"], hsLibraries = ["HSbase-4.3.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/base-4.3.1.0/include"], includes = ["HsBase.h"], depends = [InstalledPackageId "ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2",InstalledPackageId "integer-gmp-0.2.0.3-91607778cf3ae8f3948a50062b4f8479",InstalledPackageId "builtin_rts"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/base-4.3.1.0/base.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/base-4.3.1.0"]}])]),(PackageName "binary",fromList [(Version {versionBranch = [0,5,0,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "binary-0.5.0.2-403bbefac1f83c5b5f7445fa050e39c3", sourcePackageId = PackageIdentifier {pkgName = PackageName "binary", pkgVersion = Version {versionBranch = [0,5,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Lennart Kolmodin, Don Stewart <dons@galois.com>", author = "Lennart Kolmodin <kolmodin@dtek.chalmers.se>", stability = "provisional", homepage = "http://code.haskell.org/binary/", pkgUrl = "", synopsis = "", description = "Efficient, pure binary serialisation using lazy ByteStrings.\nHaskell values may be encoded to and from binary formats,\nwritten to disk as binary, or sent over the network.\nSerialisation speeds of over 1 G\\/sec have been observed,\nso this library should be suitable for high performance\nscenarios.", category = "Data, Parsing", exposed = True, exposedModules = [ModuleName ["Data","Binary"],ModuleName ["Data","Binary","Put"],ModuleName ["Data","Binary","Get"],ModuleName ["Data","Binary","Builder"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/binary-0.5.0.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/binary-0.5.0.2"], hsLibraries = ["HSbinary-0.5.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/binary-0.5.0.2/html/binary.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/binary-0.5.0.2/html"]}])]),(PackageName "bytestring",fromList [(Version {versionBranch = [0,9,1,10], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1", sourcePackageId = PackageIdentifier {pkgName = PackageName "bytestring", pkgVersion = Version {versionBranch = [0,9,1,10], versionTags = []}}, license = BSD3, copyright = "Copyright (c) Don Stewart   2005-2009,\n(c) Duncan Coutts 2006-2009,\n(c) David Roundy  2003-2005.", maintainer = "dons@galois.com, duncan@haskell.org", author = "Don Stewart, Duncan Coutts", stability = "", homepage = "http://www.cse.unsw.edu.au/~dons/fps.html", pkgUrl = "", synopsis = "", description = "A time and space-efficient implementation of byte vectors using\npacked Word8 arrays, suitable for high performance use, both in terms\nof large data quantities, or high speed requirements. Byte vectors\nare encoded as strict 'Word8' arrays of bytes, and lazy lists of\nstrict chunks, held in a 'ForeignPtr', and can be passed between C\nand Haskell with little effort.\n\nTest coverage data for this library is available at:\n<http://code.haskell.org/~dons/tests/bytestring/hpc_index.html>", category = "Data", exposed = True, exposedModules = [ModuleName ["Data","ByteString"],ModuleName ["Data","ByteString","Char8"],ModuleName ["Data","ByteString","Unsafe"],ModuleName ["Data","ByteString","Internal"],ModuleName ["Data","ByteString","Lazy"],ModuleName ["Data","ByteString","Lazy","Char8"],ModuleName ["Data","ByteString","Lazy","Internal"],ModuleName ["Data","ByteString","Fusion"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/bytestring-0.9.1.10"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/bytestring-0.9.1.10"], hsLibraries = ["HSbytestring-0.9.1.10"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/bytestring-0.9.1.10/include"], includes = ["fpstring.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/bytestring-0.9.1.10/bytestring.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/bytestring-0.9.1.10"]}])]),(PackageName "cmdlib",fromList [(Version {versionBranch = [0,3,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "cmdlib-0.3.3-b129826ff596e08d3a82f0f658aa48fb", sourcePackageId = PackageIdentifier {pkgName = PackageName "cmdlib", pkgVersion = Version {versionBranch = [0,3,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "me@mornfall.net", author = "Petr Rockai", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "A commandline parsing library, based on getopt. Comes with a\npowerful attribute system. Supports complex interfaces with many\noptions and commands, with option & command grouping, with simple\nand convenient API. Even though quite powerful, it strives to keep\nsimple things simple. The library uses \"System.Console.GetOpt\" as\nits backend.\n\nIn comparison to the other commandline handling libraries:\n\nCompared to cmdargs, cmdlib has a pure attribute system and is\nbased on GetOpt for help formatting & argument parsing. Cmdlib may\nalso be more extendable due to typeclass design, and can use\nuser-supplied types for option arguments.\n\nCmdargs >= 0.4 can optionally use a pure attribute system,\nalthough this is clearly an add-on and the API is a second-class\ncitizen in relation to the impure version.\n\nGetOpt and parseargs both require explicit flag representation, so\nthey live a level below cmdlib. GetOpt is in fact used as a\nbackend by cmdlib.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Console","CmdLib"]], hiddenModules = [ModuleName ["System","Console","CmdLib","Attribute"],ModuleName ["System","Console","CmdLib","Flag"],ModuleName ["System","Console","CmdLib","Command"],ModuleName ["System","Console","CmdLib","ADTs"],ModuleName ["System","Console","CmdLib","Record"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/cmdlib-0.3.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/cmdlib-0.3.3"], hsLibraries = ["HScmdlib-0.3.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",InstalledPackageId "split-0.1.4-4cdf09209f5cdfad041512f4da77b459",InstalledPackageId "syb-0.3.2-7bcfe6bded2b7e8d9901b1793580d5db"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/cmdlib-0.3.3/html/cmdlib.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/cmdlib-0.3.3/html"]}])]),(PackageName "containers",fromList [(Version {versionBranch = [0,4,0,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e", sourcePackageId = PackageIdentifier {pkgName = PackageName "containers", pkgVersion = Version {versionBranch = [0,4,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package contains efficient general-purpose implementations\nof various basic immutable container types.  The declared cost of\neach operation is either worst-case or amortized, but remains\nvalid even if structures are shared.", category = "Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Graph"],ModuleName ["Data","Sequence"],ModuleName ["Data","Tree"],ModuleName ["Data","IntMap"],ModuleName ["Data","IntSet"],ModuleName ["Data","Map"],ModuleName ["Data","Set"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/containers-0.4.0.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/containers-0.4.0.0"], hsLibraries = ["HScontainers-0.4.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/containers-0.4.0.0/containers.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/containers-0.4.0.0"]}])]),(PackageName "dataenc",fromList [(Version {versionBranch = [0,14], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "dataenc-0.14-0bef7a1d7c7f4b0b442f08b6daa031c8", sourcePackageId = PackageIdentifier {pkgName = PackageName "dataenc", pkgVersion = Version {versionBranch = [0,14], versionTags = []}}, license = BSD3, copyright = "Magnus Therning, 2007-2011", maintainer = "magnus@therning.org", author = "Magnus Therning", stability = "", homepage = "http://www.haskell.org/haskellwiki/Library/Data_encoding", pkgUrl = "", synopsis = "", description = "Data encoding library currently providing Base16, Base32,\nBase32Hex, Base64, Base64Url, Base85, Python string escaping,\nQuoted-Printable, URL encoding, uuencode, xxencode, and yEncoding.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Binary","Base16"],ModuleName ["Codec","Binary","Base32"],ModuleName ["Codec","Binary","Base32Hex"],ModuleName ["Codec","Binary","Base64"],ModuleName ["Codec","Binary","Base64Url"],ModuleName ["Codec","Binary","Base85"],ModuleName ["Codec","Binary","DataEncoding"],ModuleName ["Codec","Binary","PythonString"],ModuleName ["Codec","Binary","QuotedPrintable"],ModuleName ["Codec","Binary","Url"],ModuleName ["Codec","Binary","Uu"],ModuleName ["Codec","Binary","Xx"],ModuleName ["Codec","Binary","Yenc"]], hiddenModules = [ModuleName ["Codec","Binary","Util"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/dataenc-0.14"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/dataenc-0.14"], hsLibraries = ["HSdataenc-0.14"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/dataenc-0.14/html/dataenc.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/dataenc-0.14/html"]}])]),(PackageName "deepseq",fromList [(Version {versionBranch = [1,1,0,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "deepseq-1.1.0.2-09b3aed0c4982bbc6569c668100876fa", sourcePackageId = PackageIdentifier {pkgName = PackageName "deepseq", pkgVersion = Version {versionBranch = [1,1,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides methods for fully evaluating data structures\n(\\\"deep evaluation\\\"). Deep evaluation is often used for adding\nstrictness to a program, e.g. in order to force pending exceptions,\nremove space leaks, or force lazy I/O to happen. It is also useful\nin parallel programs, to ensure pending work does not migrate to the\nwrong thread.\n\nThe primary use of this package is via the 'deepseq' function, a\n\\\"deep\\\" version of 'seq'. It is implemented on top of an 'NFData'\ntypeclass (\\\"Normal Form Data\\\", data structures with no unevaluated\ncomponents) which defines strategies for fully evaluating different\ndata types.", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","DeepSeq"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/deepseq-1.1.0.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/deepseq-1.1.0.2"], hsLibraries = ["HSdeepseq-1.1.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/deepseq-1.1.0.2/html/deepseq.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/deepseq-1.1.0.2/html"]}])]),(PackageName "directory",fromList [(Version {versionBranch = [1,1,0,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f", sourcePackageId = PackageIdentifier {pkgName = PackageName "directory", pkgVersion = Version {versionBranch = [1,1,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides a library for handling directories.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Directory"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/directory-1.1.0.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/directory-1.1.0.0"], hsLibraries = ["HSdirectory-1.1.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/directory-1.1.0.0/include"], includes = ["HsDirectory.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageId "old-time-1.0.0.6-37d6575186c36059fbc372c289dbddd4",InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/directory-1.1.0.0/directory.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/directory-1.1.0.0"]}])]),(PackageName "extensible-exceptions",fromList [(Version {versionBranch = [0,1,1,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831", sourcePackageId = PackageIdentifier {pkgName = PackageName "extensible-exceptions", pkgVersion = Version {versionBranch = [0,1,1,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides extensible exceptions for both new and\nold versions of GHC (i.e., < 6.10).", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","Exception","Extensible"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/extensible-exceptions-0.1.1.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/extensible-exceptions-0.1.1.2"], hsLibraries = ["HSextensible-exceptions-0.1.1.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/extensible-exceptions-0.1.1.2/extensible-exceptions.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/extensible-exceptions-0.1.1.2"]}])]),(PackageName "ffi",fromList [(Version {versionBranch = [1,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "builtin_ffi", sourcePackageId = PackageIdentifier {pkgName = PackageName "ffi", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "glasgow-haskell-users@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "", category = "", exposed = True, exposedModules = [], hiddenModules = [], trusted = False, importDirs = [], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4"], hsLibraries = ["HSffi"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/include"], includes = [], depends = [], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = [], haddockHTMLs = []}])]),(PackageName "filepath",fromList [(Version {versionBranch = [1,2,0,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4", sourcePackageId = PackageIdentifier {pkgName = PackageName "filepath", pkgVersion = Version {versionBranch = [1,2,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "", author = "Neil Mitchell", stability = "", homepage = "http://www-users.cs.york.ac.uk/~ndm/filepath/", pkgUrl = "", synopsis = "", description = "", category = "System", exposed = True, exposedModules = [ModuleName ["System","FilePath"],ModuleName ["System","FilePath","Posix"],ModuleName ["System","FilePath","Windows"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/filepath-1.2.0.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/filepath-1.2.0.0"], hsLibraries = ["HSfilepath-1.2.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/filepath-1.2.0.0/filepath.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/filepath-1.2.0.0"]}])]),(PackageName "ghc-prim",fromList [(Version {versionBranch = [0,2,0,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2", sourcePackageId = PackageIdentifier {pkgName = PackageName "ghc-prim", pkgVersion = Version {versionBranch = [0,2,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "GHC primitives.", category = "", exposed = True, exposedModules = [ModuleName ["GHC","Prim"],ModuleName ["GHC","Bool"],ModuleName ["GHC","Debug"],ModuleName ["GHC","Generics"],ModuleName ["GHC","Magic"],ModuleName ["GHC","Ordering"],ModuleName ["GHC","PrimopWrappers"],ModuleName ["GHC","IntWord32"],ModuleName ["GHC","IntWord64"],ModuleName ["GHC","Tuple"],ModuleName ["GHC","Types"],ModuleName ["GHC","Unit"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/ghc-prim-0.2.0.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/ghc-prim-0.2.0.0"], hsLibraries = ["HSghc-prim-0.2.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "builtin_rts"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/ghc-prim.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0"]}])]),(PackageName "hashed-storage",fromList [(Version {versionBranch = [0,5,7], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "hashed-storage-0.5.7-209e6e98f7c10343c7fc1181f2421d8e", sourcePackageId = PackageIdentifier {pkgName = PackageName "hashed-storage", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}, license = BSD3, copyright = "2009 Petr Rockai <me@mornfall.net>", maintainer = "Petr Rockai <me@mornfall.net>", author = "Petr Rockai <me@mornfall.net>", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "Support code for reading and manipulating hashed file storage\n(where each file and directory is associated with a\ncryptographic hash, for corruption-resistant storage and fast\ncomparisons).\n\nThe supported storage formats include darcs hashed pristine, a\nplain filesystem tree and an indexed plain tree (where the index\nmaintains hashes of the plain files and directories).", category = "System", exposed = True, exposedModules = [ModuleName ["Storage","Hashed"],ModuleName ["Storage","Hashed","AnchoredPath"],ModuleName ["Storage","Hashed","Index"],ModuleName ["Storage","Hashed","Monad"],ModuleName ["Storage","Hashed","Tree"],ModuleName ["Storage","Hashed","Hash"],ModuleName ["Storage","Hashed","Packed"],ModuleName ["Storage","Hashed","Plain"],ModuleName ["Storage","Hashed","Darcs"]], hiddenModules = [ModuleName ["Bundled","Posix"],ModuleName ["Bundled","SHA256"],ModuleName ["Storage","Hashed","Utils"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/hashed-storage-0.5.7"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/hashed-storage-0.5.7"], hsLibraries = ["HShashed-storage-0.5.7"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "binary-0.5.0.2-403bbefac1f83c5b5f7445fa050e39c3",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageId "dataenc-0.14-0bef7a1d7c7f4b0b442f08b6daa031c8",InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageId "mmap-0.5.7-a26fcb5c2a07acc22fe29ab256e71f9f",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",InstalledPackageId "zlib-0.5.3.1-5fbdf714525b76e0e601c2ffb25f2044"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/hashed-storage-0.5.7/html/hashed-storage.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/hashed-storage-0.5.7/html"]}])]),(PackageName "haskeline",fromList [(Version {versionBranch = [0,6,4,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "haskeline-0.6.4.0-666d47334a8ec9818526b80c10496091", sourcePackageId = PackageIdentifier {pkgName = PackageName "haskeline", pkgVersion = Version {versionBranch = [0,6,4,0], versionTags = []}}, license = BSD3, copyright = "(c) Judah Jacobson", maintainer = "Judah Jacobson <judah.jacobson@gmail.com>", author = "Judah Jacobson", stability = "Experimental", homepage = "http://trac.haskell.org/haskeline", pkgUrl = "", synopsis = "", description = "Haskeline provides a user interface for line input in command-line\nprograms.  This library is similar in purpose to readline, but since\nit is written in Haskell it is (hopefully) more easily used in other\nHaskell programs.\n\nHaskeline runs both on POSIX-compatible systems and on Windows.", category = "User Interfaces", exposed = True, exposedModules = [ModuleName ["System","Console","Haskeline"],ModuleName ["System","Console","Haskeline","Completion"],ModuleName ["System","Console","Haskeline","Encoding"],ModuleName ["System","Console","Haskeline","MonadException"],ModuleName ["System","Console","Haskeline","History"],ModuleName ["System","Console","Haskeline","IO"]], hiddenModules = [ModuleName ["System","Console","Haskeline","Backend","Terminfo"],ModuleName ["System","Console","Haskeline","Backend","WCWidth"],ModuleName ["System","Console","Haskeline","Backend","Posix"],ModuleName ["System","Console","Haskeline","Backend","IConv"],ModuleName ["System","Console","Haskeline","Backend","DumbTerm"],ModuleName ["System","Console","Haskeline","Backend"],ModuleName ["System","Console","Haskeline","Command"],ModuleName ["System","Console","Haskeline","Command","Completion"],ModuleName ["System","Console","Haskeline","Command","History"],ModuleName ["System","Console","Haskeline","Command","KillRing"],ModuleName ["System","Console","Haskeline","Directory"],ModuleName ["System","Console","Haskeline","Emacs"],ModuleName ["System","Console","Haskeline","InputT"],ModuleName ["System","Console","Haskeline","Key"],ModuleName ["System","Console","Haskeline","LineState"],ModuleName ["System","Console","Haskeline","Monads"],ModuleName ["System","Console","Haskeline","Prefs"],ModuleName ["System","Console","Haskeline","RunCommand"],ModuleName ["System","Console","Haskeline","Term"],ModuleName ["System","Console","Haskeline","Command","Undo"],ModuleName ["System","Console","Haskeline","Vi"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/haskeline-0.6.4.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/haskeline-0.6.4.0"], hsLibraries = ["HShaskeline-0.6.4.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/haskeline-0.6.4.0/include"], includes = ["h_iconv.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",InstalledPackageId "terminfo-0.3.1.3-ac8ae791e59af4b07646e3465163bc35",InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1",InstalledPackageId "utf8-string-0.3.6-1c65e01135581c7189781d69090906b2"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/haskeline-0.6.4.0/html/haskeline.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/haskeline-0.6.4.0/html"]}])]),(PackageName "hostname",fromList [(Version {versionBranch = [1,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "hostname-1.0-5bb472a8c4e44fdb66860bfca220e074", sourcePackageId = PackageIdentifier {pkgName = PackageName "hostname", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "", category = "Network", exposed = True, exposedModules = [ModuleName ["Network","HostName"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/hostname-1.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/hostname-1.0"], hsLibraries = ["HShostname-1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/hostname-1.0/html/hostname.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/hostname-1.0/html"]}])]),(PackageName "html",fromList [(Version {versionBranch = [1,0,1,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "html-1.0.1.2-a494249f98a0f38b1a8db28bc70f8b0b", sourcePackageId = PackageIdentifier {pkgName = PackageName "html", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package contains a combinator library for constructing\nHTML documents.", category = "Web", exposed = True, exposedModules = [ModuleName ["Text","Html"],ModuleName ["Text","Html","BlockTable"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/html-1.0.1.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/html-1.0.1.2"], hsLibraries = ["HShtml-1.0.1.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/html-1.0.1.2/html/html.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/html-1.0.1.2/html"]}])]),(PackageName "integer-gmp",fromList [(Version {versionBranch = [0,2,0,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "integer-gmp-0.2.0.3-91607778cf3ae8f3948a50062b4f8479", sourcePackageId = PackageIdentifier {pkgName = PackageName "integer-gmp", pkgVersion = Version {versionBranch = [0,2,0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package contains an Integer library based on GMP.", category = "", exposed = True, exposedModules = [ModuleName ["GHC","Integer"],ModuleName ["GHC","Integer","GMP","Internals"]], hiddenModules = [ModuleName ["GHC","Integer","Type"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/integer-gmp-0.2.0.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/integer-gmp-0.2.0.3"], hsLibraries = ["HSinteger-gmp-0.2.0.3"], extraLibraries = ["gmp"], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/integer-gmp-0.2.0.3/integer-gmp.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/integer-gmp-0.2.0.3"]}])]),(PackageName "mmap",fromList [(Version {versionBranch = [0,5,7], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "mmap-0.5.7-a26fcb5c2a07acc22fe29ab256e71f9f", sourcePackageId = PackageIdentifier {pkgName = PackageName "mmap", pkgVersion = Version {versionBranch = [0,5,7], versionTags = []}}, license = BSD3, copyright = "2008, Gracjan Polak", maintainer = "Gracjan Polak <gracjanpolak@gmail.com>", author = "Gracjan Polak <gracjanpolak@gmail.com>", stability = "alpha", homepage = "", pkgUrl = "", synopsis = "", description = "This library provides a wrapper to mmap(2) or MapViewOfFile,\nallowing files or devices to be lazily loaded into memory as\nstrict or lazy ByteStrings, ForeignPtrs or plain Ptrs, using\nthe virtual memory subsystem to do on-demand loading.\nModifications are also supported.", category = "System", exposed = True, exposedModules = [ModuleName ["System","IO","MMap"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/mmap-0.5.7"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/mmap-0.5.7"], hsLibraries = ["HSmmap-0.5.7"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/mmap-0.5.7/html/mmap.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/mmap-0.5.7/html"]}])]),(PackageName "mtl",fromList [(Version {versionBranch = [2,0,1,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2", sourcePackageId = PackageIdentifier {pkgName = PackageName "mtl", pkgVersion = Version {versionBranch = [2,0,1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "Andy Gill", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "Monad classes using functional dependencies, with instances\nfor various monad transformers, inspired by the paper\n/Functional Programming with Overloading and Higher-Order Polymorphism/,\nby Mark P Jones, in /Advanced School of Functional Programming/, 1995\n(<http://web.cecs.pdx.edu/~mpj/pubs/springschool.html>).", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","Monad","Cont"],ModuleName ["Control","Monad","Cont","Class"],ModuleName ["Control","Monad","Error"],ModuleName ["Control","Monad","Error","Class"],ModuleName ["Control","Monad","Identity"],ModuleName ["Control","Monad","List"],ModuleName ["Control","Monad","RWS"],ModuleName ["Control","Monad","RWS","Class"],ModuleName ["Control","Monad","RWS","Lazy"],ModuleName ["Control","Monad","RWS","Strict"],ModuleName ["Control","Monad","Reader"],ModuleName ["Control","Monad","Reader","Class"],ModuleName ["Control","Monad","State"],ModuleName ["Control","Monad","State","Class"],ModuleName ["Control","Monad","State","Lazy"],ModuleName ["Control","Monad","State","Strict"],ModuleName ["Control","Monad","Trans"],ModuleName ["Control","Monad","Writer"],ModuleName ["Control","Monad","Writer","Class"],ModuleName ["Control","Monad","Writer","Lazy"],ModuleName ["Control","Monad","Writer","Strict"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/mtl-2.0.1.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/mtl-2.0.1.0"], hsLibraries = ["HSmtl-2.0.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "transformers-0.2.2.0-a8a2dbba7d96131db605cf631ea0c8c4"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/mtl-2.0.1.0/html/mtl.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/mtl-2.0.1.0/html"]}])]),(PackageName "network",fromList [(Version {versionBranch = [2,3,0,4], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "network-2.3.0.4-3ac6bb38978a0758e807f7956decb2f2", sourcePackageId = PackageIdentifier {pkgName = PackageName "network", pkgVersion = Version {versionBranch = [2,3,0,4], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Johan Tibell <johan.tibell@gmail.com>", author = "", stability = "", homepage = "http://github.com/haskell/network", pkgUrl = "", synopsis = "", description = "Low-level networking interface", category = "Network", exposed = True, exposedModules = [ModuleName ["Network"],ModuleName ["Network","BSD"],ModuleName ["Network","Socket"],ModuleName ["Network","Socket","ByteString"],ModuleName ["Network","Socket","ByteString","Lazy"],ModuleName ["Network","Socket","Internal"],ModuleName ["Network","URI"]], hiddenModules = [ModuleName ["Network","Socket","ByteString","IOVec"],ModuleName ["Network","Socket","ByteString","MsgHdr"],ModuleName ["Network","Socket","ByteString","Internal"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/network-2.3.0.4"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/network-2.3.0.4"], hsLibraries = ["HSnetwork-2.3.0.4"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/network-2.3.0.4/include"], includes = ["HsNet.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "parsec-3.1.1-9ad7689ce68f46e0751207509e882c5b",InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/network-2.3.0.4/html/network.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/network-2.3.0.4/html"]}])]),(PackageName "old-locale",fromList [(Version {versionBranch = [1,0,0,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "old-locale-1.0.0.2-6e2a3c0744e8cf4e0ac2d4e58659f7b5", sourcePackageId = PackageIdentifier {pkgName = PackageName "old-locale", pkgVersion = Version {versionBranch = [1,0,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides the old locale library.\nFor new code, the new locale library is recommended.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Locale"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/old-locale-1.0.0.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/old-locale-1.0.0.2"], hsLibraries = ["HSold-locale-1.0.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/old-locale-1.0.0.2/old-locale.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/old-locale-1.0.0.2"]}])]),(PackageName "old-time",fromList [(Version {versionBranch = [1,0,0,6], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "old-time-1.0.0.6-37d6575186c36059fbc372c289dbddd4", sourcePackageId = PackageIdentifier {pkgName = PackageName "old-time", pkgVersion = Version {versionBranch = [1,0,0,6], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides the old time library.\nFor new code, the new time library is recommended.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Time"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/old-time-1.0.0.6"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/old-time-1.0.0.6"], hsLibraries = ["HSold-time-1.0.0.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/old-time-1.0.0.6/include"], includes = ["HsTime.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "old-locale-1.0.0.2-6e2a3c0744e8cf4e0ac2d4e58659f7b5"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/old-time-1.0.0.6/old-time.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/old-time-1.0.0.6"]}])]),(PackageName "parsec",fromList [(Version {versionBranch = [3,1,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "parsec-3.1.1-9ad7689ce68f46e0751207509e882c5b", sourcePackageId = PackageIdentifier {pkgName = PackageName "parsec", pkgVersion = Version {versionBranch = [3,1,1], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Antoine Latter <aslatter@gmail.com>", author = "Daan Leijen <daan@microsoft.com>, Paolo Martini <paolo@nemail.it>", stability = "", homepage = "http://www.cs.uu.nl/~daan/parsec.html", pkgUrl = "", synopsis = "", description = "Parsec is designed from scratch as an industrial-strength parser\nlibrary.  It is simple, safe, well documented (on the package\nhomepage), has extensive libraries and good error messages,\nand is also fast.  It is defined as a monad transformer that can be\nstacked on arbitrary monads, and it is also parametric in the\ninput stream type.", category = "Parsing", exposed = True, exposedModules = [ModuleName ["Text","Parsec"],ModuleName ["Text","Parsec","String"],ModuleName ["Text","Parsec","ByteString"],ModuleName ["Text","Parsec","ByteString","Lazy"],ModuleName ["Text","Parsec","Pos"],ModuleName ["Text","Parsec","Error"],ModuleName ["Text","Parsec","Prim"],ModuleName ["Text","Parsec","Char"],ModuleName ["Text","Parsec","Combinator"],ModuleName ["Text","Parsec","Token"],ModuleName ["Text","Parsec","Expr"],ModuleName ["Text","Parsec","Language"],ModuleName ["Text","Parsec","Perm"],ModuleName ["Text","ParserCombinators","Parsec"],ModuleName ["Text","ParserCombinators","Parsec","Char"],ModuleName ["Text","ParserCombinators","Parsec","Combinator"],ModuleName ["Text","ParserCombinators","Parsec","Error"],ModuleName ["Text","ParserCombinators","Parsec","Expr"],ModuleName ["Text","ParserCombinators","Parsec","Language"],ModuleName ["Text","ParserCombinators","Parsec","Perm"],ModuleName ["Text","ParserCombinators","Parsec","Pos"],ModuleName ["Text","ParserCombinators","Parsec","Prim"],ModuleName ["Text","ParserCombinators","Parsec","Token"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/parsec-3.1.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/parsec-3.1.1"], hsLibraries = ["HSparsec-3.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/parsec-3.1.1/html/parsec.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/parsec-3.1.1/html"]}])]),(PackageName "pretty",fromList [(Version {versionBranch = [1,0,1,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "pretty-1.0.1.2-abc7c632374e50e1c1927987c2651f0f", sourcePackageId = PackageIdentifier {pkgName = PackageName "pretty", pkgVersion = Version {versionBranch = [1,0,1,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package contains John Hughes's pretty-printing library,\nheavily modified by Simon Peyton Jones.", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","PrettyPrint"],ModuleName ["Text","PrettyPrint","HughesPJ"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/pretty-1.0.1.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/pretty-1.0.1.2"], hsLibraries = ["HSpretty-1.0.1.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/pretty-1.0.1.2/pretty.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/pretty-1.0.1.2"]}])]),(PackageName "primitive",fromList [(Version {versionBranch = [0,3,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "primitive-0.3.1-13f6861e052a8e08600e4045dc473931", sourcePackageId = PackageIdentifier {pkgName = PackageName "primitive", pkgVersion = Version {versionBranch = [0,3,1], versionTags = []}}, license = BSD3, copyright = "(c) Roman Leshchinskiy 2009-2010", maintainer = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", author = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", stability = "", homepage = "http://code.haskell.org/primitive", pkgUrl = "", synopsis = "", description = ".\nThis package provides wrappers for primitive array operations from\nGHC.Prim.", category = "Data", exposed = True, exposedModules = [ModuleName ["Control","Monad","Primitive"],ModuleName ["Data","Primitive"],ModuleName ["Data","Primitive","MachDeps"],ModuleName ["Data","Primitive","Types"],ModuleName ["Data","Primitive","Array"],ModuleName ["Data","Primitive","ByteArray"],ModuleName ["Data","Primitive","Addr"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/primitive-0.3.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/primitive-0.3.1"], hsLibraries = ["HSprimitive-0.3.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/primitive-0.3.1/include"], includes = ["primitive-memops.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/primitive-0.3.1/html/primitive.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/primitive-0.3.1/html"]}])]),(PackageName "process",fromList [(Version {versionBranch = [1,0,1,5], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "process-1.0.1.5-4cab1bf0666275ac101dd48c7565b64c", sourcePackageId = PackageIdentifier {pkgName = PackageName "process", pkgVersion = Version {versionBranch = [1,0,1,5], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package contains libraries for dealing with system processes.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Process","Internals"],ModuleName ["System","Process"],ModuleName ["System","Cmd"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/process-1.0.1.5"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/process-1.0.1.5"], hsLibraries = ["HSprocess-1.0.1.5"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/process-1.0.1.5/include"], includes = ["runProcess.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/process-1.0.1.5/process.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/process-1.0.1.5"]}])]),(PackageName "random",fromList [(Version {versionBranch = [1,0,0,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "random-1.0.0.3-57524486875e0c4c260dd22788921013", sourcePackageId = PackageIdentifier {pkgName = PackageName "random", pkgVersion = Version {versionBranch = [1,0,0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides a random number library.", category = "System", exposed = True, exposedModules = [ModuleName ["System","Random"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/random-1.0.0.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/random-1.0.0.3"], hsLibraries = ["HSrandom-1.0.0.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "time-1.2.0.3-57ebba2cc05370f666b7eceba5e468a9"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/random-1.0.0.3/random.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/random-1.0.0.3"]}])]),(PackageName "regex-base",fromList [(Version {versionBranch = [0,93,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "regex-base-0.93.2-9e1b027c41dbec856469a30982495bb9", sourcePackageId = PackageIdentifier {pkgName = PackageName "regex-base", pkgVersion = Version {versionBranch = [0,93,2], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2006, Christopher Kuklewicz", maintainer = "TextRegexLazy@personal.mightyreason.com", author = "Christopher Kuklewicz", stability = "Seems to work, passes a few tests", homepage = "http://sourceforge.net/projects/lazy-regex", pkgUrl = "http://darcs.haskell.org/packages/regex-unstable/regex-base/", synopsis = "", description = "Interface API for regex-posix,pcre,parsec,tdfa,dfa", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","Regex","Base"],ModuleName ["Text","Regex","Base","RegexLike"],ModuleName ["Text","Regex","Base","Context"],ModuleName ["Text","Regex","Base","Impl"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/regex-base-0.93.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/regex-base-0.93.2"], hsLibraries = ["HSregex-base-0.93.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/regex-base-0.93.2/html/regex-base.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/regex-base-0.93.2/html"]}])]),(PackageName "regex-compat",fromList [(Version {versionBranch = [0,95,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "regex-compat-0.95.1-55ae1a721bfd43f57655a2c250a4ba9a", sourcePackageId = PackageIdentifier {pkgName = PackageName "regex-compat", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2006, Christopher Kuklewicz", maintainer = "TextRegexLazy@personal.mightyreason.com", author = "Christopher Kuklewicz", stability = "Seems to work, passes a few tests", homepage = "http://sourceforge.net/projects/lazy-regex", pkgUrl = "http://darcs.haskell.org/packages/regex-unstable/regex-compat/", synopsis = "", description = "One module layer over regex-posix to replace Text.Regex", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","Regex"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/regex-compat-0.95.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/regex-compat-0.95.1"], hsLibraries = ["HSregex-compat-0.95.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "regex-base-0.93.2-9e1b027c41dbec856469a30982495bb9",InstalledPackageId "regex-posix-0.95.1-c9111d928f58a8f00b048fd522aed393"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/regex-compat-0.95.1/html/regex-compat.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/regex-compat-0.95.1/html"]}])]),(PackageName "regex-posix",fromList [(Version {versionBranch = [0,95,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "regex-posix-0.95.1-c9111d928f58a8f00b048fd522aed393", sourcePackageId = PackageIdentifier {pkgName = PackageName "regex-posix", pkgVersion = Version {versionBranch = [0,95,1], versionTags = []}}, license = BSD3, copyright = "Copyright (c) 2007-2010, Christopher Kuklewicz", maintainer = "TextRegexLazy@personal.mightyreason.com", author = "Christopher Kuklewicz", stability = "Seems to work, passes a few tests", homepage = "http://sourceforge.net/projects/lazy-regex", pkgUrl = "http://code.haskell.org/regex-posix/", synopsis = "", description = "The posix regex backend for regex-base", category = "Text", exposed = True, exposedModules = [ModuleName ["Text","Regex","Posix"],ModuleName ["Text","Regex","Posix","Wrap"],ModuleName ["Text","Regex","Posix","String"],ModuleName ["Text","Regex","Posix","Sequence"],ModuleName ["Text","Regex","Posix","ByteString"],ModuleName ["Text","Regex","Posix","ByteString","Lazy"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/regex-posix-0.95.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/regex-posix-0.95.1"], hsLibraries = ["HSregex-posix-0.95.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageId "regex-base-0.93.2-9e1b027c41dbec856469a30982495bb9"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/regex-posix-0.95.1/html/regex-posix.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/regex-posix-0.95.1/html"]}])]),(PackageName "rts",fromList [(Version {versionBranch = [1,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "builtin_rts", sourcePackageId = PackageIdentifier {pkgName = PackageName "rts", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "glasgow-haskell-users@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "", category = "", exposed = True, exposedModules = [], hiddenModules = [], trusted = False, importDirs = [], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4"], hsLibraries = ["HSrts"], extraLibraries = ["m","rt","dl"], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/include"], includes = ["Stg.h"], depends = [InstalledPackageId "builtin_ffi"], hugsOptions = [], ccOptions = [], ldOptions = ["-u","ghczmprim_GHCziTypes_Izh_static_info","-u","ghczmprim_GHCziTypes_Czh_static_info","-u","ghczmprim_GHCziTypes_Fzh_static_info","-u","ghczmprim_GHCziTypes_Dzh_static_info","-u","base_GHCziPtr_Ptr_static_info","-u","base_GHCziWord_Wzh_static_info","-u","base_GHCziInt_I8zh_static_info","-u","base_GHCziInt_I16zh_static_info","-u","base_GHCziInt_I32zh_static_info","-u","base_GHCziInt_I64zh_static_info","-u","base_GHCziWord_W8zh_static_info","-u","base_GHCziWord_W16zh_static_info","-u","base_GHCziWord_W32zh_static_info","-u","base_GHCziWord_W64zh_static_info","-u","base_GHCziStable_StablePtr_static_info","-u","ghczmprim_GHCziTypes_Izh_con_info","-u","ghczmprim_GHCziTypes_Czh_con_info","-u","ghczmprim_GHCziTypes_Fzh_con_info","-u","ghczmprim_GHCziTypes_Dzh_con_info","-u","base_GHCziPtr_Ptr_con_info","-u","base_GHCziPtr_FunPtr_con_info","-u","base_GHCziStable_StablePtr_con_info","-u","ghczmprim_GHCziBool_False_closure","-u","ghczmprim_GHCziBool_True_closure","-u","base_GHCziPack_unpackCString_closure","-u","base_GHCziIOziException_stackOverflow_closure","-u","base_GHCziIOziException_heapOverflow_closure","-u","base_ControlziExceptionziBase_nonTermination_closure","-u","base_GHCziIOziException_blockedIndefinitelyOnMVar_closure","-u","base_GHCziIOziException_blockedIndefinitelyOnSTM_closure","-u","base_ControlziExceptionziBase_nestedAtomically_closure","-u","base_GHCziWeak_runFinalizzerBatch_closure","-u","base_GHCziTopHandler_runIO_closure","-u","base_GHCziTopHandler_runNonIO_closure","-u","base_GHCziConcziIO_ensureIOManagerIsRunning_closure","-u","base_GHCziConcziSync_runSparks_closure","-u","base_GHCziConcziSignal_runHandlers_closure"], frameworkDirs = [], frameworks = [], haddockInterfaces = [], haddockHTMLs = []}])]),(PackageName "shellish",fromList [(Version {versionBranch = [0,1,4], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "shellish-0.1.4-59e9bb189ba13277e9b8c1aa6ac88e81", sourcePackageId = PackageIdentifier {pkgName = PackageName "shellish", pkgVersion = Version {versionBranch = [0,1,4], versionTags = []}}, license = BSD3, copyright = "", maintainer = "me@mornfall.net", author = "Petr Rockai <me@mornfall.net>", stability = "", homepage = "http://repos.mornfall.net/shellish", pkgUrl = "", synopsis = "", description = "The shellisg package provides a single module for convenient\n\\\"systems\\\" programming in Haskell, similar in spirit to POSIX\nshells or PERL.\n\n* Elegance and safety is sacrificed for conciseness and\nswiss-army-knife-ness.\n\n* The interface exported by Shellish is thread-safe.\n\nOverall, the module should help you to get a job done quickly,\nwithout getting too dirty.", category = "Development", exposed = True, exposedModules = [ModuleName ["Shellish"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/shellish-0.1.4"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/shellish-0.1.4"], hsLibraries = ["HSshellish-0.1.4"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageId "mtl-2.0.1.0-9763a8821c812a910d327bad2c0d23b2",InstalledPackageId "process-1.0.1.5-4cab1bf0666275ac101dd48c7565b64c",InstalledPackageId "strict-0.3.2-d58e13203cf4a9369ea12ab257573cb7",InstalledPackageId "time-1.2.0.3-57ebba2cc05370f666b7eceba5e468a9",InstalledPackageId "unix-compat-0.2.1.3-2f4e56f2b420caf208cd3230e61645ab"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/shellish-0.1.4/html/shellish.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/shellish-0.1.4/html"]}])]),(PackageName "split",fromList [(Version {versionBranch = [0,1,4], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "split-0.1.4-4cdf09209f5cdfad041512f4da77b459", sourcePackageId = PackageIdentifier {pkgName = PackageName "split", pkgVersion = Version {versionBranch = [0,1,4], versionTags = []}}, license = BSD3, copyright = "", maintainer = "byorgey@cis.upenn.edu", author = "Brent Yorgey", stability = "stable", homepage = "http://code.haskell.org/~byorgey/code/split", pkgUrl = "", synopsis = "", description = "Combinator library and utility functions for splitting lists.", category = "List", exposed = True, exposedModules = [ModuleName ["Data","List","Split"],ModuleName ["Data","List","Split","Internals"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/split-0.1.4"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/split-0.1.4"], hsLibraries = ["HSsplit-0.1.4"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/split-0.1.4/html/split.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/split-0.1.4/html"]}])]),(PackageName "strict",fromList [(Version {versionBranch = [0,3,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "strict-0.3.2-d58e13203cf4a9369ea12ab257573cb7", sourcePackageId = PackageIdentifier {pkgName = PackageName "strict", pkgVersion = Version {versionBranch = [0,3,2], versionTags = []}}, license = BSD3, copyright = "(c) 2006-2007 by Roman Leshchinskiy", maintainer = "Don Stewart <dons@galois.com>", author = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", stability = "", homepage = "http://www.cse.unsw.edu.au/~rl/code/strict.html", pkgUrl = "", synopsis = "", description = "This package provides strict versions of some standard Haskell data\ntypes (pairs, Maybe and Either). It also contains strict IO\noperations.", category = "Data, System", exposed = True, exposedModules = [ModuleName ["Data","Strict","Tuple"],ModuleName ["Data","Strict","Maybe"],ModuleName ["Data","Strict","Either"],ModuleName ["Data","Strict"],ModuleName ["System","IO","Strict"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/strict-0.3.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/strict-0.3.2"], hsLibraries = ["HSstrict-0.3.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/strict-0.3.2/html/strict.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/strict-0.3.2/html"]}])]),(PackageName "syb",fromList [(Version {versionBranch = [0,3,2], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "syb-0.3.2-7bcfe6bded2b7e8d9901b1793580d5db", sourcePackageId = PackageIdentifier {pkgName = PackageName "syb", pkgVersion = Version {versionBranch = [0,3,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "generics@haskell.org", author = "Ralf Lammel, Simon Peyton Jones", stability = "provisional", homepage = "http://www.cs.uu.nl/wiki/GenericProgramming/SYB", pkgUrl = "", synopsis = "", description = "This package contains the generics system described in the\n/Scrap Your Boilerplate/ papers (see\n<http://www.cs.uu.nl/wiki/GenericProgramming/SYB>).\nIt defines the @Data@ class of types permitting folding and unfolding\nof constructor applications, instances of this class for primitive\ntypes, and a variety of traversals.", category = "Generics", exposed = True, exposedModules = [ModuleName ["Data","Generics"],ModuleName ["Data","Generics","Basics"],ModuleName ["Data","Generics","Instances"],ModuleName ["Data","Generics","Aliases"],ModuleName ["Data","Generics","Schemes"],ModuleName ["Data","Generics","Text"],ModuleName ["Data","Generics","Twins"],ModuleName ["Data","Generics","Builders"],ModuleName ["Generics","SYB"],ModuleName ["Generics","SYB","Basics"],ModuleName ["Generics","SYB","Instances"],ModuleName ["Generics","SYB","Aliases"],ModuleName ["Generics","SYB","Schemes"],ModuleName ["Generics","SYB","Text"],ModuleName ["Generics","SYB","Twins"],ModuleName ["Generics","SYB","Builders"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/syb-0.3.2"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/syb-0.3.2"], hsLibraries = ["HSsyb-0.3.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/syb-0.3.2/html/syb.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/syb-0.3.2/html"]}])]),(PackageName "tar",fromList [(Version {versionBranch = [0,3,1,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "tar-0.3.1.0-40adceea7b7dde44c58982a945493d60", sourcePackageId = PackageIdentifier {pkgName = PackageName "tar", pkgVersion = Version {versionBranch = [0,3,1,0], versionTags = []}}, license = BSD3, copyright = "2007 Bjorn Bringert <bjorn@bringert.net>\n2008-2009 Duncan Coutts <duncan@haskell.org>", maintainer = "Duncan Coutts <duncan@haskell.org>", author = "Bjorn Bringert <bjorn@bringert.net>\nDuncan Coutts <duncan@haskell.org>", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This library is for working with \\\"@.tar@\\\" archive files. It\ncan read and write a range of common variations of archive\nformat including V7, USTAR, POSIX and GNU formats. It provides\nsupport for packing and unpacking portable archives. This\nmakes it suitable for distribution but not backup because\ndetails like file ownership and exact permissions are not\npreserved.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Archive","Tar"],ModuleName ["Codec","Archive","Tar","Entry"],ModuleName ["Codec","Archive","Tar","Check"]], hiddenModules = [ModuleName ["Codec","Archive","Tar","Types"],ModuleName ["Codec","Archive","Tar","Read"],ModuleName ["Codec","Archive","Tar","Write"],ModuleName ["Codec","Archive","Tar","Pack"],ModuleName ["Codec","Archive","Tar","Unpack"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/tar-0.3.1.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/tar-0.3.1.0"], hsLibraries = ["HStar-0.3.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "directory-1.1.0.0-85d1d0f9d96dffdacf64f3cc6fba6f2f",InstalledPackageId "filepath-1.2.0.0-679ac50c41ba31bfc69abf444d9852e4",InstalledPackageId "old-time-1.0.0.6-37d6575186c36059fbc372c289dbddd4"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/tar-0.3.1.0/html/tar.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/tar-0.3.1.0/html"]}])]),(PackageName "template-haskell",fromList [(Version {versionBranch = [2,5,0,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "template-haskell-2.5.0.0-f0c8f015e470d561d64a578434331367", sourcePackageId = PackageIdentifier {pkgName = PackageName "template-haskell", pkgVersion = Version {versionBranch = [2,5,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "Facilities for manipulating Haskell source code using Template Haskell.", category = "", exposed = True, exposedModules = [ModuleName ["Language","Haskell","TH","Syntax","Internals"],ModuleName ["Language","Haskell","TH","Syntax"],ModuleName ["Language","Haskell","TH","PprLib"],ModuleName ["Language","Haskell","TH","Ppr"],ModuleName ["Language","Haskell","TH","Lib"],ModuleName ["Language","Haskell","TH","Quote"],ModuleName ["Language","Haskell","TH"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/template-haskell-2.5.0.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/template-haskell-2.5.0.0"], hsLibraries = ["HStemplate-haskell-2.5.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageId "pretty-1.0.1.2-abc7c632374e50e1c1927987c2651f0f"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/template-haskell-2.5.0.0/template-haskell.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/template-haskell-2.5.0.0"]}])]),(PackageName "terminfo",fromList [(Version {versionBranch = [0,3,1,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "terminfo-0.3.1.3-ac8ae791e59af4b07646e3465163bc35", sourcePackageId = PackageIdentifier {pkgName = PackageName "terminfo", pkgVersion = Version {versionBranch = [0,3,1,3], versionTags = []}}, license = BSD3, copyright = "(c) Judah Jacobson", maintainer = "Judah Jacobson <judah.jacobson@gmail.com>", author = "Judah Jacobson", stability = "Experimental", homepage = "http://code.haskell.org/terminfo", pkgUrl = "", synopsis = "", description = "This library provides an interface to the terminfo database (via bindings to the\ncurses library).  Terminfo allows POSIX systems to interact with a variety of terminals\nusing a standard set of capabilities.", category = "User Interfaces", exposed = True, exposedModules = [ModuleName ["System","Console","Terminfo"],ModuleName ["System","Console","Terminfo","Base"],ModuleName ["System","Console","Terminfo","Cursor"],ModuleName ["System","Console","Terminfo","Color"],ModuleName ["System","Console","Terminfo","Edit"],ModuleName ["System","Console","Terminfo","Effects"],ModuleName ["System","Console","Terminfo","Keys"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/terminfo-0.3.1.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/terminfo-0.3.1.3"], hsLibraries = ["HSterminfo-0.3.1.3"], extraLibraries = ["ncurses"], extraGHCiLibraries = [], includeDirs = [], includes = ["ncurses.h","term.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/terminfo-0.3.1.3/html/terminfo.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/terminfo-0.3.1.3/html"]}])]),(PackageName "test-framework",fromList [(Version {versionBranch = [0,3,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "test-framework-0.3.3-baed105bc570d96f6735672240decba6", sourcePackageId = PackageIdentifier {pkgName = PackageName "test-framework", pkgVersion = Version {versionBranch = [0,3,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "http://batterseapower.github.com/test-framework/", pkgUrl = "", synopsis = "", description = "Allows tests such as QuickCheck properties and HUnit test cases to be assembled into test groups, run in\nparallel (but reported in deterministic order, to aid diff interpretation) and filtered and controlled by\ncommand line options. All of this comes with colored test output, progress reporting and test statistics output.", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","Framework"],ModuleName ["Test","Framework","Options"],ModuleName ["Test","Framework","Providers","API"],ModuleName ["Test","Framework","Runners","Console"],ModuleName ["Test","Framework","Runners","Options"],ModuleName ["Test","Framework","Seed"]], hiddenModules = [ModuleName ["Test","Framework","Core"],ModuleName ["Test","Framework","Improving"],ModuleName ["Test","Framework","Runners","Console","Colors"],ModuleName ["Test","Framework","Runners","Console","ProgressBar"],ModuleName ["Test","Framework","Runners","Console","Run"],ModuleName ["Test","Framework","Runners","Console","Statistics"],ModuleName ["Test","Framework","Runners","Console","Table"],ModuleName ["Test","Framework","Runners","Console","Utilities"],ModuleName ["Test","Framework","Runners","Core"],ModuleName ["Test","Framework","Runners","Processors"],ModuleName ["Test","Framework","Runners","Statistics"],ModuleName ["Test","Framework","Runners","TestPattern"],ModuleName ["Test","Framework","Runners","ThreadPool"],ModuleName ["Test","Framework","Runners","TimedConsumption"],ModuleName ["Test","Framework","Runners","XML","JUnitWriter"],ModuleName ["Test","Framework","Runners","XML"],ModuleName ["Test","Framework","Utilities"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/test-framework-0.3.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/test-framework-0.3.3"], hsLibraries = ["HStest-framework-0.3.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "ansi-terminal-0.5.5-572a1d0154fb2632bb4e9431adf0cdb1",InstalledPackageId "ansi-wl-pprint-0.6.3-20baf12c8af15109902ffbd6603448ce",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "containers-0.4.0.0-18deac99a132f04751d862b77aab136e",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "hostname-1.0-5bb472a8c4e44fdb66860bfca220e074",InstalledPackageId "old-locale-1.0.0.2-6e2a3c0744e8cf4e0ac2d4e58659f7b5",InstalledPackageId "random-1.0.0.3-57524486875e0c4c260dd22788921013",InstalledPackageId "regex-posix-0.95.1-c9111d928f58a8f00b048fd522aed393",InstalledPackageId "time-1.2.0.3-57ebba2cc05370f666b7eceba5e468a9",InstalledPackageId "xml-1.3.8-3a9c7d987d720facfe5232b2d0494f2c"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/test-framework-0.3.3/html/test-framework.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/test-framework-0.3.3/html"]}])]),(PackageName "test-framework-hunit",fromList [(Version {versionBranch = [0,2,6], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "test-framework-hunit-0.2.6-d48f373da830a4693347d5428bf55fa4", sourcePackageId = PackageIdentifier {pkgName = PackageName "test-framework-hunit", pkgVersion = Version {versionBranch = [0,2,6], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "http://batterseapower.github.com/test-framework/", pkgUrl = "", synopsis = "", description = "", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","Framework","Providers","HUnit"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/test-framework-hunit-0.2.6"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/test-framework-hunit-0.2.6"], hsLibraries = ["HStest-framework-hunit-0.2.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "HUnit-1.2.2.3-e1267035fbfcf63ba78af031f8e974a5",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "test-framework-0.3.3-baed105bc570d96f6735672240decba6"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/test-framework-hunit-0.2.6/html/test-framework-hunit.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/test-framework-hunit-0.2.6/html"]}])]),(PackageName "test-framework-quickcheck2",fromList [(Version {versionBranch = [0,2,10], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "test-framework-quickcheck2-0.2.10-45e76d2c5ec0caf49548c83c8f304ba6", sourcePackageId = PackageIdentifier {pkgName = PackageName "test-framework-quickcheck2", pkgVersion = Version {versionBranch = [0,2,10], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Max Bolingbroke <batterseapower@hotmail.com>", author = "Max Bolingbroke <batterseapower@hotmail.com>", stability = "", homepage = "http://batterseapower.github.com/test-framework/", pkgUrl = "", synopsis = "", description = "", category = "Testing", exposed = True, exposedModules = [ModuleName ["Test","Framework","Providers","QuickCheck2"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/test-framework-quickcheck2-0.2.10"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/test-framework-quickcheck2-0.2.10"], hsLibraries = ["HStest-framework-quickcheck2-0.2.10"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "QuickCheck-2.4.1.1-b24a010efafa7347b56b3001ff218a37",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "extensible-exceptions-0.1.1.2-d8c5b906654260efd7249f497d17a831",InstalledPackageId "random-1.0.0.3-57524486875e0c4c260dd22788921013",InstalledPackageId "test-framework-0.3.3-baed105bc570d96f6735672240decba6"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/test-framework-quickcheck2-0.2.10/html/test-framework-quickcheck2.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/test-framework-quickcheck2-0.2.10/html"]}])]),(PackageName "text",fromList [(Version {versionBranch = [0,11,1,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "text-0.11.1.1-ff6d7d9a492863e8bcac7b0b64d124a7", sourcePackageId = PackageIdentifier {pkgName = PackageName "text", pkgVersion = Version {versionBranch = [0,11,1,1], versionTags = []}}, license = BSD3, copyright = "2008-2009 Tom Harper, 2009-2010 Bryan O'Sullivan", maintainer = "Bryan O'Sullivan <bos@serpentine.com>\nTom Harper <rtomharper@googlemail.com>\nDuncan Coutts <duncan@haskell.org>", author = "Bryan O'Sullivan <bos@serpentine.com>", stability = "", homepage = "https://bitbucket.org/bos/text", pkgUrl = "", synopsis = "", description = ".\nAn efficient packed, immutable Unicode text type (both strict and\nlazy), with a powerful loop fusion optimization framework.\n\nThe 'Text' type represents Unicode character strings, in a time and\nspace-efficient manner. This package provides text processing\ncapabilities that are optimized for performance critical use, both\nin terms of large data quantities and high speed.\n\nThe 'Text' type provides character-encoding, type-safe case\nconversion via whole-string case conversion functions. It also\nprovides a range of functions for converting 'Text' values to and from\n'ByteStrings', using several standard encodings.\n\nEfficient locale-sensitive support for text IO is also supported.\n\nThese modules are intended to be imported qualified, to avoid name\nclashes with Prelude functions, e.g.\n\n> import qualified Data.Text as T\n\nTo use an extended and very rich family of functions for working\nwith Unicode text (including normalization, regular expressions,\nnon-standard encodings, text breaking, and locales), see\nthe @text-icu@ package:\n<http://hackage.haskell.org/package/text-icu>", category = "Data, Text", exposed = True, exposedModules = [ModuleName ["Data","Text"],ModuleName ["Data","Text","Array"],ModuleName ["Data","Text","Encoding"],ModuleName ["Data","Text","Encoding","Error"],ModuleName ["Data","Text","Foreign"],ModuleName ["Data","Text","IO"],ModuleName ["Data","Text","Internal"],ModuleName ["Data","Text","Lazy"],ModuleName ["Data","Text","Lazy","Builder"],ModuleName ["Data","Text","Lazy","Builder","Int"],ModuleName ["Data","Text","Lazy","Builder","RealFloat"],ModuleName ["Data","Text","Lazy","Encoding"],ModuleName ["Data","Text","Lazy","IO"],ModuleName ["Data","Text","Lazy","Internal"],ModuleName ["Data","Text","Lazy","Read"],ModuleName ["Data","Text","Read"]], hiddenModules = [ModuleName ["Data","Text","Encoding","Fusion"],ModuleName ["Data","Text","Encoding","Fusion","Common"],ModuleName ["Data","Text","Encoding","Utf16"],ModuleName ["Data","Text","Encoding","Utf32"],ModuleName ["Data","Text","Encoding","Utf8"],ModuleName ["Data","Text","Fusion"],ModuleName ["Data","Text","Fusion","CaseMapping"],ModuleName ["Data","Text","Fusion","Common"],ModuleName ["Data","Text","Fusion","Internal"],ModuleName ["Data","Text","Fusion","Size"],ModuleName ["Data","Text","IO","Internal"],ModuleName ["Data","Text","Lazy","Builder","Functions"],ModuleName ["Data","Text","Lazy","Builder","RealFloat","Functions"],ModuleName ["Data","Text","Lazy","Encoding","Fusion"],ModuleName ["Data","Text","Lazy","Fusion"],ModuleName ["Data","Text","Lazy","Search"],ModuleName ["Data","Text","Search"],ModuleName ["Data","Text","Unsafe"],ModuleName ["Data","Text","UnsafeChar"],ModuleName ["Data","Text","UnsafeShift"],ModuleName ["Data","Text","Util"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/text-0.11.1.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/text-0.11.1.1"], hsLibraries = ["HStext-0.11.1.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "array-0.3.0.2-ecfce597e0f16c4cd1df0e1d22fd66d4",InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1",InstalledPackageId "deepseq-1.1.0.2-09b3aed0c4982bbc6569c668100876fa",InstalledPackageId "ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2",InstalledPackageId "integer-gmp-0.2.0.3-91607778cf3ae8f3948a50062b4f8479"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/text-0.11.1.1/html/text.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/text-0.11.1.1/html"]}])]),(PackageName "time",fromList [(Version {versionBranch = [1,2,0,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "time-1.2.0.3-57ebba2cc05370f666b7eceba5e468a9", sourcePackageId = PackageIdentifier {pkgName = PackageName "time", pkgVersion = Version {versionBranch = [1,2,0,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "<ashley@semantic.org>", author = "Ashley Yakeley", stability = "stable", homepage = "http://semantic.org/TimeLib/", pkgUrl = "", synopsis = "", description = "A time library", category = "System", exposed = True, exposedModules = [ModuleName ["Data","Time","Calendar"],ModuleName ["Data","Time","Calendar","MonthDay"],ModuleName ["Data","Time","Calendar","OrdinalDate"],ModuleName ["Data","Time","Calendar","WeekDate"],ModuleName ["Data","Time","Calendar","Julian"],ModuleName ["Data","Time","Calendar","Easter"],ModuleName ["Data","Time","Clock"],ModuleName ["Data","Time","Clock","POSIX"],ModuleName ["Data","Time","Clock","TAI"],ModuleName ["Data","Time","LocalTime"],ModuleName ["Data","Time","Format"],ModuleName ["Data","Time"]], hiddenModules = [ModuleName ["Data","Time","Calendar","Private"],ModuleName ["Data","Time","Calendar","Days"],ModuleName ["Data","Time","Calendar","Gregorian"],ModuleName ["Data","Time","Calendar","JulianYearDay"],ModuleName ["Data","Time","Clock","Scale"],ModuleName ["Data","Time","Clock","UTC"],ModuleName ["Data","Time","Clock","CTimeval"],ModuleName ["Data","Time","Clock","UTCDiff"],ModuleName ["Data","Time","LocalTime","TimeZone"],ModuleName ["Data","Time","LocalTime","TimeOfDay"],ModuleName ["Data","Time","LocalTime","LocalTime"],ModuleName ["Data","Time","Format","Parse"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/time-1.2.0.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/time-1.2.0.3"], hsLibraries = ["HStime-1.2.0.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/time-1.2.0.3/include"], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "old-locale-1.0.0.2-6e2a3c0744e8cf4e0ac2d4e58659f7b5"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/time-1.2.0.3/time.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/time-1.2.0.3"]}])]),(PackageName "transformers",fromList [(Version {versionBranch = [0,2,2,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "transformers-0.2.2.0-a8a2dbba7d96131db605cf631ea0c8c4", sourcePackageId = PackageIdentifier {pkgName = PackageName "transformers", pkgVersion = Version {versionBranch = [0,2,2,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Ross Paterson <ross@soi.city.ac.uk>", author = "Andy Gill, Ross Paterson", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "Haskell 98 part of a monad transformer library, inspired by the paper\n\\\"Functional Programming with Overloading and Higher-Order Polymorphism\\\",\nby Mark P Jones, in /Advanced School of Functional Programming/, 1995\n(<http://web.cecs.pdx.edu/~mpj/pubs/springschool.html>).\n\nThis part contains the monad transformer class, the concrete monad\ntransformers, operations and liftings.  It can be used on its own\nin Haskell 98 code, or with the monad classes in the @monads-fd@ or\n@monads-tf@ packages, which automatically lift operations introduced\nby monad transformers through other transformers.", category = "Control", exposed = True, exposedModules = [ModuleName ["Control","Monad","IO","Class"],ModuleName ["Control","Monad","Trans","Class"],ModuleName ["Control","Monad","Trans","Cont"],ModuleName ["Control","Monad","Trans","Error"],ModuleName ["Control","Monad","Trans","Identity"],ModuleName ["Control","Monad","Trans","List"],ModuleName ["Control","Monad","Trans","Maybe"],ModuleName ["Control","Monad","Trans","Reader"],ModuleName ["Control","Monad","Trans","RWS"],ModuleName ["Control","Monad","Trans","RWS","Lazy"],ModuleName ["Control","Monad","Trans","RWS","Strict"],ModuleName ["Control","Monad","Trans","State"],ModuleName ["Control","Monad","Trans","State","Lazy"],ModuleName ["Control","Monad","Trans","State","Strict"],ModuleName ["Control","Monad","Trans","Writer"],ModuleName ["Control","Monad","Trans","Writer","Lazy"],ModuleName ["Control","Monad","Trans","Writer","Strict"],ModuleName ["Data","Functor","Compose"],ModuleName ["Data","Functor","Constant"],ModuleName ["Data","Functor","Identity"],ModuleName ["Data","Functor","Product"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/transformers-0.2.2.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/transformers-0.2.2.0"], hsLibraries = ["HStransformers-0.2.2.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/transformers-0.2.2.0/html/transformers.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/transformers-0.2.2.0/html"]}])]),(PackageName "unix",fromList [(Version {versionBranch = [2,4,2,0], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1", sourcePackageId = PackageIdentifier {pkgName = PackageName "unix", pkgVersion = Version {versionBranch = [2,4,2,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package gives you access to the set of operating system\nservices standardised by POSIX 1003.1b (or the IEEE Portable\nOperating System Interface for Computing Environments -\nIEEE Std. 1003.1).\n\nThe package is not supported under Windows (except under Cygwin).", category = "System", exposed = True, exposedModules = [ModuleName ["System","Posix"],ModuleName ["System","Posix","DynamicLinker","Module"],ModuleName ["System","Posix","DynamicLinker","Prim"],ModuleName ["System","Posix","Directory"],ModuleName ["System","Posix","DynamicLinker"],ModuleName ["System","Posix","Env"],ModuleName ["System","Posix","Error"],ModuleName ["System","Posix","Files"],ModuleName ["System","Posix","IO"],ModuleName ["System","Posix","Process"],ModuleName ["System","Posix","Process","Internals"],ModuleName ["System","Posix","Resource"],ModuleName ["System","Posix","Temp"],ModuleName ["System","Posix","Terminal"],ModuleName ["System","Posix","Time"],ModuleName ["System","Posix","Unistd"],ModuleName ["System","Posix","User"],ModuleName ["System","Posix","Signals"],ModuleName ["System","Posix","Signals","Exts"],ModuleName ["System","Posix","Semaphore"],ModuleName ["System","Posix","SharedMem"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/unix-2.4.2.0"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/unix-2.4.2.0"], hsLibraries = ["HSunix-2.4.2.0"], extraLibraries = ["rt","util","dl"], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/lib/ghc-7.0.4/unix-2.4.2.0/include"], includes = ["HsUnix.h","execvpe.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/unix-2.4.2.0/unix.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/share/doc/ghc/html/libraries/unix-2.4.2.0"]}])]),(PackageName "unix-compat",fromList [(Version {versionBranch = [0,2,1,3], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "unix-compat-0.2.1.3-2f4e56f2b420caf208cd3230e61645ab", sourcePackageId = PackageIdentifier {pkgName = PackageName "unix-compat", pkgVersion = Version {versionBranch = [0,2,1,3], versionTags = []}}, license = BSD3, copyright = "", maintainer = "Jacob Stanley <jacob@stanley.io>", author = "Bj\246rn Bringert, Duncan Coutts, Jacob Stanley", stability = "", homepage = "http://github.com/jystic/unix-compat", pkgUrl = "", synopsis = "", description = "This package provides portable implementations of parts\nof the unix package. This package re-exports the unix\npackage when available. When it isn't available,\nportable implementations are used.", category = "System", exposed = True, exposedModules = [ModuleName ["System","PosixCompat"],ModuleName ["System","PosixCompat","Extensions"],ModuleName ["System","PosixCompat","Files"],ModuleName ["System","PosixCompat","Time"],ModuleName ["System","PosixCompat","Types"],ModuleName ["System","PosixCompat","User"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/unix-compat-0.2.1.3"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/unix-compat-0.2.1.3"], hsLibraries = ["HSunix-compat-0.2.1.3"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/unix-compat-0.2.1.3/include"], includes = ["HsUnixCompat.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "unix-2.4.2.0-fecc96ca523e3a3ef711ebd9dff361b1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/unix-compat-0.2.1.3/html/unix-compat.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/unix-compat-0.2.1.3/html"]}])]),(PackageName "utf8-string",fromList [(Version {versionBranch = [0,3,6], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "utf8-string-0.3.6-1c65e01135581c7189781d69090906b2", sourcePackageId = PackageIdentifier {pkgName = PackageName "utf8-string", pkgVersion = Version {versionBranch = [0,3,6], versionTags = []}}, license = BSD3, copyright = "", maintainer = "emertens@galois.com", author = "Eric Mertens", stability = "", homepage = "http://github.com/glguy/utf8-string/", pkgUrl = "", synopsis = "", description = "A UTF8 layer for IO and Strings. The utf8-string\npackage provides operations for encoding UTF8\nstrings to Word8 lists and back, and for reading and\nwriting UTF8 without truncation.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Binary","UTF8","String"],ModuleName ["Codec","Binary","UTF8","Generic"],ModuleName ["System","IO","UTF8"],ModuleName ["System","Environment","UTF8"],ModuleName ["Data","String","UTF8"],ModuleName ["Data","ByteString","UTF8"],ModuleName ["Data","ByteString","Lazy","UTF8"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/utf8-string-0.3.6"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/utf8-string-0.3.6"], hsLibraries = ["HSutf8-string-0.3.6"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/utf8-string-0.3.6/html/utf8-string.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/utf8-string-0.3.6/html"]}])]),(PackageName "vector",fromList [(Version {versionBranch = [0,7,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "vector-0.7.1-d0453ff83191033a2912b337e66eb0f7", sourcePackageId = PackageIdentifier {pkgName = PackageName "vector", pkgVersion = Version {versionBranch = [0,7,1], versionTags = []}}, license = BSD3, copyright = "(c) Roman Leshchinskiy 2008-2011", maintainer = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", author = "Roman Leshchinskiy <rl@cse.unsw.edu.au>", stability = "", homepage = "http://code.haskell.org/vector", pkgUrl = "", synopsis = "", description = ".\nAn efficient implementation of Int-indexed arrays (both mutable\nand immutable), with a powerful loop fusion optimization framework .\n\nIt is structured as follows:\n\n[@Data.Vector@] Boxed vectors of arbitrary types.\n\n[@Data.Vector.Unboxed@] Unboxed vectors with an adaptive\nrepresentation based on data type families.\n\n[@Data.Vector.Storable@] Unboxed vectors of 'Storable' types.\n\n[@Data.Vector.Primitive@] Unboxed vectors of primitive types as\ndefined by the @primitive@ package. @Data.Vector.Unboxed@ is more\nflexible at no performance cost.\n\n[@Data.Vector.Generic@] Generic interface to the vector types.\n\nThere is also a (draft) tutorial on common uses of vector.\n\n* <http://haskell.org/haskellwiki/Numeric_Haskell:_A_Vector_Tutorial>\n\nPlease use the project trac to submit bug reports and feature\nrequests.\n\n* <http://trac.haskell.org/vector>\n\nChanges in version 0.7.1\n\n* New functions: @iterateN@, @splitAt@\n\n* New monadic operations: @generateM@, @sequence@, @foldM_@ and\nvariants\n\n* New functions for copying potentially overlapping arrays: @move@,\n@unsafeMove@\n\n* Specialisations of various monadic operations for primitive monads\n\n* Unsafe casts for Storable vectors\n\n* Efficiency improvements\n\nChanges in version 0.7.0.1\n\n* Dependency on package ghc removed\n\nChanges in version 0.7\n\n* New functions for freezing, copying and thawing vectors: @freeze@,\n@thaw@, @unsafeThaw@ and @clone@\n\n* @newWith@ and @newUnsafeWith@ on mutable vectors replaced by\n@replicate@\n\n* New function: @concat@\n\n* New function for safe indexing: @(!?)@\n\n* @Monoid@ instances for all vector types\n\n* Significant recycling and fusion improvements\n\n* Bug fixes\n\n* Support for GHC 7.0", category = "Data, Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Vector","Internal","Check"],ModuleName ["Data","Vector","Fusion","Util"],ModuleName ["Data","Vector","Fusion","Stream","Size"],ModuleName ["Data","Vector","Fusion","Stream","Monadic"],ModuleName ["Data","Vector","Fusion","Stream"],ModuleName ["Data","Vector","Generic","Mutable"],ModuleName ["Data","Vector","Generic","Base"],ModuleName ["Data","Vector","Generic","New"],ModuleName ["Data","Vector","Generic"],ModuleName ["Data","Vector","Primitive","Mutable"],ModuleName ["Data","Vector","Primitive"],ModuleName ["Data","Vector","Storable","Internal"],ModuleName ["Data","Vector","Storable","Mutable"],ModuleName ["Data","Vector","Storable"],ModuleName ["Data","Vector","Unboxed","Base"],ModuleName ["Data","Vector","Unboxed","Mutable"],ModuleName ["Data","Vector","Unboxed"],ModuleName ["Data","Vector","Mutable"],ModuleName ["Data","Vector"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/vector-0.7.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/vector-0.7.1"], hsLibraries = ["HSvector-0.7.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/vector-0.7.1/include"], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "primitive-0.3.1-13f6861e052a8e08600e4045dc473931"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/vector-0.7.1/html/vector.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/vector-0.7.1/html"]}])]),(PackageName "xml",fromList [(Version {versionBranch = [1,3,8], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "xml-1.3.8-3a9c7d987d720facfe5232b2d0494f2c", sourcePackageId = PackageIdentifier {pkgName = PackageName "xml", pkgVersion = Version {versionBranch = [1,3,8], versionTags = []}}, license = BSD3, copyright = "(c) 2007-2008 Galois Inc.", maintainer = "diatchki@galois.com", author = "Galois Inc.", stability = "", homepage = "http://code.galois.com", pkgUrl = "", synopsis = "", description = "A simple XML library.", category = "Text, XML", exposed = True, exposedModules = [ModuleName ["Text","XML","Light"],ModuleName ["Text","XML","Light","Types"],ModuleName ["Text","XML","Light","Output"],ModuleName ["Text","XML","Light","Input"],ModuleName ["Text","XML","Light","Lexer"],ModuleName ["Text","XML","Light","Proc"],ModuleName ["Text","XML","Light","Cursor"]], hiddenModules = [], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/xml-1.3.8"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/xml-1.3.8"], hsLibraries = ["HSxml-1.3.8"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/xml-1.3.8/html/xml.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/xml-1.3.8/html"]}])]),(PackageName "zlib",fromList [(Version {versionBranch = [0,5,3,1], versionTags = []},[InstalledPackageInfo {installedPackageId = InstalledPackageId "zlib-0.5.3.1-5fbdf714525b76e0e601c2ffb25f2044", sourcePackageId = PackageIdentifier {pkgName = PackageName "zlib", pkgVersion = Version {versionBranch = [0,5,3,1], versionTags = []}}, license = BSD3, copyright = "(c) 2006-2008 Duncan Coutts", maintainer = "Duncan Coutts <duncan@community.haskell.org>", author = "Duncan Coutts <duncan@community.haskell.org>", stability = "", homepage = "", pkgUrl = "", synopsis = "", description = "This package provides a pure interface for compressing and\ndecompressing streams of data represented as lazy\n'ByteString's. It uses the zlib C library so it has high\nperformance. It supports the \\\"zlib\\\", \\\"gzip\\\" and \\\"raw\\\"\ncompression formats.\n\nIt provides a convenient high level API suitable for most\ntasks and for the few cases where more control is needed it\nprovides access to the full zlib feature set.", category = "Codec", exposed = True, exposedModules = [ModuleName ["Codec","Compression","GZip"],ModuleName ["Codec","Compression","Zlib"],ModuleName ["Codec","Compression","Zlib","Raw"],ModuleName ["Codec","Compression","Zlib","Internal"]], hiddenModules = [ModuleName ["Codec","Compression","Zlib","Stream"]], trusted = False, importDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/zlib-0.5.3.1"], libraryDirs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/lib/zlib-0.5.3.1"], hsLibraries = ["HSzlib-0.5.3.1"], extraLibraries = ["z"], extraGHCiLibraries = [], includeDirs = [], includes = ["zlib.h"], depends = [InstalledPackageId "base-4.3.1.0-cf5fbbf5ccbd0475ad054efbb121340e",InstalledPackageId "bytestring-0.9.1.10-d77bf6b81552777e42a16814f3d5cfd1"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/zlib-0.5.3.1/html/zlib.haddock"], haddockHTMLs = ["/home/ganesh/ghc/install/ghc-7.0.4/packages/share/doc/zlib-0.5.3.1/html"]}])])]), pkgDescrFile = Just "./darcs-beta.cabal", localPkgDescr = PackageDescription {package = PackageIdentifier {pkgName = PackageName "darcs-beta", pkgVersion = Version {versionBranch = [2,7,98,2], versionTags = []}}, license = GPL Nothing, licenseFile = "COPYING", copyright = "", maintainer = "<darcs-users@darcs.net>", author = "David Roundy <droundy@darcs.net>, <darcs-users@darcs.net>", stability = "Experimental", testedWith = [(GHC,ThisVersion (Version {versionBranch = [6,8,2], versionTags = []}))], homepage = "http://darcs.net/", pkgUrl = "", bugReports = "", sourceRepos = [SourceRepo {repoKind = RepoHead, repoType = Just Darcs, repoLocation = Just "http://darcs.net/", repoModule = Nothing, repoBranch = Nothing, repoTag = Nothing, repoSubdir = Nothing}], synopsis = "a distributed, interactive, smart revision control system", description = "Darcs is a free, open source revision control\nsystem. It is:\n\n* Distributed: Every user has access to the full\ncommand set, removing boundaries between server and\nclient or committer and non-committers.\n\n* Interactive: Darcs is easy to learn and efficient to\nuse because it asks you questions in response to\nsimple commands, giving you choices in your work\nflow. You can choose to record one change in a file,\nwhile ignoring another. As you update from upstream,\nyou can review each patch name, even the full \"diff\"\nfor interesting patches.\n\n* Smart: Originally developed by physicist David\nRoundy, darcs is based on a unique algebra of\npatches.\n\nThis smartness lets you respond to changing demands\nin ways that would otherwise not be possible. Learn\nmore about spontaneous branches with darcs.", category = "Development", customFieldsPD = [], buildDepends = [Dependency (PackageName "HTTP") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4000,0,8], versionTags = []})) (LaterVersion (Version {versionBranch = [4000,0,8], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4000,3], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4000,0,8], versionTags = []})) (LaterVersion (Version {versionBranch = [4000,0,8], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4000,3], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4000,0,8], versionTags = []})) (LaterVersion (Version {versionBranch = [4000,0,8], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4000,3], versionTags = []}))))),Dependency (PackageName "HUnit") (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))),Dependency (PackageName "QuickCheck") (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,3], versionTags = []})) (LaterVersion (Version {versionBranch = [2,3], versionTags = []}))),Dependency (PackageName "array") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))))),Dependency (PackageName "base") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4,4], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4,4], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4,4], versionTags = []}))))),Dependency (PackageName "bytestring") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,9,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,9,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,10], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,9,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,9,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,10], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,9,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,9,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,10], versionTags = []}))))),Dependency (PackageName "cmdlib") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,4], versionTags = []}))),Dependency (PackageName "containers") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))))),Dependency (PackageName "directory") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))))),Dependency (PackageName "extensible-exceptions") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))))),Dependency (PackageName "filepath") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,1,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,1,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,5,0,0], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,1,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,1,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,5,0,0], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,1,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,1,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,5,0,0], versionTags = []}))))),Dependency (PackageName "hashed-storage") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))))),Dependency (PackageName "haskeline") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,6,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,6,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,7], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,6,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,6,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,7], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,6,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,6,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,7], versionTags = []}))))),Dependency (PackageName "html") (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})) (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})) (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})))),Dependency (PackageName "mmap") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))))),Dependency (PackageName "mtl") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,1], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,1], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,1], versionTags = []}))))),Dependency (PackageName "network") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [2,2], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,4], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [2,2], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,4], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [2,2], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,4], versionTags = []}))))),Dependency (PackageName "old-time") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2], versionTags = []}))))),Dependency (PackageName "parsec") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,0], versionTags = []})) (LaterVersion (Version {versionBranch = [2,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [3,2], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,0], versionTags = []})) (LaterVersion (Version {versionBranch = [2,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [3,2], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,0], versionTags = []})) (LaterVersion (Version {versionBranch = [2,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [3,2], versionTags = []}))))),Dependency (PackageName "process") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))))),Dependency (PackageName "random") (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})) (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})) (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})))),Dependency (PackageName "regex-compat") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,95,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,95,1], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,95,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,95,1], versionTags = []}))) (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,95,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,95,1], versionTags = []}))))),Dependency (PackageName "shellish") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))),Dependency (PackageName "tar") (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})) (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})) (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})))),Dependency (PackageName "terminfo") (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})) (IntersectVersionRanges (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})) (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})))),Dependency (PackageName "test-framework") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,2], versionTags = []}))),Dependency (PackageName "test-framework-hunit") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,2], versionTags = []}))),Dependency (PackageName "test-framework-quickcheck2") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,8], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,8], versionTags = []}))),Dependency (PackageName "text") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,11,0,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,11,0,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,12,0,0], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,11,0,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,11,0,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,12,0,0], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,11,0,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,11,0,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,12,0,0], versionTags = []}))))),Dependency (PackageName "unix") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,6], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,6], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,6], versionTags = []}))))),Dependency (PackageName "vector") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,7], versionTags = []})) (LaterVersion (Version {versionBranch = [0,7], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,7], versionTags = []})) (LaterVersion (Version {versionBranch = [0,7], versionTags = []}))) (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,7], versionTags = []})) (LaterVersion (Version {versionBranch = [0,7], versionTags = []}))))),Dependency (PackageName "zlib") (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6,0,0], versionTags = []}))) (IntersectVersionRanges (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6,0,0], versionTags = []}))) (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6,0,0], versionTags = []})))))], specVersionRaw = Right (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,8], versionTags = []})) (LaterVersion (Version {versionBranch = [1,8], versionTags = []}))), buildType = Just Custom, library = Just (Library {exposedModules = [ModuleName ["CommandLine"],ModuleName ["Crypt","SHA256"],ModuleName ["Darcs","Annotate"],ModuleName ["Darcs","ArgumentDefaults"],ModuleName ["Darcs","Arguments"],ModuleName ["Darcs","Bug"],ModuleName ["Darcs","ColorPrinter"],ModuleName ["Darcs","Commands"],ModuleName ["Darcs","Commands","Add"],ModuleName ["Darcs","Commands","AmendRecord"],ModuleName ["Darcs","Commands","Annotate"],ModuleName ["Darcs","Commands","Apply"],ModuleName ["Darcs","CommandsAux"],ModuleName ["Darcs","Commands","Changes"],ModuleName ["Darcs","Commands","Check"],ModuleName ["Darcs","Commands","Convert"],ModuleName ["Darcs","Commands","Diff"],ModuleName ["Darcs","Commands","Dist"],ModuleName ["Darcs","Commands","Get"],ModuleName ["Darcs","Commands","GZCRCs"],ModuleName ["Darcs","Commands","Help"],ModuleName ["Darcs","Commands","Init"],ModuleName ["Darcs","Commands","MarkConflicts"],ModuleName ["Darcs","Commands","Move"],ModuleName ["Darcs","Commands","Optimize"],ModuleName ["Darcs","Commands","Pull"],ModuleName ["Darcs","Commands","Push"],ModuleName ["Darcs","Commands","Put"],ModuleName ["Darcs","Commands","Record"],ModuleName ["Darcs","Commands","Remove"],ModuleName ["Darcs","Commands","Replace"],ModuleName ["Darcs","Commands","Revert"],ModuleName ["Darcs","Commands","Rollback"],ModuleName ["Darcs","Commands","Send"],ModuleName ["Darcs","Commands","SetPref"],ModuleName ["Darcs","Commands","Show"],ModuleName ["Darcs","Commands","ShowAuthors"],ModuleName ["Darcs","Commands","ShowBug"],ModuleName ["Darcs","Commands","ShowContents"],ModuleName ["Darcs","Commands","ShowFiles"],ModuleName ["Darcs","Commands","ShowIndex"],ModuleName ["Darcs","Commands","ShowRepo"],ModuleName ["Darcs","Commands","ShowTags"],ModuleName ["Darcs","Commands","Tag"],ModuleName ["Darcs","Commands","TrackDown"],ModuleName ["Darcs","Commands","TransferMode"],ModuleName ["Darcs","Commands","Util"],ModuleName ["Darcs","Commands","Unrecord"],ModuleName ["Darcs","Commands","Unrevert"],ModuleName ["Darcs","Commands","WhatsNew"],ModuleName ["Darcs","Compat"],ModuleName ["Darcs","Diff"],ModuleName ["Darcs","Email"],ModuleName ["Darcs","External"],ModuleName ["Darcs","Flags"],ModuleName ["Darcs","Global"],ModuleName ["Darcs","IO"],ModuleName ["Darcs","Lock"],ModuleName ["Darcs","Match"],ModuleName ["Darcs","MonadProgress"],ModuleName ["Darcs","Patch"],ModuleName ["Darcs","Patch","Apply"],ModuleName ["Darcs","Patch","ApplyMonad"],ModuleName ["Darcs","Patch","Bracketed"],ModuleName ["Darcs","Patch","Bracketed","Instances"],ModuleName ["Darcs","Patch","Bundle"],ModuleName ["Darcs","Patch","Choices"],ModuleName ["Darcs","Patch","Commute"],ModuleName ["Darcs","Patch","Conflict"],ModuleName ["Darcs","Patch","ConflictMarking"],ModuleName ["Darcs","Patch","Depends"],ModuleName ["Darcs","Patch","Dummy"],ModuleName ["Darcs","Patch","Effect"],ModuleName ["Darcs","Patch","FileName"],ModuleName ["Darcs","Patch","FileHunk"],ModuleName ["Darcs","Patch","Format"],ModuleName ["Darcs","Patch","Info"],ModuleName ["Darcs","Patch","Inspect"],ModuleName ["Darcs","Patch","Invert"],ModuleName ["Darcs","Patch","Match"],ModuleName ["Darcs","Patch","MatchData"],ModuleName ["Darcs","Patch","Merge"],ModuleName ["Darcs","Patch","Named"],ModuleName ["Darcs","Patch","OldDate"],ModuleName ["Darcs","Patch","PatchInfoAnd"],ModuleName ["Darcs","Patch","Patchy"],ModuleName ["Darcs","Patch","Patchy","Instances"],ModuleName ["Darcs","Patch","Permutations"],ModuleName ["Darcs","Patch","Prim"],ModuleName ["Darcs","Patch","Prim","Class"],ModuleName ["Darcs","Patch","Prim","V1"],ModuleName ["Darcs","Patch","Prim","V1","Apply"],ModuleName ["Darcs","Patch","Prim","V1","Coalesce"],ModuleName ["Darcs","Patch","Prim","V1","Commute"],ModuleName ["Darcs","Patch","Prim","V1","Core"],ModuleName ["Darcs","Patch","Prim","V1","Details"],ModuleName ["Darcs","Patch","Prim","V1","Read"],ModuleName ["Darcs","Patch","Prim","V1","Show"],ModuleName ["Darcs","Patch","Prim","V3"],ModuleName ["Darcs","Patch","Prim","V3","ObjectMap"],ModuleName ["Darcs","Patch","Prim","V3","Apply"],ModuleName ["Darcs","Patch","Prim","V3","Coalesce"],ModuleName ["Darcs","Patch","Prim","V3","Commute"],ModuleName ["Darcs","Patch","Prim","V3","Core"],ModuleName ["Darcs","Patch","Prim","V3","Details"],ModuleName ["Darcs","Patch","Prim","V3","Read"],ModuleName ["Darcs","Patch","Prim","V3","Show"],ModuleName ["Darcs","Patch","Read"],ModuleName ["Darcs","Patch","ReadMonads"],ModuleName ["Darcs","Patch","RegChars"],ModuleName ["Darcs","Patch","Repair"],ModuleName ["Darcs","Patch","RepoPatch"],ModuleName ["Darcs","Patch","Set"],ModuleName ["Darcs","Patch","Show"],ModuleName ["Darcs","Patch","Split"],ModuleName ["Darcs","Patch","Summary"],ModuleName ["Darcs","Patch","SummaryData"],ModuleName ["Darcs","Patch","TokenReplace"],ModuleName ["Darcs","Patch","TouchesFiles"],ModuleName ["Darcs","Patch","Viewing"],ModuleName ["Darcs","Patch","V1"],ModuleName ["Darcs","Patch","V1","Apply"],ModuleName ["Darcs","Patch","V1","Commute"],ModuleName ["Darcs","Patch","V1","Core"],ModuleName ["Darcs","Patch","V1","Read"],ModuleName ["Darcs","Patch","V1","Show"],ModuleName ["Darcs","Patch","V1","Viewing"],ModuleName ["Darcs","Patch","V2"],ModuleName ["Darcs","Patch","V2","Non"],ModuleName ["Darcs","Patch","V2","Real"],ModuleName ["Darcs","PrintPatch"],ModuleName ["Darcs","ProgressPatches"],ModuleName ["Darcs","RemoteApply"],ModuleName ["Darcs","RepoPath"],ModuleName ["Darcs","Repository"],ModuleName ["Darcs","Repository","ApplyPatches"],ModuleName ["Darcs","Repository","Cache"],ModuleName ["Darcs","Repository","Format"],ModuleName ["Darcs","Repository","HashedIO"],ModuleName ["Darcs","Repository","HashedRepo"],ModuleName ["Darcs","Repository","Internal"],ModuleName ["Darcs","Repository","LowLevel"],ModuleName ["Darcs","Repository","Merge"],ModuleName ["Darcs","Repository","InternalTypes"],ModuleName ["Darcs","Repository","Motd"],ModuleName ["Darcs","Repository","Old"],ModuleName ["Darcs","Repository","Prefs"],ModuleName ["Darcs","Repository","Repair"],ModuleName ["Darcs","Repository","State"],ModuleName ["Darcs","Resolution"],ModuleName ["Darcs","RunCommand"],ModuleName ["Darcs","SelectChanges"],ModuleName ["Darcs","SignalHandler"],ModuleName ["Darcs","Ssh"],ModuleName ["Darcs","Test"],ModuleName ["Darcs","TheCommands"],ModuleName ["Darcs","URL"],ModuleName ["Darcs","Utils"],ModuleName ["Darcs","Witnesses","Eq"],ModuleName ["Darcs","Witnesses","Ordered"],ModuleName ["Darcs","Witnesses","Sealed"],ModuleName ["Darcs","Witnesses","Show"],ModuleName ["Darcs","Witnesses","Unsafe"],ModuleName ["Darcs","Witnesses","WZipper"],ModuleName ["DateMatcher"],ModuleName ["English"],ModuleName ["Exec"],ModuleName ["ByteStringUtils"],ModuleName ["IsoDate"],ModuleName ["Lcs"],ModuleName ["Printer"],ModuleName ["Progress"],ModuleName ["Ratified"],ModuleName ["SHA1"],ModuleName ["URL"],ModuleName ["URL","Request"],ModuleName ["URL","Curl"],ModuleName ["URL","HTTP"],ModuleName ["Workaround"]], libExposed = True, libBuildInfo = BuildInfo {buildable = True, buildTools = [Dependency (PackageName "ghc") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [6,10], versionTags = []})) (LaterVersion (Version {versionBranch = [6,10], versionTags = []}))) (EarlierVersion (Version {versionBranch = [7,6], versionTags = []})))], cppOptions = ["-DHAVE_CURL","-DHAVE_HTTP","-DHAVE_MMAP","-DHAVE_TERMINFO","-DGADT_WITNESSES=1"], ccOptions = ["-DHAVE_CURL","-D_REENTRANT"], ldOptions = [], pkgconfigDepends = [], frameworks = [], cSources = ["src/hscurl.c","src/atomic_create.c","src/fpstring.c","src/maybe_relink.c","src/umask.c","src/Crypt/sha2.c","src/system_encoding.c"], hsSourceDirs = ["src"], otherModules = [ModuleName ["Version"]], defaultLanguage = Nothing, otherLanguages = [], defaultExtensions = [], otherExtensions = [], oldExtensions = [EnableExtension CPP,EnableExtension BangPatterns,EnableExtension PatternGuards,EnableExtension GADTs,EnableExtension TypeOperators,EnableExtension FlexibleContexts,EnableExtension FlexibleInstances,EnableExtension ScopedTypeVariables,EnableExtension KindSignatures,EnableExtension RankNTypes,EnableExtension TypeFamilies,DisableExtension MonoLocalBinds], extraLibs = ["curl"], extraLibDirs = [], includeDirs = ["src"], includes = ["curl/curl.h"], installIncludes = [], options = [(GHC,["-O2"]),(GHC,["-Wall","-funbox-strict-fields","-fwarn-tabs"])], ghcProfOptions = ["-prof","-auto-all"], ghcSharedOptions = [], customFieldsBI = [("x-have-http",""),("x-use-color","")], targetBuildDepends = [Dependency (PackageName "HTTP") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4000,0,8], versionTags = []})) (LaterVersion (Version {versionBranch = [4000,0,8], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4000,3], versionTags = []}))),Dependency (PackageName "array") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))),Dependency (PackageName "base") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4,4], versionTags = []}))),Dependency (PackageName "bytestring") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,9,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,9,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,10], versionTags = []}))),Dependency (PackageName "containers") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))),Dependency (PackageName "directory") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))),Dependency (PackageName "extensible-exceptions") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))),Dependency (PackageName "filepath") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,1,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,1,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,5,0,0], versionTags = []}))),Dependency (PackageName "hashed-storage") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))),Dependency (PackageName "haskeline") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,6,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,6,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,7], versionTags = []}))),Dependency (PackageName "html") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "mmap") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))),Dependency (PackageName "mtl") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,1], versionTags = []}))),Dependency (PackageName "network") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [2,2], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,4], versionTags = []}))),Dependency (PackageName "old-time") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2], versionTags = []}))),Dependency (PackageName "parsec") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,0], versionTags = []})) (LaterVersion (Version {versionBranch = [2,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [3,2], versionTags = []}))),Dependency (PackageName "process") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))),Dependency (PackageName "random") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "regex-compat") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,95,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,95,1], versionTags = []}))),Dependency (PackageName "tar") (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})),Dependency (PackageName "terminfo") (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})),Dependency (PackageName "text") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,11,0,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,11,0,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,12,0,0], versionTags = []}))),Dependency (PackageName "unix") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,6], versionTags = []}))),Dependency (PackageName "vector") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,7], versionTags = []})) (LaterVersion (Version {versionBranch = [0,7], versionTags = []}))),Dependency (PackageName "zlib") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6,0,0], versionTags = []})))]}}), executables = [Executable {exeName = "darcs-test", modulePath = "test.hs", buildInfo = BuildInfo {buildable = True, buildTools = [Dependency (PackageName "ghc") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [6,10], versionTags = []})) (LaterVersion (Version {versionBranch = [6,10], versionTags = []}))) (EarlierVersion (Version {versionBranch = [7,2], versionTags = []})))], cppOptions = ["-DHAVE_MMAP","-DHAVE_TERMINFO","-DGADT_WITNESSES=1"], ccOptions = ["-D_REENTRANT"], ldOptions = [], pkgconfigDepends = [], frameworks = [], cSources = ["src/atomic_create.c","src/fpstring.c","src/maybe_relink.c","src/umask.c","src/Crypt/sha2.c","src/system_encoding.c"], hsSourceDirs = ["src"], otherModules = [ModuleName ["Darcs","Test","Email"],ModuleName ["Darcs","Test","Patch","Check"],ModuleName ["Darcs","Test","Patch","Examples","Set1"],ModuleName ["Darcs","Test","Patch","Examples","Set2Unwitnessed"],ModuleName ["Darcs","Test","Patch","WSub"],ModuleName ["Darcs","Test","Patch","Info"],ModuleName ["Darcs","Test","Patch","Properties","V1Set1"],ModuleName ["Darcs","Test","Patch","Properties","V1Set2"],ModuleName ["Darcs","Test","Patch","Properties","Generic"],ModuleName ["Darcs","Test","Patch","Properties","GenericUnwitnessed"],ModuleName ["Darcs","Test","Patch","Properties","Check"],ModuleName ["Darcs","Test","Patch","Properties","Real"],ModuleName ["Darcs","Test","Patch","Arbitrary","Generic"],ModuleName ["Darcs","Test","Patch","Arbitrary","Real"],ModuleName ["Darcs","Test","Patch","Arbitrary","PrimV1"],ModuleName ["Darcs","Test","Patch","Arbitrary","PrimV3"],ModuleName ["Darcs","Test","Patch","Arbitrary","PatchV1"],ModuleName ["Darcs","Test","Patch","RepoModel"],ModuleName ["Darcs","Test","Patch","Utils"],ModuleName ["Darcs","Test","Patch","V1Model"],ModuleName ["Darcs","Test","Patch","V3Model"],ModuleName ["Darcs","Test","Patch","WithState"],ModuleName ["Darcs","Test","Patch"],ModuleName ["Darcs","Test","Misc"],ModuleName ["Darcs","Test","Util","TestResult"],ModuleName ["Darcs","Test","Util","QuickCheck"]], defaultLanguage = Nothing, otherLanguages = [], defaultExtensions = [], otherExtensions = [], oldExtensions = [EnableExtension CPP,EnableExtension BangPatterns,EnableExtension PatternGuards,EnableExtension GADTs,EnableExtension TypeOperators,EnableExtension FlexibleContexts,EnableExtension FlexibleInstances,EnableExtension ScopedTypeVariables,EnableExtension KindSignatures,EnableExtension RankNTypes,EnableExtension TypeFamilies,DisableExtension MonoLocalBinds], extraLibs = [], extraLibDirs = [], includeDirs = ["src"], includes = [], installIncludes = [], options = [(GHC,["-O2"]),(GHC,["-Wall","-funbox-strict-fields","-fwarn-tabs"]),(GHC,["-threaded"])], ghcProfOptions = ["-prof","-auto-all"], ghcSharedOptions = [], customFieldsBI = [("x-use-color","")], targetBuildDepends = [Dependency (PackageName "HTTP") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4000,0,8], versionTags = []})) (LaterVersion (Version {versionBranch = [4000,0,8], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4000,3], versionTags = []}))),Dependency (PackageName "HUnit") (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))),Dependency (PackageName "QuickCheck") (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,3], versionTags = []})) (LaterVersion (Version {versionBranch = [2,3], versionTags = []}))),Dependency (PackageName "array") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))),Dependency (PackageName "base") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4,4], versionTags = []}))),Dependency (PackageName "bytestring") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,9,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,9,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,10], versionTags = []}))),Dependency (PackageName "cmdlib") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,4], versionTags = []}))),Dependency (PackageName "containers") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))),Dependency (PackageName "directory") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))),Dependency (PackageName "extensible-exceptions") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))),Dependency (PackageName "filepath") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,1,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,1,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,5,0,0], versionTags = []}))),Dependency (PackageName "hashed-storage") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))),Dependency (PackageName "haskeline") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,6,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,6,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,7], versionTags = []}))),Dependency (PackageName "html") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "mmap") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))),Dependency (PackageName "mtl") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,1], versionTags = []}))),Dependency (PackageName "network") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [2,2], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,4], versionTags = []}))),Dependency (PackageName "old-time") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2], versionTags = []}))),Dependency (PackageName "parsec") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,0], versionTags = []})) (LaterVersion (Version {versionBranch = [2,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [3,2], versionTags = []}))),Dependency (PackageName "process") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))),Dependency (PackageName "random") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "regex-compat") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,95,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,95,1], versionTags = []}))),Dependency (PackageName "shellish") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))),Dependency (PackageName "tar") (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})),Dependency (PackageName "terminfo") (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})),Dependency (PackageName "test-framework") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,2], versionTags = []}))),Dependency (PackageName "test-framework-hunit") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,2], versionTags = []}))),Dependency (PackageName "test-framework-quickcheck2") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,2,8], versionTags = []})) (LaterVersion (Version {versionBranch = [0,2,8], versionTags = []}))),Dependency (PackageName "text") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,11,0,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,11,0,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,12,0,0], versionTags = []}))),Dependency (PackageName "unix") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,6], versionTags = []}))),Dependency (PackageName "vector") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,7], versionTags = []})) (LaterVersion (Version {versionBranch = [0,7], versionTags = []}))),Dependency (PackageName "zlib") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6,0,0], versionTags = []})))]}},Executable {exeName = "darcs", modulePath = "darcs.hs", buildInfo = BuildInfo {buildable = True, buildTools = [Dependency (PackageName "ghc") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [6,10], versionTags = []})) (LaterVersion (Version {versionBranch = [6,10], versionTags = []}))) (EarlierVersion (Version {versionBranch = [7,6], versionTags = []})))], cppOptions = ["-DHAVE_CURL","-DHAVE_HTTP","-DHAVE_MMAP","-DHAVE_TERMINFO"], ccOptions = ["-DHAVE_CURL","-D_REENTRANT"], ldOptions = [], pkgconfigDepends = [], frameworks = [], cSources = ["src/hscurl.c","src/atomic_create.c","src/fpstring.c","src/maybe_relink.c","src/umask.c","src/Crypt/sha2.c","src/system_encoding.c"], hsSourceDirs = ["src"], otherModules = [], defaultLanguage = Nothing, otherLanguages = [], defaultExtensions = [], otherExtensions = [], oldExtensions = [EnableExtension CPP,EnableExtension BangPatterns,EnableExtension PatternGuards,EnableExtension GADTs,EnableExtension TypeOperators,EnableExtension FlexibleContexts,EnableExtension FlexibleInstances,EnableExtension ScopedTypeVariables,EnableExtension KindSignatures,EnableExtension RankNTypes,EnableExtension TypeFamilies,DisableExtension MonoLocalBinds], extraLibs = ["curl"], extraLibDirs = [], includeDirs = ["src"], includes = ["curl/curl.h"], installIncludes = [], options = [(GHC,["-O2"]),(GHC,["-Wall","-funbox-strict-fields","-fwarn-tabs"]),(GHC,["-threaded"])], ghcProfOptions = ["-prof","-auto-all"], ghcSharedOptions = [], customFieldsBI = [("x-have-http",""),("x-use-color","")], targetBuildDepends = [Dependency (PackageName "HTTP") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4000,0,8], versionTags = []})) (LaterVersion (Version {versionBranch = [4000,0,8], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4000,3], versionTags = []}))),Dependency (PackageName "array") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))),Dependency (PackageName "base") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [4], versionTags = []})) (LaterVersion (Version {versionBranch = [4], versionTags = []}))) (EarlierVersion (Version {versionBranch = [4,4], versionTags = []}))),Dependency (PackageName "bytestring") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,9,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,9,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,10], versionTags = []}))),Dependency (PackageName "containers") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,5], versionTags = []}))),Dependency (PackageName "directory") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))),Dependency (PackageName "extensible-exceptions") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,1], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,2], versionTags = []}))),Dependency (PackageName "filepath") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,1,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,1,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,5,0,0], versionTags = []}))),Dependency (PackageName "hashed-storage") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))),Dependency (PackageName "haskeline") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,6,3], versionTags = []})) (LaterVersion (Version {versionBranch = [0,6,3], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,7], versionTags = []}))),Dependency (PackageName "html") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "mmap") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6], versionTags = []}))),Dependency (PackageName "mtl") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,1], versionTags = []}))),Dependency (PackageName "network") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,2], versionTags = []})) (LaterVersion (Version {versionBranch = [2,2], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,4], versionTags = []}))),Dependency (PackageName "old-time") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2], versionTags = []}))),Dependency (PackageName "parsec") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [2,0], versionTags = []})) (LaterVersion (Version {versionBranch = [2,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [3,2], versionTags = []}))),Dependency (PackageName "process") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0,0,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0,0,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [1,2,0,0], versionTags = []}))),Dependency (PackageName "random") (WildcardVersion (Version {versionBranch = [1,0], versionTags = []})),Dependency (PackageName "regex-compat") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,95,1], versionTags = []})) (LaterVersion (Version {versionBranch = [0,95,1], versionTags = []}))),Dependency (PackageName "tar") (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})),Dependency (PackageName "terminfo") (WildcardVersion (Version {versionBranch = [0,3], versionTags = []})),Dependency (PackageName "text") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,11,0,6], versionTags = []})) (LaterVersion (Version {versionBranch = [0,11,0,6], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,12,0,0], versionTags = []}))),Dependency (PackageName "unix") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [2,6], versionTags = []}))),Dependency (PackageName "vector") (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,7], versionTags = []})) (LaterVersion (Version {versionBranch = [0,7], versionTags = []}))),Dependency (PackageName "zlib") (IntersectVersionRanges (UnionVersionRanges (ThisVersion (Version {versionBranch = [0,5,1,0], versionTags = []})) (LaterVersion (Version {versionBranch = [0,5,1,0], versionTags = []}))) (EarlierVersion (Version {versionBranch = [0,6,0,0], versionTags = []})))]}}], testSuites = [], benchmarks = [], dataFiles = [], dataDir = "", extraSrcFiles = ["src/*.h","src/Crypt/sha2.h","src/win32/send_email.h","src/win32/sys/mman.h","contrib/_darcs.zsh","contrib/darcs_completion","contrib/cygwin-wrapper.bash","contrib/update_roundup.pl","contrib/upload.cgi","contrib/darcs-errors.hlint","doc/src/best_practices.tex","doc/src/building_darcs.tex","doc/src/configuring_darcs.tex","doc/src/features.tex","doc/src/gpl.tex","doc/src/darcs.tex","doc/darcs.css","README","NEWS","release/distributed-version","release/distributed-context","tests/data/*.tgz","tests/data/README","tests/data/*.dpatch","tests/data/convert/darcs1/*.dpatch","tests/data/convert/darcs2/*.dpatch","tests/*.sh","tests/bin/trackdown-bisect-helper.hs","tests/bin/hspwd.hs","tests/network/*.sh","tests/lib","tests/data/example_binary.png","tests/README.test_maintainers.txt","GNUmakefile"], extraTmpFiles = []}, withPrograms = [("alex",ConfiguredProgram {programId = "alex", programVersion = Just (Version {versionBranch = [2,3,3], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/alex"}}),("ar",ConfiguredProgram {programId = "ar", programVersion = Nothing, programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/ar"}}),("ffihugs",ConfiguredProgram {programId = "ffihugs", programVersion = Nothing, programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/ffihugs"}}),("gcc",ConfiguredProgram {programId = "gcc", programVersion = Just (Version {versionBranch = [4,4,5], versionTags = []}), programDefaultArgs = ["-fno-stack-protector"], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/gcc"}}),("ghc",ConfiguredProgram {programId = "ghc", programVersion = Just (Version {versionBranch = [7,0,4], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/home/ganesh/ghc/install/ghc-7.0.4/bin/ghc"}}),("ghc-pkg",ConfiguredProgram {programId = "ghc-pkg", programVersion = Just (Version {versionBranch = [7,0,4], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/home/ganesh/ghc/install/ghc-7.0.4/bin/ghc-pkg"}}),("haddock",ConfiguredProgram {programId = "haddock", programVersion = Just (Version {versionBranch = [2,9,2], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/home/ganesh/ghc/install/ghc-7.0.4/bin/haddock"}}),("happy",ConfiguredProgram {programId = "happy", programVersion = Just (Version {versionBranch = [1,18,4], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/happy"}}),("hpc",ConfiguredProgram {programId = "hpc", programVersion = Just (Version {versionBranch = [0,6], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/home/ganesh/ghc/install/ghc-7.0.4/bin/hpc"}}),("hsc2hs",ConfiguredProgram {programId = "hsc2hs", programVersion = Just (Version {versionBranch = [0,67], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/home/ganesh/ghc/install/ghc-7.0.4/bin/hsc2hs"}}),("hugs",ConfiguredProgram {programId = "hugs", programVersion = Nothing, programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/hugs"}}),("ld",ConfiguredProgram {programId = "ld", programVersion = Nothing, programDefaultArgs = ["-x"], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/ld"}}),("pkg-config",ConfiguredProgram {programId = "pkg-config", programVersion = Just (Version {versionBranch = [0,25], versionTags = []}), programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/pkg-config"}}),("ranlib",ConfiguredProgram {programId = "ranlib", programVersion = Nothing, programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/ranlib"}}),("strip",ConfiguredProgram {programId = "strip", programVersion = Nothing, programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/usr/bin/strip"}}),("tar",ConfiguredProgram {programId = "tar", programVersion = Nothing, programDefaultArgs = [], programOverrideArgs = [], programLocation = FoundOnSystem {locationPath = "/bin/tar"}})], withPackageDB = [GlobalPackageDB,UserPackageDB], withVanillaLib = True, withProfLib = False, withSharedLib = False, withDynExe = False, withProfExe = False, withOptimization = NormalOptimisation, withGHCiLib = True, splitObjs = False, stripExes = True, progPrefix = "", progSuffix = ""}
diff --git a/doc/src/darcs.tex b/doc/src/darcs.tex
--- a/doc/src/darcs.tex
+++ b/doc/src/darcs.tex
@@ -775,16 +775,6 @@
 posthook documentation above for details.
 
 \begin{options}
---ssh-cm, --no-ssh-cm
-\end{options}
-
-For commands which invoke ssh, darcs will normally multiplex ssh
-sessions over a single connection as long as your version of ssh has
-the ControlMaster feature from OpenSSH versions 3.9 and above.  This
-option will avoid darcs trying to use this feature even if your ssh
-supports it.
-
-\begin{options}
 --http-pipelining, --no-http-pipelining
 \end{options}
 
diff --git a/release/distributed-context b/release/distributed-context
--- a/release/distributed-context
+++ b/release/distributed-context
@@ -1,1 +1,1 @@
-Just "\nContext:\n\n[TAG 2.7.98.1\nFlorent Becker <florent.becker@ens-lyon.org>**20110622133304\n Ignore-this: 34d700fca22914533895adec39aaea1e\n] \n"
+Just "\nContext:\n\n[TAG 2.7.98.2\nGanesh Sittampalam <ganesh@earth.li>**20120115220456\n Ignore-this: 604bbc2c5ac21493b87708795b4c05ab\n] \n"
diff --git a/src/ByteStringUtils.hs b/src/ByteStringUtils.hs
--- a/src/ByteStringUtils.hs
+++ b/src/ByteStringUtils.hs
@@ -52,6 +52,7 @@
         intercalate,
 
         -- encoding and unicode utilities
+        isAscii,
         decodeLocale,
         encodeLocale,
         decodeString
@@ -226,7 +227,7 @@
    case BI.toForeignPtr ps of
    (x,s,l) ->
     unsafePerformIO $ withForeignPtr x $ \p->
-    do hash (p `plusPtr` s) l
+    hash (p `plusPtr` s) l
 
 hash :: Ptr Word8 -> Int -> IO Int32
 hash ptr len = f (0 :: Int32) ptr len
@@ -520,6 +521,10 @@
 -- do hGetEcho on stdin which fails if stdin is e.g. /dev/null
 unsafeRunInput :: InputT IO a -> a
 unsafeRunInput = unsafePerformIO . runInputTBehavior (useFileHandle stdin) defaultSettings
+
+-- | Test if a ByteString is made of ascii characters
+isAscii :: B.ByteString -> Bool
+isAscii = B.all (\w -> w < 128)
 
 -- | Decode a ByteString to a String according to the current locale
 -- unsafePerformIO in the locale function is ratified by the fact that GHC 6.12
diff --git a/src/Darcs/Annotate.hs b/src/Darcs/Annotate.hs
--- a/src/Darcs/Annotate.hs
+++ b/src/Darcs/Annotate.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE OverloadedStrings, TypeSynonymInstances #-}
+{-# LANGUAGE OverloadedStrings, TypeSynonymInstances, MultiParamTypeClasses #-}
 
 -- Copyright (C) 2010 Petr Rockai
 --
@@ -28,7 +28,7 @@
 import Data.List( nub, groupBy )
 import qualified Data.Vector as V
 import Darcs.Patch.FileName( FileName, movedirfilename, fn2ps, ps2fn )
-import Darcs.Patch.Patchy ( Apply, apply )
+import Darcs.Patch.Apply ( Apply, apply, ApplyState )
 import Darcs.Patch.Info ( PatchInfo(..), humanFriendly, piAuthor, makeFilename )
 import Darcs.Patch.PatchInfoAnd( info, PatchInfoAnd )
 import Lcs( getChanges )
@@ -40,6 +40,7 @@
 import qualified Data.Map as M
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Char8 as BC
+import Storage.Hashed.Tree( Tree )
 
 #include "gadts.h"
 #include "impossible.h"
@@ -54,7 +55,8 @@
 
 type AnnotatedM = State Annotated
 
-instance ApplyMonad AnnotatedM where
+instance ApplyMonad AnnotatedM Tree where
+  type ApplyMonadBase AnnotatedM = AnnotatedM
   mDoesDirectoryExist _ = return True
   mReadFilePS = fail "mReadFilePS undefined for Annotated"
   mCreateDirectory _ = return ()
@@ -108,14 +110,15 @@
 complete :: Annotated -> Bool
 complete x = V.all (isJust . fst) $ annotated x
 
-annotate' :: (Apply p) =>
+annotate' :: (Apply p, ApplyState p ~ Tree) =>
              FL (PatchInfoAnd p) C(x y) -> Annotated -> Annotated
 annotate' NilFL ann = ann
 annotate' (p :>: ps) ann
   | complete ann = ann
   | otherwise = annotate' ps $ execState (apply p) (ann { currentInfo = info p })
 
-annotate :: (Apply p) => FL (PatchInfoAnd p) C(x y) -> FileName -> B.ByteString -> Annotated
+annotate :: (Apply p, ApplyState p ~ Tree)
+         => FL (PatchInfoAnd p) C(x y) -> FileName -> B.ByteString -> Annotated
 annotate patches inipath inicontent = annotate' patches initial
   where initial = Annotated { path = Just inipath
                             , currentInfo = error "There is no currentInfo."
@@ -124,7 +127,8 @@
                             , annotated = V.replicate (length $ breakLines inicontent)
                                                       (Nothing, B.empty) }
 
-annotateDirectory :: (Apply p) => FL (PatchInfoAnd p) C(x y) -> FileName -> [FileName] -> Annotated
+annotateDirectory :: (Apply p, ApplyState p ~ Tree)
+                  => FL (PatchInfoAnd p) C(x y) -> FileName -> [FileName] -> Annotated
 annotateDirectory patches inipath inicontent = annotate' patches initial
   where initial = Annotated { path = Just inipath
                             , currentInfo = error "There is no currentInfo."
diff --git a/src/Darcs/Arguments.hs b/src/Darcs/Arguments.hs
--- a/src/Darcs/Arguments.hs
+++ b/src/Darcs/Arguments.hs
@@ -38,10 +38,11 @@
                          fileHelpAuthor, environmentHelpEmail,
                          patchnameOption, distnameOption,
                          logfile, rmlogfile, fromOpt, subject, getSubject,
+                         charset, getCharset,
                          inReplyTo, getInReplyTo,
                          target, ccSend, ccApply, getCc, output, outputAutoName,
                          recursive, patchFormatChoices,
-                         upgradeFormat,
+                         upgradeFormat, useWorkingDir,
                          askdeps, ignoretimes, lookforadds,
                          askLongComment, keepDate, sendmailCmd,
                          environmentHelpSendmail,
@@ -53,7 +54,7 @@
                          uncompressNocompress, repoCombinator,
                          optionsLatex, reorderPatches,
                          noskipBoring, allowProblematicFilenames,
-                         applyas, humanReadable,
+                         applyas, humanReadable, machineReadable,
                          changesReverse, onlyToFiles,
                          changesFormat, matchOneContext, matchOneNontag,
                          matchMaxcount,
@@ -84,7 +85,7 @@
                          allowUnrelatedRepos,
                          checkOrRepair, justThisRepo, optimizePristine,
                          optimizeHTTP, getOutput, makeScriptsExecutable,
-                         usePacks, recordRollback
+                         usePacks, recordRollback, amendUnrecord
                       ) where
 import System.Console.GetOpt
 import System.Directory ( doesDirectoryExist )
@@ -108,6 +109,7 @@
 #endif
 
 import Darcs.Patch.PatchInfoAnd ( PatchInfoAnd, info, hopefullyM )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Patch ( RepoPatch, Patchy, showNicely, description, xmlSummary )
 import Darcs.Patch.Info ( toXml )
 import Darcs.Witnesses.Ordered ( FL, mapFL )
@@ -130,6 +132,7 @@
 import Printer ( Doc, putDocLn, text, vsep, ($$), vcat, insertBeforeLastline,
                  prefix )
 import ByteStringUtils ( decodeString )
+import Storage.Hashed.Tree( Tree )
 #include "impossible.h"
 
 data FlagContent = NoContent | AbsoluteContent AbsolutePath | AbsoluteOrStdContent AbsolutePathOrStd | StringContent String
@@ -164,6 +167,7 @@
 getContent (Target s) = StringContent s
 getContent (Cc s) = StringContent s
 getContent (Subject s) = StringContent s
+getContent (Charset s) = StringContent s
 getContent (InReplyTo s) = StringContent s
 getContent (SendmailCmd s) = StringContent s
 getContent (Author s) = StringContent s
@@ -214,8 +218,6 @@
 getContent NoSign = NoContent
 getContent HappyForwarding = NoContent
 getContent NoHappyForwarding = NoContent
-getContent SSHControlMaster = NoContent
-getContent NoSSHControlMaster = NoContent
 getContent (RemoteDarcsOpt s) = StringContent s
 getContent (Toks s) = StringContent s
 getContent (WorkRepoDir s) = StringContent s
@@ -313,6 +315,10 @@
 getContent OptimizeHTTP = NoContent
 getContent RecordRollback = NoContent
 getContent NoRecordRollback = NoContent
+getContent AmendUnrecord = NoContent
+getContent NoAmendUnrecord = NoContent
+getContent UseWorkingDir = NoContent
+getContent UseNoWorkingDir = NoContent
 
 getContentString :: DarcsFlag -> Maybe String
 getContentString f =
@@ -552,7 +558,7 @@
   pullConflictOptions, target, ccSend, ccApply, applyConflictOptions, reply, xmloutput,
   distnameOption, patchnameOption, editDescription,
   output, outputAutoName, unidiff, repoCombinator,
-  unified, summary, uncompressNocompress, subject, inReplyTo,
+  unified, summary, uncompressNocompress, subject, charset, inReplyTo,
   nocompress, matchSeveralOrRange, matchSeveralOrLast,
   author, askdeps, lookforadds, ignoretimes, test, notest, help, forceReplace,
   allowUnrelatedRepos,
@@ -728,6 +734,12 @@
                   DarcsNoArgOption [] ["no-record"]
                   NoRecordRollback "don't record the rollback patch (only roll back in working dir)"]
 
+amendUnrecord = DarcsMultipleChoiceOption
+                [DarcsNoArgOption [] ["add"]
+                 NoAmendUnrecord "add the changes to patch (default)",
+                 DarcsNoArgOption [] ["unrecord"]
+                 AmendUnrecord "substract the changes from patch"]
+
 ignoretimes =
     DarcsMultipleChoiceOption
     [DarcsNoArgOption [] ["ignore-times"] IgnoreTimes
@@ -928,6 +940,13 @@
 getSubject (_:fs) = getSubject fs
 getSubject [] = Nothing
 
+charset = DarcsSingleOption $ DarcsArgOption [] ["charset"] Charset "CHARSET" "specify mail charset"
+
+getCharset :: [DarcsFlag] -> Maybe String
+getCharset (Charset s:_) = Just s
+getCharset (_:fs) = getCharset fs
+getCharset [] = Nothing
+
 inReplyTo = DarcsSingleOption $ DarcsArgOption [] ["in-reply-to"] InReplyTo "EMAIL" "specify in-reply-to header"
 getInReplyTo :: [DarcsFlag] -> Maybe String
 getInReplyTo (InReplyTo s:_) = Just s
@@ -973,6 +992,14 @@
      DarcsNoArgOption [] ["darcs-2"] UseFormat2
                           "All features. Related repos must use same format [DEFAULT]."]
 
+useWorkingDir :: DarcsOption
+useWorkingDir =
+  DarcsMultipleChoiceOption
+  [ DarcsNoArgOption [] ["with-working-dir"] UseWorkingDir
+                         "Create a working directory (normal repository)",
+    DarcsNoArgOption [] ["no-working-dir"] UseNoWorkingDir
+                           "Do not create a working directory (bare repository)"]
+
 upgradeFormat :: DarcsOption
 upgradeFormat = DarcsSingleOption $
     DarcsNoArgOption [] ["upgrade"] UpgradeFormat
@@ -1114,7 +1141,7 @@
 -- @action@ is the name of the action being taken, like @\"push\"@
 -- @opts@ is the list of flags which were sent to darcs
 -- @patches@ is the sequence of patches which would be touched by @action@.
-printDryRunMessageAndExit :: RepoPatch p => String -> [DarcsFlag] -> FL (PatchInfoAnd p) C(x y) -> IO ()
+printDryRunMessageAndExit :: (RepoPatch p, ApplyState p ~ Tree) => String -> [DarcsFlag] -> FL (PatchInfoAnd p) C(x y) -> IO ()
 printDryRunMessageAndExit action opts patches =
      do when (DryRun `elem` opts) $ do
           putInfo $ text $ "Would " ++ action ++ " the following changes:"
@@ -1189,6 +1216,9 @@
 humanReadable = DarcsSingleOption $
   DarcsNoArgOption [] ["human-readable"] HumanReadable "give human-readable output"
 
+machineReadable = DarcsSingleOption $
+  DarcsNoArgOption [] ["machine-readable"] MachineReadable "give machine-readable output"
+
 pipe :: DarcsAtomicOption
 pipe =
   DarcsNoArgOption [] ["pipe"] Pipe "ask user interactively for the patch metadata"
@@ -1368,7 +1398,7 @@
 
 -- | Set the DARCS_PATCHES and DARCS_PATCHES_XML environment variables
 -- with info about the given patches, for use in post-hooks.
-setEnvDarcsPatches :: RepoPatch p => FL (PatchInfoAnd p) C(x y) -> IO ()
+setEnvDarcsPatches :: (RepoPatch p, ApplyState p ~ Tree) => FL (PatchInfoAnd p) C(x y) -> IO ()
 #ifndef WIN32
 setEnvDarcsPatches ps = do
   let k = "Defining set of chosen patches"
@@ -1425,6 +1455,7 @@
 --  specified by @PosthookCmd a@ in that list of flags, if any.
 getPosthookCmd :: [DarcsFlag] -> Maybe String
 getPosthookCmd (PosthookCmd a:_) = Just a
+getPosthookCmd (NoPosthook:_) = Nothing
 getPosthookCmd (_:flags) = getPosthookCmd flags
 getPosthookCmd [] = Nothing
 
@@ -1446,18 +1477,13 @@
 --  specified by @PrehookCmd a@ in that list of flags, if any.
 getPrehookCmd :: [DarcsFlag] -> Maybe String
 getPrehookCmd (PrehookCmd a:_) = Just a
+getPrehookCmd (NoPrehook:_) = Nothing
 getPrehookCmd (_:flags) = getPrehookCmd flags
 getPrehookCmd [] = Nothing
 
 networkOptions :: [DarcsOption]
 networkOptions =
    [ DarcsMultipleChoiceOption
-       [ DarcsNoArgOption [] ["ssh-cm"] SSHControlMaster
-                           "use SSH ControlMaster feature"
-       , DarcsNoArgOption [] ["no-ssh-cm"] NoSSHControlMaster
-                           "don't use SSH ControlMaster feature [DEFAULT]"
-       ]
-   , DarcsMultipleChoiceOption
        [ DarcsNoArgOption [] ["no-http-pipelining"] NoHTTPPipelining
                           "disable HTTP pipelining"
        ]
diff --git a/src/Darcs/ColorPrinter.hs b/src/Darcs/ColorPrinter.hs
--- a/src/Darcs/ColorPrinter.hs
+++ b/src/Darcs/ColorPrinter.hs
@@ -180,12 +180,16 @@
 -- defined in 'policy', turning it into a 'Doc'.
 escape :: Policy -> String -> Doc
 escape _ "" = unsafeText ""
-escape po s = hcat (map escapeChar s)
+escape po s = hcat $ escape' s
  where
-  escapeChar c | noEscape po c = unsafeChar c
-  escapeChar ' ' = space
-  escapeChar c = (emph.unsafeText.quoteChar) c
-  emph = markEscape po
+   escape' "" = []
+   escape' s'@(c:_) | mundane c =
+     let (printables, rest) = span mundane s' in
+     (unsafeText printables):(escape' rest)
+   escape' (c:rest) = (emph . unsafeText $ quoteChar c):(escape' rest)
+   mundane c = (noEscape po c) || (c == ' ')
+   emph = (markEscape po)
+
 
 -- | @'noEscape' policy c@ tells wether @c@ will be left as-is
 -- when escaping according to @policy@
diff --git a/src/Darcs/Commands/Add.hs b/src/Darcs/Commands/Add.hs
--- a/src/Darcs/Commands/Add.hs
+++ b/src/Darcs/Commands/Add.hs
@@ -35,15 +35,17 @@
 import Darcs.Repository.State( readRecordedAndPending )
 import Darcs.Repository ( amInHashedRepository, withRepoLock, RepoJob(..), addToPending )
 import Darcs.Patch ( Patchy, PrimPatch, applyToTree, addfile, adddir )
+import Darcs.Patch.Apply ( ApplyState )
 import Darcs.Witnesses.Ordered ( FL(..), (+>+), nullFL )
 import Darcs.Witnesses.Sealed ( Sealed(..), Gap(..), FreeLeft, unFreeLeft )
-import Darcs.Utils ( isFileReallySymlink, doesDirectoryReallyExist
-                   , doesFileReallyExist, treeHas, treeHasDir, treeHasAnycase )
+import Darcs.Utils ( treeHas, treeHasDir, treeHasAnycase, getFileStatus )
 import Darcs.RepoPath ( SubPath, toFilePath, simpleSubPath, toPath )
 import Darcs.Repository.Prefs ( darcsdirFilter, boringFileFilter )
 import Data.Maybe ( maybeToList )
 import System.FilePath.Posix ( takeDirectory, (</>) )
 import qualified System.FilePath.Windows as WindowsFilePath
+import System.Posix.Files( isRegularFile, isDirectory, isSymbolicLink )
+import System.Directory ( getPermissions, readable )
 import Printer( text )
 
 #include "gadts.h"
@@ -130,13 +132,17 @@
     msgs | gotDryRun = dryRunMessages
          | otherwise = normalMessages
 
-addp :: forall prim . (Patchy prim, PrimPatch prim) => AddMessages -> [DarcsFlag] -> Tree IO -> [FilePath] -> IO (FreeLeft (FL prim))
+addp :: forall prim . (Patchy prim, PrimPatch prim, ApplyState prim ~ Tree)
+     => AddMessages -> [DarcsFlag] -> Tree IO -> [FilePath] -> IO (FreeLeft (FL prim))
 addp msgs opts cur0 files = do
     (ps, dups) <-
         foldr
-            (\f rest cur accPS accDups -> do
-                (cur', mp, mdup) <- addp' cur f
-                rest cur' (maybeToList mp ++ accPS) (maybeToList mdup ++ accDups))
+             (\f rest cur accPS accDups -> do
+                    addResult <- addp' cur f
+                    case addResult of
+                        -- If a single file fails to add, stop further processing.
+                        (_, Nothing, Nothing) -> return ([], [])
+                        (cur', mp, mdup) -> rest cur' (maybeToList mp ++ accPS) (maybeToList mdup ++ accDups))
             (\_ ps dups -> return (reverse ps, dups))
             files
             cur0 [] []
@@ -176,18 +182,17 @@
   addp' :: Tree IO -> FilePath -> IO (Tree IO, Maybe (FreeLeft (FL prim)), Maybe FilePath)
   addp' cur f = do
     already_has <- (if gotAllowCaseOnly then treeHas else treeHasAnycase) cur f
-    isdir <- doesDirectoryReallyExist f
-    isfile <- doesFileReallyExist f
-    islink <- isFileReallySymlink f
-    case (already_has, is_badfilename, isdir, isfile, islink) of
-      (True, _, _, _, _) -> return (cur, Nothing, Just f)
-      (_, True, _, _, _) ->
+    mstatus <- getFileStatus f
+    case (already_has, is_badfilename, mstatus) of
+      (True, _, _) -> return (cur, Nothing, Just f)
+      (_, True, _) ->
         do putWarning opts . text $
              "The filename " ++ f ++ " is invalid under Windows.\nUse --reserved-ok to allow it."
            return add_failure
-      (_, _, True, _, _) -> trypatch $ freeGap (adddir f :>: NilFL)
-      (_, _, _, True, _) -> trypatch $ freeGap (addfile f :>: NilFL)
-      (_, _, _, _, True) -> do putWarning opts . text $ "Sorry, file " ++ f ++
+      (_, _, Just s) | isDirectory s    -> trypatch $ freeGap (adddir f :>: NilFL)
+                     | isRegularFile s  -> trypatch $ freeGap (addfile f :>: NilFL)
+                     | isSymbolicLink s -> do
+                               putWarning opts . text $ "Sorry, file " ++ f ++
                                   " is a symbolic link, which is unsupported by darcs."
                                return add_failure
       _ -> do putWarning opts . text $ "File "++ f ++" does not exist!"
@@ -195,22 +200,33 @@
       where is_badfilename = not (gotAllowWindowsReserved || WindowsFilePath.isValid f)
             add_failure = (cur, Nothing, Nothing)
             trypatch :: FreeLeft (FL prim) -> IO (Tree IO, Maybe (FreeLeft (FL prim)), Maybe FilePath)
-            trypatch p = do Sealed p' <- return $ unFreeLeft p
-                            ok <- treeHasDir cur parentdir
-                            if ok
-                             then do
+            trypatch p = do perms <- getPermissions f
+                            if not $ readable perms
+                              then do
+                                putWarning opts . text $
+                                  msgSkipping msgs ++ " '" ++ f ++ "': permission denied "
+                                return (cur, Nothing, Nothing)
+                              else trypatch' p
+            trypatch' p = do Sealed p' <- return $ unFreeLeft p
+                             ok <- treeHasDir cur parentdir
+                             if ok
+                               then do
                                    tree <- applyToTree p' cur
                                    putVerbose opts . text $ msgAdding msgs++" '"++f++"'"
                                    return (tree, Just p, Nothing)
-                             else do
+                               else do
                                    putWarning opts . text $ msgSkipping msgs ++ " '" ++ f ++ "' ... couldn't add parent directory '" ++ parentdir ++ "' to repository"
                                    return (cur, Nothing, Nothing)
-                          `catch` \e -> do
-                            putWarning opts . text $ msgSkipping msgs ++ " '" ++ f ++ "' ... " ++ show e
-                            return (cur, Nothing, Nothing)
+                             `catch` \e -> do
+                               putWarning opts . text $ msgSkipping msgs ++ " '" ++ f ++ "' ... " ++ show e
+                               return (cur, Nothing, Nothing)
             parentdir = takeDirectory f
   gotAllowCaseOnly = doAllowCaseOnly opts
   gotAllowWindowsReserved = doAllowWindowsReserved opts
+
+doesDirectoryReallyExist :: FilePath -> IO Bool
+doesDirectoryReallyExist f =
+  maybe False isDirectory `fmap` getFileStatus f
 
 data AddMessages =
     AddMessages
diff --git a/src/Darcs/Commands/AmendRecord.hs b/src/Darcs/Commands/AmendRecord.hs
--- a/src/Darcs/Commands/AmendRecord.hs
+++ b/src/Darcs/Commands/AmendRecord.hs
@@ -25,7 +25,7 @@
 import Darcs.Flags ( DarcsFlag(Author, LogFile, PatchName, AskDeps,
                                EditLongComment, PromptLongComment, KeepDate)
                    , isInteractive
-                   , diffingOpts, compression )
+                   , diffingOpts, compression, removeFromAmended )
 import Darcs.Lock ( worldReadableTemp )
 import Darcs.RepoPath ( toFilePath )
 import Darcs.Patch.PatchInfoAnd ( PatchInfoAnd, n2pia, hopefully, info, patchDesc )
@@ -37,14 +37,15 @@
                   )
 import Darcs.Repository.Prefs ( globalPrefsDirDoc )
 import Darcs.Patch ( RepoPatch, description, PrimOf, fromPrims,
-                     infopatch, getdeps, adddeps, effect,
+                     infopatch, getdeps, adddeps, effect, invertFL
                    )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Patch.Prim ( canonizeFL )
 import Darcs.Patch.Info ( piAuthor, piName, piLog, piDateString,
                           PatchInfo, patchinfo, isInverted, isTag, invertName,
                         )
 import Darcs.Patch.Split ( primSplitter )
-import Darcs.Witnesses.Ordered ( FL(..), (:>)(..), (+>+), nullFL )
+import Darcs.Witnesses.Ordered ( FL(..), (:>)(..), (+>+), nullFL, reverseRL )
 import Darcs.SelectChanges ( selectChanges, WhichChanges(..),
                              selectionContextPrim,
                              runSelection,
@@ -60,11 +61,12 @@
                          workingRepoDir,
                         matchOneNontag, umaskOption,
                          test, listRegisteredFiles,
-                        getEasyAuthor, setScriptsExecutableOption
+                        getEasyAuthor, setScriptsExecutableOption, amendUnrecord
                       )
 import Darcs.Utils ( askUser, clarifyErrors, PromptConfig(..), promptChar )
 import Darcs.RepoPath ( SubPath() )
 import Printer ( putDocLn )
+import Storage.Hashed.Tree( Tree )
 #include "gadts.h"
 
 amendrecordDescription :: String
@@ -125,7 +127,7 @@
                                                     allInteractive,
                                                     author, patchnameOption, askdeps, askLongComment, keepDate,
                                                     lookforadds,
-                                                    workingRepoDir]}
+                                                    workingRepoDir, amendUnrecord]}
 
 amendrecordCmd :: [DarcsFlag] -> [String] -> IO ()
 amendrecordCmd opts args = if null args
@@ -149,11 +151,20 @@
                                       (filter (==All) opts)
                                       (Just primSplitter)
                                       (map toFilePath <$> files)
-                 chosenPatches <- runSelection (selectChanges First ch) context
+                 (chosenPatches :> _) <- runSelection (selectChanges First ch) context
                  addChangesToPatch opts repository oldp chosenPatches
         if not (isTag (info oldp))
               -- amending a normal patch
-           then go =<< unrecordedChanges (diffingOpts opts) repository files
+           then if removeFromAmended opts
+                   then do let sel = selectChanges Last (effect oldp)
+                               context = selectionContextPrim "unrecord"
+                                             (filter (==All) opts)
+                                             (Just primSplitter)
+                                             (map toFilePath <$> files)
+                           (_ :> chosenPrims) <- runSelection sel context
+                           let invPrims = reverseRL (invertFL chosenPrims)
+                           addChangesToPatch opts repository oldp invPrims
+                   else go =<< unrecordedChanges (diffingOpts opts) repository files
               -- amending a tag
            else if hasEditMetadata opts && isNothing files
                         -- the user is not trying to add new changes to the tag so there is
@@ -168,10 +179,10 @@
                              else putStrLn "You cannot add new changes to a tag, but you are allowed to edit tag's metadata (see darcs help amend-record)."
                            go NilFL
 
-addChangesToPatch :: forall p C(r u t x y) . (RepoPatch p)
+addChangesToPatch :: forall p C(r u t x y) . (RepoPatch p, ApplyState p ~ Tree)
                   => [DarcsFlag] -> Repository p C(r u t) -> PatchInfoAnd p C(x t)
-                  -> (FL (PrimOf p) :> FL (PrimOf p)) C(t y) -> IO ()
-addChangesToPatch opts repository oldp (chs:>_) =
+                  -> FL (PrimOf p) C(t y) -> IO ()
+addChangesToPatch opts repository oldp chs =
                   if (nullFL chs && not (hasEditMetadata opts))
                   then putStrLn "You don't want to record anything!"
                   else do
@@ -197,7 +208,7 @@
                          putStrLn "Finished amending patch:"
                          putDocLn $ description newp
 
-updatePatchHeader :: forall p C(x y r u t) . (RepoPatch p)
+updatePatchHeader :: forall p C(x y r u t) . (RepoPatch p, ApplyState p ~ Tree)
                   => [DarcsFlag] -> Repository p C(r u t)
                   -> PatchInfoAnd p C(t x) -> FL (PrimOf p) C(x y)
                   -> IO (Maybe String, PatchInfoAnd p C(t y))
diff --git a/src/Darcs/Commands/Annotate.hs b/src/Darcs/Commands/Annotate.hs
--- a/src/Darcs/Commands/Annotate.hs
+++ b/src/Darcs/Commands/Annotate.hs
@@ -23,7 +23,7 @@
 
 import Darcs.Commands ( DarcsCommand(..), nodefaults )
 import Darcs.Arguments ( DarcsFlag(..), workingRepoDir,
-                         summary, unified, -- machineReadable,
+                         summary, unified, machineReadable,
                         xmloutput, creatorhash,
                         fixSubPaths,
                         listRegisteredFiles,
@@ -35,6 +35,7 @@
 import Darcs.Repository ( Repository, amInHashedRepository, withRepository, RepoJob(..), readRepo )
 import Darcs.Patch.Set ( newset2RL )
 import Darcs.Patch ( RepoPatch, Named, patch2patchinfo, xmlSummary, invertRL )
+import Darcs.Patch.Apply( ApplyState )
 import qualified Darcs.Patch ( summary )
 import qualified Data.ByteString.Char8 as BC ( pack, concat, intercalate )
 import Data.ByteString.Lazy ( toChunks )
@@ -50,7 +51,7 @@
 import qualified Darcs.Annotate as A
 import Printer ( putDocLn, Doc )
 
-import Storage.Hashed.Tree( TreeItem(..), readBlob, list, expand )
+import Storage.Hashed.Tree( Tree, TreeItem(..), readBlob, list, expand )
 import Storage.Hashed.Monad( findM, virtualTreeIO )
 import Storage.Hashed.AnchoredPath( floatPath, anchorPath )
 #include "gadts.h"
@@ -85,7 +86,7 @@
                          commandArgdefaults = nodefaults,
                          commandAdvancedOptions = [],
                          commandBasicOptions = [summary,unified,
-                                                 -- machineReadable,
+                                                 machineReadable,
                                                  xmloutput,
                                                  matchOne, creatorhash,
                                                  workingRepoDir]}
@@ -93,8 +94,9 @@
 annotateCmd :: [DarcsFlag] -> [String] -> IO ()
 annotateCmd opts files = withRepository opts (RepoJob (annotate' opts files))
 
-annotate' ::
-  (RepoPatch p) => [DarcsFlag] -> [String] -> Repository p C(r u r) -> IO ()
+annotate' :: (RepoPatch p, ApplyState p ~ Tree)
+          => [DarcsFlag] -> [String] -> Repository p C(r u r) -> IO ()
+
 annotate' opts [] repository = do
   when (not $ haveNonrangeMatch opts) $
       fail $ "Annotate requires either a patch pattern or a " ++
@@ -134,7 +136,7 @@
 
   found <- findM initial (floatPath $ toFilePath path)
   -- TODO need to decide about the --machine flag
-  let fmt = {- if MachineReadable `elem` opts then A.machineFormat else -} A.format
+  let fmt = if MachineReadable `elem` opts then A.machineFormat else A.format
   case found of
     Nothing -> fail $ "No such file or directory: " ++ toFilePath path
     Just (SubTree s) -> do
diff --git a/src/Darcs/Commands/Apply.hs b/src/Darcs/Commands/Apply.hs
--- a/src/Darcs/Commands/Apply.hs
+++ b/src/Darcs/Commands/Apply.hs
@@ -17,7 +17,7 @@
 
 {-# LANGUAGE CPP, PatternGuards #-}
 
-module Darcs.Commands.Apply ( apply ) where
+module Darcs.Commands.Apply ( apply, getPatchBundle ) where
 import System.Exit ( ExitCode(..), exitWith )
 import Prelude hiding ( catch )
 import System.IO ( hClose, stdout, stderr )
@@ -59,7 +59,8 @@
 import Darcs.Patch.Set ( Origin )
 #endif
 import Darcs.Patch.Set ( newset2RL )
-import Darcs.Patch ( RepoPatch, description )
+import Darcs.Patch ( RepoPatch, description, PrimOf )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Patch.Info ( PatchInfo, humanFriendly )
 import Darcs.Utils ( PromptConfig(..), promptChar )
 import Darcs.Witnesses.Ordered ( FL, RL(..), (:\/:)(..), (:>)(..),
@@ -80,6 +81,7 @@
 import Darcs.Patch.Bundle ( scanBundle )
 import Darcs.Witnesses.Sealed ( Sealed(Sealed) )
 import Printer ( packedString, vcat, text, empty, renderString )
+import Storage.Hashed.Tree( Tree )
 
 #include "impossible.h"
 
@@ -198,8 +200,8 @@
                          else All : opts
 applyCmd _ _ = impossible
 
-applyItNow :: FORALL(p r u t x z) RepoPatch p =>
-             [DarcsFlag] -> String -> Repository p C(r u t)
+applyItNow :: FORALL(p r u t x z) (RepoPatch p, ApplyState (PrimOf p) ~ Tree, ApplyState p ~ Tree)
+           => [DarcsFlag] -> String -> Repository p C(r u t)
            -> FL (PatchInfoAnd p) C(x t) -> FL (PatchInfoAnd p) C(x z) -> IO ()
 applyItNow opts from_whom repository us' to_be_applied = do
    printDryRunMessageAndExit "apply" opts to_be_applied
diff --git a/src/Darcs/Commands/Changes.hs b/src/Darcs/Commands/Changes.hs
--- a/src/Darcs/Commands/Changes.hs
+++ b/src/Darcs/Commands/Changes.hs
@@ -54,6 +54,7 @@
 import Darcs.Patch.Depends ( findCommonWithThem )
 import Darcs.Patch.Bundle( contextPatches )
 import Darcs.Patch.TouchesFiles ( lookTouch )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Patch ( RepoPatch, invert, xmlSummary, description, applyToFilepaths,
                      listTouchedFiles, effect )
 import Darcs.Witnesses.Eq ( EqCheck(..) )
@@ -70,6 +71,7 @@
 import Progress ( setProgressMode, debugMessage )
 import Darcs.SelectChanges ( viewChanges )
 import Darcs.Witnesses.Sealed ( Sealed2(..), unseal2, Sealed(..), seal2 )
+import Storage.Hashed.Tree( Tree )
 
 changesDescription :: String
 changesDescription = "List patches in the repository."
@@ -165,7 +167,7 @@
  "whereas `darcs changes --last 3 foo.c' will, of the last three\n" ++
  "patches, print only those that affect foo.c.\n"
 
-getChangesInfo :: RepoPatch p => [DarcsFlag] -> Maybe [FilePath]
+getChangesInfo :: (RepoPatch p, ApplyState p ~ Tree) => [DarcsFlag] -> Maybe [FilePath]
                -> PatchSet p C(x y)
                -> ([(Sealed2 (PatchInfoAnd p), [FilePath])], [FilePath], Doc)
 getChangesInfo opts plain_fs ps =
@@ -197,7 +199,7 @@
 -- limit" -- maxcount, that could be Nothing (return everything) or
 -- "Just n" -- returns at most n patches touching the file (starting
 -- from the beginning of the patch list).
-filterPatchesByNames :: RepoPatch p =>
+filterPatchesByNames :: (RepoPatch p, ApplyState p ~ Tree) =>
                            Maybe Int -- ^ maxcount
                         -> [FilePath] -- ^ filenames
                         -> [Sealed2 (PatchInfoAnd p)] -- ^ patchlist
@@ -224,7 +226,7 @@
 x -:- ~(xs,y,z) = (x:xs,y,z)
 
 changelog :: forall p C(start x)
-           . RepoPatch p
+           . (RepoPatch p, ApplyState p ~ Tree)
           => [DarcsFlag] -> PatchSet p C(start x)
           -> ([(Sealed2 (PatchInfoAnd p), [FilePath])], [FilePath], Doc)
           -> Doc
diff --git a/src/Darcs/Commands/Check.hs b/src/Darcs/Commands/Check.hs
--- a/src/Darcs/Commands/Check.hs
+++ b/src/Darcs/Commands/Check.hs
@@ -27,17 +27,20 @@
                         leaveTestDir, workingRepoDir, ignoretimes
                       )
 import Darcs.Flags(willIgnoreTimes)
-import Darcs.Repository.Repair( replayRepository, checkIndex
-                              , RepositoryConsistency(..) )
+import Darcs.Repository.Repair( replayRepository, checkIndex,
+                                replayRepositoryInTemp,
+                                RepositoryConsistency(..) )
 import Darcs.Repository ( Repository, amInHashedRepository, withRepository,
                           testRecorded, readRecorded, RepoJob(..),
                           withRepoLock, replacePristine, writePatchSet )
 import Darcs.Patch ( RepoPatch, showPatch, PrimOf )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Witnesses.Ordered ( FL(..) )
 import Darcs.Witnesses.Sealed ( Sealed(..), unFreeLeft )
 import Darcs.Repository.Prefs ( filetypeFunction )
 import Darcs.Diff( treeDiff )
 import Printer ( text, ($$), (<+>) )
+import Storage.Hashed.Tree( Tree )
 
 #include "gadts.h"
 
@@ -76,9 +79,11 @@
 checkCmd opts _ = withRepository opts (RepoJob (check' opts))
 
 check'
-  :: forall p C(r u t) . (RepoPatch p) => [DarcsFlag] -> Repository p C(r u t) -> IO ()
+  :: forall p C(r u t) . (RepoPatch p, ApplyState p ~ Tree)
+  => [DarcsFlag] -> Repository p C(r u t) -> IO ()
 check' opts repository = do
-    failed <- replayRepository repository opts $ \ state -> do
+    state <- replayRepositoryInTemp repository opts
+    failed <-
       case state of
         RepositoryConsistent -> do
           putInfo opts $ text "The repository is consistent!"
@@ -100,13 +105,18 @@
    where
      brokenPristine newpris = do
          putInfo opts $ text "Looks like we have a difference..."
-         mc <- readRecorded repository
-         ftf <- filetypeFunction
-         Sealed (diff :: FL (PrimOf p) C(r r2)) <- unFreeLeft `fmap` treeDiff ftf newpris mc :: IO (Sealed (FL (PrimOf p) C(r)))
-         putInfo opts $ case diff of
+         mc' <- (fmap Just $ readRecorded repository) `catch` (\_ -> return Nothing)
+         case mc' of
+           Nothing -> do putInfo opts $ text "cannot compute that difference, try repair"
+                         putInfo opts $ text "" $$ text "Inconsistent repository"
+                         return ()
+           Just mc -> do
+               ftf <- filetypeFunction
+               Sealed (diff :: FL (PrimOf p) C(r r2)) <- unFreeLeft `fmap` treeDiff ftf newpris mc :: IO (Sealed (FL (PrimOf p) C(r)))
+               putInfo opts $ case diff of
                         NilFL -> text "Nothing"
                         patch -> text "Difference: " <+> showPatch patch
-         putInfo opts $ text ""
+               putInfo opts $ text ""
                      $$ text "Inconsistent repository!"
 
 
diff --git a/src/Darcs/Commands/Dist.hs b/src/Darcs/Commands/Dist.hs
--- a/src/Darcs/Commands/Dist.hs
+++ b/src/Darcs/Commands/Dist.hs
@@ -31,7 +31,7 @@
 
 import Darcs.Commands ( DarcsCommand(..),
                         nodefaults )
-import Darcs.Arguments ( DarcsFlag(Verbose, DistName, SetScriptsExecutable), distnameOption,
+import Darcs.Arguments ( DarcsFlag(Verbose, Quiet, DistName, SetScriptsExecutable), distnameOption,
                          workingRepoDir, matchOne, storeInMemory,
                          setScriptsExecutableOption )
 import Darcs.Match ( getNonrangeMatch, haveNonrangeMatch )
@@ -99,24 +99,23 @@
 distCmd :: [DarcsFlag] -> [String] -> IO ()
 distCmd opts _ = withRepoReadLock opts $ RepoJob $ \repository -> do
   distname <- getDistName opts
-  verb <- return $ Verbose `elem` opts
   predist <- getPrefval "predist"
   formerdir <- getCurrentDirectory
-  resultfile <- return (formerdir</>distname++".tar.gz")
+  let resultfile = formerdir </> distname ++ ".tar.gz"
   withTempDir "darcsdist" $ \tempdir -> do
-    setCurrentDirectory (formerdir)
+    setCurrentDirectory formerdir
     withTempDir (toFilePath tempdir </> takeFileName distname) $ \ddir -> do
       if haveNonrangeMatch opts
         then withCurrentDirectory ddir $ getNonrangeMatch repository opts
         else createPartialsPristineDirectoryTree repository [""] (toFilePath ddir)
       ec <- case predist of Nothing -> return ExitSuccess
                             Just pd -> system pd
-      if (ec == ExitSuccess)
+      if ec == ExitSuccess
           then
               do
               withCurrentDirectory ddir $
                   when (SetScriptsExecutable `elem` opts) setScriptsExecutable
-              doDist verb tempdir ddir resultfile
+              doDist opts tempdir ddir resultfile
           else
               do
               putStrLn "Dist aborted due to predist failure"
@@ -125,14 +124,14 @@
 -- | This function performs the actual distribution action itself.
 -- NB - it does /not/ perform the pre-dist, that should already
 -- have completed successfully before this is invoked.
-doDist :: Bool -> AbsolutePath -> AbsolutePath -> FilePath -> IO ()
-doDist verb tempdir ddir resultfile = do
+doDist :: [DarcsFlag] -> AbsolutePath -> AbsolutePath -> FilePath -> IO ()
+doDist opts tempdir ddir resultfile = do
   setCurrentDirectory (toFilePath tempdir)
   let safeddir = safename $ takeFileName $ toFilePath ddir
   entries <- pack "." [safeddir]
-  when verb $ putStr $ unlines $ map entryPath entries
+  when (Verbose `elem` opts) $ putStr $ unlines $ map entryPath entries
   writeFile resultfile $ compress $ write entries
-  putStrLn $ "Created dist as "++resultfile
+  when (Quiet `notElem` opts) $ putStrLn $ "Created dist as " ++ resultfile
   where
     safename n@(c:_) | isAlphaNum c  = n
     safename n = "./" ++ n
diff --git a/src/Darcs/Commands/GZCRCs.hs b/src/Darcs/Commands/GZCRCs.hs
--- a/src/Darcs/Commands/GZCRCs.hs
+++ b/src/Darcs/Commands/GZCRCs.hs
@@ -27,7 +27,7 @@
 import Control.Monad ( when, unless )
 import Control.Monad.Trans ( liftIO )
 import Control.Monad.Writer ( runWriterT, tell )
-import Data.List ( intersperse )
+import Data.List ( intercalate )
 import Data.Monoid ( Any(..), Sum(..) )
 
 import qualified Data.ByteString as B
@@ -90,7 +90,7 @@
   ]
 
 formatText :: [String] -> String
-formatText = unlines . concat . intersperse [""] . map (map unwords . para 80 . words)
+formatText = unlines . intercalate [""] . map (map unwords . para 80 . words)
 
 -- |Take a list of words and split it up so that each chunk fits into the specified width
 -- when spaces are included. Any words longer than the specified width end up in a chunk
diff --git a/src/Darcs/Commands/Get.hs b/src/Darcs/Commands/Get.hs
--- a/src/Darcs/Commands/Get.hs
+++ b/src/Darcs/Commands/Get.hs
@@ -27,9 +27,10 @@
 import Darcs.Commands ( DarcsCommand(..), nodefaults, commandAlias, putInfo )
 import Darcs.Flags( compression )
 import Darcs.Arguments ( DarcsFlag( NewRepo, Lazy,
-                                    UseFormat2, UseHashedInventory,
+                                    UseFormat2,
+                                    UseHashedInventory, UseNoWorkingDir,
                                     SetScriptsExecutable, OnePattern ),
-                        getContext,
+                        getContext, useWorkingDir,
                         partial, reponame,
                         matchOneContext, setDefault, setScriptsExecutableOption,
                         networkOptions, makeScriptsExecutable, usePacks )
@@ -37,11 +38,11 @@
                           tentativelyRemovePatches, patchSetToRepository,
                           copyRepository, tentativelyAddToPending,
                           finalizeRepositoryChanges, setScriptsExecutable
-                        , invalidateIndex )
+                        , invalidateIndex, createRepository )
 import Darcs.Repository.Format ( identifyRepoFormat, RepoFormat,
                                  RepoProperty ( Darcs2, HashedInventory ), formatHas )
-import Darcs.Repository (createRepository)
-import Darcs.Patch ( RepoPatch, apply, invert, effect )
+import Darcs.Patch ( RepoPatch, apply, invert, effect, PrimOf )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Witnesses.Ordered ( lengthFL, mapFL_FL, (:>)(..) )
 import Darcs.Patch.PatchInfoAnd ( hopefully )
 import Darcs.Patch.Depends ( findCommonWithThem, countUsThem )
@@ -55,6 +56,7 @@
 import Darcs.Witnesses.Sealed ( Sealed(..) )
 import Darcs.Global ( darcsdir )
 import English ( englishNum, Noun(..) )
+import Storage.Hashed.Tree( Tree )
 #include "gadts.h"
 
 getDescription :: String
@@ -104,7 +106,9 @@
                                             partial,
                                             matchOneContext,
                                             setDefault True,
-                                            setScriptsExecutableOption]}
+                                            setScriptsExecutableOption,
+                                            useWorkingDir]
+                   }
 
 clone :: DarcsCommand
 clone = commandAlias "clone" Nothing get
@@ -131,7 +135,7 @@
   writeBinFile (darcsdir++"/hashed_inventory") ""
 
   if not (null [p | OnePattern p <- opts]) -- --to-match given
-     && not (Lazy `elem` opts)
+     && Lazy `notElem` opts
     then withRepository opts $ RepoJob $ \repository -> do
       debugMessage "Using economical get --to-match handling"
       fromrepo <- identifyRepositoryFor  repository repodir
@@ -148,10 +152,10 @@
 copyRepoAndGoToChosenVersion :: [DarcsFlag] -> String -> RepoFormat -> IO ()
 copyRepoAndGoToChosenVersion opts repodir rfsource = do
   copyRepo
-  withRepository opts $ RepoJob $ \repository -> goToChosenVersion repository opts
+  withRepository opts ((RepoJob $ \repository -> goToChosenVersion repository opts) :: RepoJob ())
   putInfo opts $ text "Finished getting."
       where copyRepo =
-                withRepository opts $ RepoJob $ \repository -> do
+                withRepository opts $ RepoJob $ \repository ->
                   if formatHas HashedInventory rfsource
                    then do
                                    debugMessage "Identifying and copying repository..."
@@ -168,7 +172,7 @@
                                                $$ text "***********************************************************************"
                                    copyRepoHashed repository
             copyRepoHashed repository =
-              do identifyRepositoryFor repository repodir >>= copyRepository
+              do identifyRepositoryFor repository repodir >>= flip copyRepository (UseNoWorkingDir `notElem` opts)
                  when (SetScriptsExecutable `elem` opts) setScriptsExecutable
 
 makeRepoName :: [DarcsFlag] -> FilePath -> IO String
@@ -235,8 +239,9 @@
                             then Right ()
                             else Left $ "Context file "++toFilePath f++" does not exist"
 
-goToChosenVersion :: RepoPatch p => Repository p C(r u r)
-                     -> [DarcsFlag] -> IO ()
+goToChosenVersion :: (RepoPatch p, ApplyState p ~ Tree, ApplyState (PrimOf p) ~ Tree)
+                  => Repository p C(r u r)
+                  -> [DarcsFlag] -> IO ()
 goToChosenVersion repository opts =
     when (havePatchsetMatch opts) $ do
        debugMessage "Going to specified version..."
@@ -246,8 +251,8 @@
             errorDoc $ text "Missing patches from context!" -- FIXME : - (
        _ :> us' <- return $ findCommonWithThem patches context
        let ps = mapFL_FL hopefully us'
-       putInfo opts $ text $ "Unapplying " ++ (show $ lengthFL ps) ++ " " ++
-                   (englishNum (lengthFL ps) (Noun "patch") "")
+       putInfo opts $ text $ "Unapplying " ++ show (lengthFL ps) ++ " " ++
+                   englishNum (lengthFL ps) (Noun "patch") ""
        invalidateIndex repository
        withRepoLock opts $ RepoJob $ \_ ->
 -- Warning:  A do-notation statement discarded a result of type Repository p r u z.
diff --git a/src/Darcs/Commands/Help.hs b/src/Darcs/Commands/Help.hs
--- a/src/Darcs/Commands/Help.hs
+++ b/src/Darcs/Commands/Help.hs
@@ -29,12 +29,13 @@
 import Darcs.Lock ( environmentHelpTmpdir, environmentHelpKeepTmpdir )
 import Darcs.Patch.Match ( helpOnMatchers )
 import Darcs.Repository.Prefs ( boringFileHelp, binariesFileHelp, environmentHelpHome )
+import Darcs.Ssh ( environmentHelpSsh, environmentHelpScp, environmentHelpSshPort )
 import Darcs.Utils ( withCurrentDirectory, environmentHelpEditor, environmentHelpPager )
-import Data.Char ( isAlphaNum, toLower )
-import Data.List ( groupBy, isPrefixOf )
+import Data.Char ( isAlphaNum, toLower, toUpper )
+import Data.List ( groupBy, isPrefixOf, partition, intercalate, nub )
+import Data.Maybe ( isNothing, mapMaybe )
 import English ( andClauses )
-import Printer ( text )
-import Ssh ( environmentHelpSsh, environmentHelpScp, environmentHelpSshPort )
+import Printer (text, vcat, vsep, ($$))
 import System.Exit ( ExitCode(..), exitWith )
 import Version ( version )
 import URL (environmentHelpProxy, environmentHelpProxyPassword)
@@ -67,7 +68,22 @@
 helpCmd :: [DarcsFlag] -> [String] -> IO ()
 helpCmd _ ["manpage"] = putStr $ unlines manpageLines
 helpCmd _ ["patterns"] = viewDoc $ text $ helpOnMatchers
-helpCmd _ ["environment"] = viewDoc $ text $ helpOnEnvironment
+helpCmd _ ("environment":vs_) =
+    viewDoc . vsep $
+       if null vs
+          then header : map render environmentHelp
+          else          map render known ++ [footer]
+    where header = vcat [ text "Environment Variables"
+                        , text "====================="
+                        ]
+          footer = text ("Unknown environment variables: " ++ intercalate ", " unknown)
+          render (ks, ds) = text (andClauses ks ++ ":") $$
+                            vcat [text ("  " ++ d) | d <- ds]
+          lookupEnv v = [ e | e@(ks,_) <- environmentHelp, v `elem` ks ]
+          unknown = [ v | v <- vs, null (lookupEnv v) ]
+          known   = nub (concatMap lookupEnv vs)
+          vs      = map (map toUpper) vs_
+
 helpCmd _ [] = viewDoc $ text $ usage commandControlList
 
 helpCmd _ (cmd:args) =
@@ -125,15 +141,6 @@
  environmentHelpSshPort,
  environmentHelpProxy,
  environmentHelpProxyPassword]
-
--- | The rendered form of the data in 'environment_help'.
-helpOnEnvironment :: String
-helpOnEnvironment =
-    "Environment Variables\n" ++
-    "=====================\n\n" ++
-    unlines [andClauses ks ++ ":\n" ++
-                     (unlines $ map ("  " ++) ds)
-                     | (ks, ds) <- environmentHelp]
 
 -- | This module is responsible for emitting a darcs "man-page", a
 -- reference document used widely on Unix-like systems.  Manpages are
diff --git a/src/Darcs/Commands/Init.hs b/src/Darcs/Commands/Init.hs
--- a/src/Darcs/Commands/Init.hs
+++ b/src/Darcs/Commands/Init.hs
@@ -18,7 +18,7 @@
 module Darcs.Commands.Init ( initialize, initializeCmd ) where
 import Darcs.Commands ( DarcsCommand(..), nodefaults )
 import Darcs.Arguments ( DarcsFlag, workingRepoDir,
-                        patchFormatChoices )
+                        patchFormatChoices, useWorkingDir )
 import Darcs.Repository ( amNotInRepository, createRepository )
 
 initializeDescription :: String
@@ -53,8 +53,10 @@
                          commandGetArgPossibilities = return [],
                          commandArgdefaults = nodefaults,
                          commandAdvancedOptions = [],
+
                          commandBasicOptions = [patchFormatChoices,
-                                                  workingRepoDir]}
+                                                useWorkingDir,
+                                                workingRepoDir]}
 
 initializeCmd :: [DarcsFlag] -> [String] -> IO ()
 initializeCmd opts _ = createRepository opts
diff --git a/src/Darcs/Commands/Move.hs b/src/Darcs/Commands/Move.hs
--- a/src/Darcs/Commands/Move.hs
+++ b/src/Darcs/Commands/Move.hs
@@ -41,6 +41,7 @@
 import qualified Darcs.Patch
 import Darcs.Patch ( RepoPatch, PrimPatch )
 import Darcs.Patch.FileName ( fp2fn, fn2fp, superName )
+import Darcs.Patch.Apply( ApplyState )
 import Data.List ( nub, sort )
 import qualified System.FilePath.Windows as WindowsFilePath
 
@@ -86,13 +87,14 @@
 
 moveCmd :: [DarcsFlag] -> [String] -> IO ()
 moveCmd opts args
-  | length args < 2 = fail $ "The `darcs move' command requires at least" ++
-      "two arguments."
+  | length args < 2 =
+      fail $ "The `darcs move' command requires at least two arguments."
   | length args == 2 = do
       xs <- maybeFixSubPaths opts args
       case xs of
         [Just from, Just to]
           | from == to -> fail "Cannot rename a file or directory onto itself!"
+          | toFilePath from == "" -> fail "Cannot move the root of the repository"
           | otherwise -> moveFile opts from to
         _ -> fail "Both source and destination must be valid."
   | otherwise = let (froms, to) = (init args, last args) in do
@@ -110,14 +112,14 @@
 moveFile :: [DarcsFlag] -> SubPath -> SubPath -> IO ()
 moveFile opts old new = withRepoLock opts $ RepoJob $ \repository -> do
   work <- readPlainTree "."
+  cur <- readRecordedAndPending repository
   let old_fp = toFilePath old
       new_fp = toFilePath new
-  has_new <- treeHasDir work new_fp
-  has_old <- treeHas work old_fp
-  if has_new && has_old
+  new_is_a_dir <- treeHasDir work new_fp
+  old_is_a_dir <- treeHasDir cur old_fp
+  if new_is_a_dir && not old_is_a_dir
    then moveToDir repository opts [old_fp] new_fp
    else do
-    cur <- readRecordedAndPending repository
     addpatch <- checkNewAndOldFilenames opts cur work (old_fp,new_fp)
     withSignalsBlocked $ do
       case unFreeLeft <$> addpatch of
@@ -129,7 +131,8 @@
 moveFilesToDir opts froms to = withRepoLock opts $ RepoJob $ \repo ->
   moveToDir repo opts (map toFilePath froms) $ toFilePath to
 
-moveToDir :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] -> [FilePath] -> FilePath -> IO ()
+moveToDir :: (RepoPatch p, ApplyState p ~ Tree)
+          => Repository p C(r u t) -> [DarcsFlag] -> [FilePath] -> FilePath -> IO ()
 moveToDir repository opts moved finaldir =
   let movefns = map takeFileName moved
       movetargets = map (finaldir </>) movefns
@@ -149,7 +152,6 @@
      fail $ "The filename " ++ new ++ " is not valid under Windows.\n" ++
             "Use --reserved-ok to allow such filenames."
   has_work <- treeHas work old
-  has_cur <- treeHas cur old
   maybe_add_file_thats_been_moved <-
      if has_work -- We need to move the object
      then do has_target <- treeHasDir work (fn2fp $ superName $ fp2fn new)
@@ -160,18 +162,21 @@
              has_new <- it_has work
              when has_new $ fail $ already_exists "working directory"
              return Nothing
-     else do has_new <- treeHas work new
-             unless has_new $ fail $ doesnt_exist "working directory"
-             return (Just (freeGap (Darcs.Patch.addfile old)))
-  if has_cur
-     then do has_target <- treeHasDir cur (fn2fp $ superName $ fp2fn new)
-             unless has_target $
-                    fail $ "The target directory " ++
-                             (fn2fp $ superName $ fp2fn new)++
-                             " isn't known in working directory, did you forget to add it?"
-             has_new <- it_has cur
-             when has_new $ fail $ already_exists "repository"
-     else fail $ doesnt_exist "repository"
+     else do
+       has_new <- treeHas work new
+       has_cur_dir <- treeHasDir cur old
+       unless has_new $ fail $ doesnt_exist "working directory"
+       let add_patch = if has_cur_dir
+                       then Darcs.Patch.adddir old
+                       else Darcs.Patch.addfile old
+       return (Just (freeGap (add_patch)))
+  has_target <- treeHasDir cur (fn2fp $ superName $ fp2fn new)
+  unless has_target $
+    fail $ "The target directory " ++
+     (fn2fp $ superName $ fp2fn new)++
+     " isn't known in working directory, did you forget to add it?"
+  has_new <- it_has cur
+  when has_new $ fail $ already_exists "repository"
   return maybe_add_file_thats_been_moved
     where it_has s = treeHas_case (modifyTree s (floatPath old) Nothing) new
           treeHas_case = if doAllowCaseOnly opts then treeHas else treeHasAnycase
diff --git a/src/Darcs/Commands/Optimize.hs b/src/Darcs/Commands/Optimize.hs
--- a/src/Darcs/Commands/Optimize.hs
+++ b/src/Darcs/Commands/Optimize.hs
@@ -58,6 +58,7 @@
 import Darcs.Patch.Info ( isTag )
 import Darcs.Patch ( RepoPatch )
 import Darcs.Patch.Set ( PatchSet(..), newset2RL, newset2FL, progressPatchSet )
+import Darcs.Patch.Apply( ApplyState )
 import ByteStringUtils ( gzReadFilePS )
 import Darcs.Patch.Depends ( splitOnTag )
 import Darcs.Lock ( maybeRelink, gzWriteAtomicFilePS, writeAtomicFilePS )
@@ -83,7 +84,7 @@
 import Darcs.Repository.State ( readRecorded )
 import Darcs.Utils ( catchall )
 
-import Storage.Hashed.Tree( TreeItem(..), list, expand, emptyTree )
+import Storage.Hashed.Tree( Tree, TreeItem(..), list, expand, emptyTree )
 import Storage.Hashed.AnchoredPath( anchorPath )
 import Storage.Hashed.Plain( readPlainTree )
 import Storage.Hashed.Darcs( writeDarcsHashed )
@@ -162,7 +163,7 @@
  "remote command needs to download.  It should also reduce the CPU time\n" ++
  "needed for some operations.\n"
 
-doOptimizeInventory :: RepoPatch p => Repository p C(r u t) -> IO ()
+doOptimizeInventory :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> IO ()
 doOptimizeInventory repository = do
     debugMessage "Writing out a nice copy of the inventory."
     optimizeInventory repository
@@ -210,7 +211,7 @@
  "repository, or if you pulled the same patch from a remote repository\n" ++
  "into multiple local repositories.\n"
 
-doOptimizePristine :: RepoPatch p => Repository p C(r u t) -> IO ()
+doOptimizePristine :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> IO ()
 doOptimizePristine repo = do
   hashed <- doesFileExist $ darcsdir </> "hashed_inventory"
   when hashed $ do
@@ -257,7 +258,7 @@
 --  "of the default optimization.  It reorders patches with respect to ALL\n" ++
 --  "tags, rather than just the latest tag.\n"
 
-doReorder :: RepoPatch p => [DarcsFlag] -> Repository p C(r u r) -> IO ()
+doReorder :: (RepoPatch p, ApplyState p ~ Tree) => [DarcsFlag] -> Repository p C(r u r) -> IO ()
 doReorder opts repository = do
     debugMessage "Reordering the inventory."
     PatchSet ps _ <- chooseOrder `fmap` readRepo repository
@@ -283,7 +284,7 @@
              withRepoLock [] $ RepoJob $ \repository -> do
                actuallyUpgradeFormat repository
 
-actuallyUpgradeFormat :: RepoPatch p => Repository p C(r u t) -> IO ()
+actuallyUpgradeFormat :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> IO ()
 actuallyUpgradeFormat repository = do
   -- convert patches/inventory
   patches <- readRepo repository
@@ -322,7 +323,7 @@
       gzs <- filter ((== ".gz") . takeExtension) `fmap` getDirectoryContents "."
       mapM_ removeFile gzs
 
-doOptimizeHTTP :: RepoPatch p => Repository p C(r u t) -> IO ()
+doOptimizeHTTP :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> IO ()
 doOptimizeHTTP repo = flip finally (mapM_ (removeFileIfExists)
   [ darcsdir </> "meta-filelist-inventories"
   , darcsdir </> "meta-filelist-pristine"
diff --git a/src/Darcs/Commands/Pull.hs b/src/Darcs/Commands/Pull.hs
--- a/src/Darcs/Commands/Pull.hs
+++ b/src/Darcs/Commands/Pull.hs
@@ -49,8 +49,9 @@
 import qualified Darcs.Repository.Cache as DarcsCache
 import Darcs.Repository.Merge ( tentativelyMergePatches )
 import Darcs.Patch.PatchInfoAnd ( info, hopefully, patchDesc )
-import Darcs.Patch ( RepoPatch, description )
+import Darcs.Patch ( RepoPatch, description, PrimOf )
 import Darcs.Patch.Bundle( makeBundleN, patchFilename )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Patch.PatchInfoAnd ( PatchInfoAnd )
 #ifdef GADT_WITNESSES
 import Darcs.Patch.Set ( Origin )
@@ -74,6 +75,7 @@
 import Printer ( putDocLn, vcat, ($$), text, putDoc )
 import Darcs.Lock ( writeDocBinFile )
 import Darcs.RepoPath ( useAbsoluteOrStd, stdOut )
+import Storage.Hashed.Tree( Tree )
 #include "impossible.h"
 
 #include "gadts.h"
@@ -190,9 +192,11 @@
         fetchPatches opts repos "fetch" repository
                          >>= makeBundle opts
 
-fetchPatches :: FORALL(p r u) (RepoPatch p) => [DarcsFlag] -> [String] -> String ->
-               Repository p C(r u r) ->
-                   IO ( SealedPatchSet p C(Origin), Sealed ((FL (PatchInfoAnd p)  :\/: FL (PatchInfoAnd p)) C(r)))
+fetchPatches :: FORALL(p r u) (RepoPatch p, ApplyState p ~ Tree)
+             => [DarcsFlag] -> [String] -> String
+             -> Repository p C(r u r)
+             -> IO (SealedPatchSet p C(Origin),
+                    Sealed ((FL (PatchInfoAnd p)  :\/: FL (PatchInfoAnd p)) C(r)))
 fetchPatches opts unfixedrepodirs@(_:_) jobname repository = do
   here <- getCurrentDirectory
   repodirs <- (nub . filter (/= here)) `fmap` mapM (fixUrl opts) unfixedrepodirs
@@ -238,10 +242,11 @@
 fetchPatches _ [] jobname _ = fail $ "No default repository to " ++ jobname ++
                                 " from, please specify one"
 
-applyPatches ::
-    forall p C(r u). (RepoPatch p) => [DarcsFlag] -> Repository p C(r u r) ->
-    (SealedPatchSet p C(Origin), Sealed ((FL (PatchInfoAnd p) :\/: FL (PatchInfoAnd p)) C(r)))
-    -> IO ()
+applyPatches :: forall p C(r u). (RepoPatch p, ApplyState p ~ Tree, ApplyState (PrimOf p) ~ Tree)
+             => [DarcsFlag] -> Repository p C(r u r)
+             -> (SealedPatchSet p C(Origin),
+                 Sealed ((FL (PatchInfoAnd p) :\/: FL (PatchInfoAnd p)) C(r)))
+             -> IO ()
 applyPatches opts repository (_, Sealed (us' :\/: to_be_pulled)) =
          do
            printDryRunMessageAndExit "pull" opts to_be_pulled
@@ -269,10 +274,11 @@
                                       return ()
            putInfo opts $ text "Finished pulling and applying."
 
-makeBundle ::
-    forall p C(r) . (RepoPatch p) => [DarcsFlag] ->
-    (SealedPatchSet p C(Origin), Sealed ((FL (PatchInfoAnd p) :\/: FL (PatchInfoAnd p)) C(r)))
-    -> IO ()
+makeBundle :: forall p C(r) . (RepoPatch p, ApplyState p ~ Tree)
+           => [DarcsFlag]
+           -> (SealedPatchSet p C(Origin),
+               Sealed ((FL (PatchInfoAnd p) :\/: FL (PatchInfoAnd p)) C(r)))
+           -> IO ()
 makeBundle opts (Sealed common, Sealed (_ :\/: to_be_fetched)) =
     do
       bundle <- makeBundleN Nothing (unsafeCoercePEnd common) $
@@ -310,7 +316,8 @@
 the second patchset(s) to be complemented against Rc.
 -}
 
-readRepos :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] -> [String]
+readRepos :: (RepoPatch p, ApplyState p ~ Tree)
+          => Repository p C(r u t) -> [DarcsFlag] -> [String]
           -> IO (SealedPatchSet p C(Origin),SealedPatchSet p C(Origin))
 readRepos _ _ [] = impossible
 readRepos to_repo opts us =
diff --git a/src/Darcs/Commands/Push.hs b/src/Darcs/Commands/Push.hs
--- a/src/Darcs/Commands/Push.hs
+++ b/src/Darcs/Commands/Push.hs
@@ -39,6 +39,7 @@
 import Darcs.Repository ( Repository, withRepoReadLock, RepoJob(..), identifyRepositoryFor,
                           readRepo, amInHashedRepository, checkUnrelatedRepos )
 import Darcs.Patch ( RepoPatch, description )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Witnesses.Ordered ( (:>)(..), RL, FL, nullRL,
                              nullFL, reverseFL, mapFL_FL, mapRL )
 import Darcs.Repository.Prefs ( defaultrepo, setDefaultrepo, getPreflist )
@@ -58,6 +59,7 @@
 import Darcs.RemoteApply ( remoteApply, applyAs )
 import Darcs.Email ( makeEmail )
 import English (englishNum, Noun(..))
+import Storage.Hashed.Tree( Tree )
 #include "impossible.h"
 
 #include "gadts.h"
@@ -109,15 +111,15 @@
  sbundle <- signString opts bundle
  let body = if isFile repodir
             then sbundle
-            else makeEmail repodir [] Nothing sbundle Nothing
+            else makeEmail repodir [] Nothing Nothing sbundle Nothing
  rval <- remoteApply opts repodir body
  case rval of ExitFailure ec -> do putStrLn $ "Apply failed!"
                                    exitWith (ExitFailure ec)
               ExitSuccess -> putInfo opts $ text "Push successful."
 pushCmd _ _ = impossible
 
-prepareBundle :: forall p C(r u t) . (RepoPatch p) => [DarcsFlag] -> String -> Repository p C(r u t) ->
-                IO (Doc)
+prepareBundle :: forall p C(r u t). (RepoPatch p, ApplyState p ~ Tree)
+              => [DarcsFlag] -> String -> Repository p C(r u t) -> IO (Doc)
 prepareBundle opts repodir repository = do
   old_default <- getPreflist "defaultrepo"
   when (old_default == [repodir]) $
@@ -150,9 +152,10 @@
   when (nullRL us') $ do putInfo opts $ text "No recorded local changes to push!"
                          exitWith ExitSuccess
 
-bundlePatches :: forall t p C(z w a). RepoPatch p => [DarcsFlag] -> PatchSet p C(a z)
-                                      -> (FL (PatchInfoAnd p) :> t) C(z w)
-                                      -> IO (Doc)
+bundlePatches :: forall t p C(z w a). (RepoPatch p, ApplyState p ~ Tree)
+              => [DarcsFlag] -> PatchSet p C(a z)
+              -> (FL (PatchInfoAnd p) :> t) C(z w)
+              -> IO (Doc)
 bundlePatches opts common (to_be_pushed :> _) =
     do
       setEnvDarcsPatches to_be_pushed
diff --git a/src/Darcs/Commands/Put.hs b/src/Darcs/Commands/Put.hs
--- a/src/Darcs/Commands/Put.hs
+++ b/src/Darcs/Commands/Put.hs
@@ -65,7 +65,7 @@
                     commandArgdefaults = nodefaults,
                     commandAdvancedOptions = [applyas] ++ networkOptions,
                     commandBasicOptions = [matchOneContext, setScriptsExecutableOption,
-                                             setDefault True, workingRepoDir]}
+                                             setDefault False, workingRepoDir]}
 
 putCmd :: [DarcsFlag] -> [String] -> IO ()
 putCmd _ [""] = fail "Empty repository argument given to put."
@@ -110,7 +110,7 @@
   bundle <- makeBundle2 Nothing NilRL patches patches2
   let message = if isFile req_absolute_repo_dir
                 then bundle
-                else makeEmail req_absolute_repo_dir [] Nothing bundle Nothing
+                else makeEmail req_absolute_repo_dir [] Nothing Nothing bundle Nothing
   putVerbose opts $ text "Applying patches in new repository..."
   rval <- remoteApply opts req_absolute_repo_dir message
   case rval of ExitFailure ec -> do putStrLn $ "Apply failed!"
diff --git a/src/Darcs/Commands/Record.hs b/src/Darcs/Commands/Record.hs
--- a/src/Darcs/Commands/Record.hs
+++ b/src/Darcs/Commands/Record.hs
@@ -48,6 +48,7 @@
                              reverseRL, mapFL, mapFL_FL, nullFL )
 import Darcs.Witnesses.Sealed
 import Darcs.Patch.Info ( PatchInfo )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Patch.Split ( primSplitter )
 import Darcs.Patch.Choices ( patchChoicesTps, tpPatch,
                              forceFirsts, getChoices, tag )
@@ -76,6 +77,8 @@
 import IsoDate ( getIsoDateTime, cleanLocalDate )
 import Printer ( hPutDocLn, text, wrapText, ($$) )
 import ByteStringUtils ( encodeLocale )
+import Storage.Hashed.Tree( Tree )
+
 #include "impossible.h"
 #include "gadts.h"
 
@@ -169,7 +172,8 @@
             else return ()
 
 
-doRecord :: RepoPatch p => Repository p C(r u r) -> [DarcsFlag] -> Maybe [SubPath] -> FL (PrimOf p) C(r x) -> IO ()
+doRecord :: (RepoPatch p, ApplyState p ~ Tree, ApplyState (PrimOf p) ~ Tree)
+         => Repository p C(r u r) -> [DarcsFlag] -> Maybe [SubPath] -> FL (PrimOf p) C(r x) -> IO ()
 doRecord repository opts files ps = do
     let make_log = worldReadableTemp "darcs-record"
     date <- getDate opts
@@ -199,9 +203,10 @@
                                       -- a "partial tag" patch; see below.
               | otherwise = nullFL l
 
-doActualRecord :: RepoPatch p => Repository p C(r u r) -> [DarcsFlag] -> String -> String -> String
-                 -> [String] -> Maybe String
-                 -> [PatchInfo] -> FL (PrimOf p) C(r x) -> IO ()
+doActualRecord :: (RepoPatch p, ApplyState p ~ Tree)
+               => Repository p C(r u r) -> [DarcsFlag] -> String -> String -> String
+               -> [String] -> Maybe String
+               -> [PatchInfo] -> FL (PrimOf p) C(r x) -> IO ()
 doActualRecord repository opts name date my_author my_log logf deps chs =
               do debugMessage "Writing the patch file..."
                  mypatch <- namepatch date name my_author my_log $
@@ -366,7 +371,9 @@
 eod :: String
 eod = "***END OF DESCRIPTION***"
 
-askAboutDepends :: forall p C(r u t y) . RepoPatch p => Repository p C(r u t) -> FL (PrimOf p) C(t y) -> [DarcsFlag] -> [PatchInfo] -> IO [PatchInfo]
+askAboutDepends :: forall p C(r u t y) . (RepoPatch p, ApplyState p ~ Tree)
+                => Repository p C(r u t) -> FL (PrimOf p) C(t y) -> [DarcsFlag]
+                -> [PatchInfo] -> IO [PatchInfo]
 askAboutDepends repository pa' opts olddeps = do
   -- ideally we'd just default the olddeps to yes but still ask about them.
   -- SelectChanges doesn't currently (17/12/09) offer a way to do this so would
diff --git a/src/Darcs/Commands/Remove.hs b/src/Darcs/Commands/Remove.hs
--- a/src/Darcs/Commands/Remove.hs
+++ b/src/Darcs/Commands/Remove.hs
@@ -35,6 +35,7 @@
 import Darcs.Diff( treeDiff )
 import Darcs.Patch ( RepoPatch, PrimOf, PrimPatch, adddir, rmdir, addfile, rmfile )
 import Darcs.Patch.FileName( fn2fp )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Witnesses.Ordered ( FL(..), (+>+) )
 import Darcs.Witnesses.Sealed ( Sealed(..), Gap(..), FreeLeft, unFreeLeft )
 import Darcs.Repository.Prefs ( filetypeFunction, FileType )
@@ -94,8 +95,9 @@
 --   This function does not recursively process directories. The 'Recursive'
 --   flag should be handled by the caller by adding all offspring of a directory
 --   to the files list.
-makeRemovePatch :: RepoPatch p => [DarcsFlag] -> Repository p C(r u t)
-                  -> [SubPath] -> IO (Sealed (FL (PrimOf p) C(u)))
+makeRemovePatch :: (RepoPatch p, ApplyState p ~ Tree)
+                => [DarcsFlag] -> Repository p C(r u t)
+                -> [SubPath] -> IO (Sealed (FL (PrimOf p) C(u)))
 makeRemovePatch opts repository files =
                           do recorded <- expand =<< readRecordedAndPending repository
                              unrecorded <- readUnrecorded repository $ Just files
diff --git a/src/Darcs/Commands/Replace.hs b/src/Darcs/Commands/Replace.hs
--- a/src/Darcs/Commands/Replace.hs
+++ b/src/Darcs/Commands/Replace.hs
@@ -34,10 +34,11 @@
                     applyToWorking,
                     readUnrecorded, readRecordedAndPending
                   )
-import Darcs.Patch ( Patchy, PrimPatch, tokreplace, forceTokReplace, applyToTree )
+import Darcs.Patch ( Patchy, PrimPatch, tokreplace, forceTokReplace, applyToTree, fromPrim )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Patch.FileName( fn2fp )
 import Darcs.Patch.Patchy ( Apply )
-import Darcs.Witnesses.Ordered ( FL(..), (+>+), concatFL, toFL )
+import Darcs.Witnesses.Ordered ( FL(..), (+>+), concatFL, toFL, mapFL_FL )
 import Darcs.Witnesses.Sealed ( Sealed(..), mapSeal, FreeLeft, Gap(..) )
 import Darcs.Patch.RegChars ( regChars )
 import Data.Char ( isSpace )
@@ -151,7 +152,8 @@
                               then return True
                               else do putStrLn $ skipmsg file
                                       return False
-        repl :: forall prim . (Patchy prim, PrimPatch prim) => String -> Tree IO -> Tree IO -> SubPath -> IO (FreeLeft (FL prim))
+        repl :: forall prim . (Patchy prim, PrimPatch prim, ApplyState prim ~ Tree)
+             => String -> Tree IO -> Tree IO -> SubPath -> IO (FreeLeft (FL prim))
         repl toks cur work f =
           do work_replaced <- maybeApplyToTree replace_patch work
              cur_replaced <- maybeApplyToTree replace_patch cur
@@ -175,6 +177,9 @@
             case newcontent of
               Nothing -> bug "weird forcing bug in replace."
               Just _ -> do pfix <- treeDiff ftf tree tree'
+                           putStrLn $ "Don't be surprised!"
+                           putStrLn $ "I've changed all instances of '" ++ new ++ "' to '" ++ old ++ "' first"
+                           putStrLn $ "so that darcs replace can token-replace them back into '" ++ new ++ "' again."
                            return $ joinGap (+>+) pfix (freeGap (tokreplace f_fp toks old new :>: NilFL))
             where f_fp = toFilePath f
 
@@ -183,7 +188,7 @@
 floatSubPath :: SubPath -> AnchoredPath
 floatSubPath = floatPath . fn2fp . sp2fn
 
-maybeApplyToTree :: Apply p => p C(x y) -> Tree IO -> IO (Maybe (Tree IO))
+maybeApplyToTree :: (Apply p, ApplyState p ~ Tree) => p C(x y) -> Tree IO -> IO (Maybe (Tree IO))
 maybeApplyToTree patch tree = catch (Just `fmap` applyToTree patch tree)
                                     (\_ -> return Nothing)
 
diff --git a/src/Darcs/Commands/Rollback.hs b/src/Darcs/Commands/Rollback.hs
--- a/src/Darcs/Commands/Rollback.hs
+++ b/src/Darcs/Commands/Rollback.hs
@@ -46,6 +46,7 @@
                         )
 import Darcs.Patch ( RepoPatch, summary, invert, namepatch, effect, fromPrims,
                      sortCoalesceFL, canonize, anonymous, PrimOf )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Flags ( isInteractive, rollbackInWorkingDir )
 import Darcs.Patch.Set ( PatchSet(..), newset2FL )
 import Darcs.Patch.Split ( reversePrimSplitter )
@@ -66,6 +67,7 @@
 import Progress ( debugMessage )
 import Darcs.Witnesses.Sealed ( Sealed(..) )
 import IsoDate ( getIsoDateTime )
+import Storage.Hashed.Tree( Tree )
 #include "impossible.h"
 #include "gadts.h"
 
@@ -126,7 +128,7 @@
                then (undoItNow opts repository)
                else (rollItBackNow opts repository ps)
 
-rollItBackNow :: (RepoPatch p) =>
+rollItBackNow :: (RepoPatch p, ApplyState p ~ Tree, ApplyState (PrimOf p) ~ Tree) =>
                 [DarcsFlag] -> Repository p C(r u t) ->  FL (PatchInfoAnd p) C(x y)
                             -> (q :> FL (PrimOf p)) C(a t) -> IO ()
 rollItBackNow opts repository  ps (_ :> ps'') =
@@ -170,7 +172,8 @@
                    "by using 'darcs revert' you should be able to make your",
                    "working directory consistent again."]
 
-undoItNow :: (RepoPatch p) => [DarcsFlag] -> Repository p C(r u t)
+undoItNow :: (RepoPatch p, ApplyState p ~ Tree, ApplyState (PrimOf p) ~ Tree)
+          => [DarcsFlag] -> Repository p C(r u t)
           -> (q :> FL (PrimOf p)) C(a t) -> IO ()
 undoItNow opts repo (_ :> prims) =
     do
@@ -183,5 +186,5 @@
         _ <- applyToWorking repo opts pw `catch` \e ->
             fail ("error applying rolled back patch to working directory\n"
                   ++ show e)
-        debugMessage "Finished applying unrocorded rollback patch"
+        debugMessage "Finished applying unrecorded rollback patch"
 
diff --git a/src/Darcs/Commands/Send.hs b/src/Darcs/Commands/Send.hs
--- a/src/Darcs/Commands/Send.hs
+++ b/src/Darcs/Commands/Send.hs
@@ -26,7 +26,8 @@
 import System.IO ( hClose )
 import Control.Monad ( when, unless, forM_ )
 import Storage.Hashed.Tree ( Tree )
-import Data.Maybe ( isNothing )
+import Data.List ( intercalate, isPrefixOf, stripPrefix )
+import Data.Maybe ( isNothing, fromMaybe )
 
 import Darcs.Commands ( DarcsCommand(..), putInfo, putVerbose )
 import Darcs.Arguments ( DarcsFlag( EditDescription, LogFile,
@@ -44,7 +45,7 @@
                          printDryRunMessageAndExit,
                          summary, allowUnrelatedRepos,
                          fromOpt, dryRun, sendToContext, getOutput,
-                         changesReverse,
+                         changesReverse, charset, getCharset,
                        )
 import Darcs.Flags ( willRemoveLogFile, doReverse )
 import Darcs.Patch.PatchInfoAnd ( PatchInfoAnd, hopefully, patchDesc )
@@ -54,6 +55,7 @@
 #ifdef GADT_WITNESSES
 import Darcs.Patch.Set ( Origin )
 #endif
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Patch ( RepoPatch, description, applyToTree, invert )
 import Darcs.Witnesses.Unsafe ( unsafeCoerceP )
 import Darcs.Witnesses.Ordered ( FL(..), (:>)(..), (:\/:)(..), (:>)(..),
@@ -65,18 +67,19 @@
                       , haveSendmail
 #endif
                       )
-import ByteStringUtils ( mmapFilePS )
+import ByteStringUtils ( mmapFilePS, isAscii )
 import qualified Data.ByteString.Char8 as BC (unpack)
 import Darcs.Lock ( withOpenTemp, writeDocBinFile, readDocBinFile, worldReadableTemp, removeFileMayNotExist )
 import Darcs.SelectChanges ( selectChanges, WhichChanges(..), selectionContext, runSelection )
 import Darcs.Patch.Depends ( findCommonWithThem )
-import Darcs.Utils ( askUser, promptYorn, catchall, editFile, formatPath )
+import Darcs.Utils ( askUser, promptYorn, catchall, editFile, formatPath, getSystemEncoding, isUTF8Locale )
+import Data.Text.Encoding       ( decodeUtf8' )
 import Progress ( debugMessage )
 import Darcs.Email ( makeEmail )
-import Printer ( Doc, vsep, vcat, text, ($$), (<+>), (<>), putDoc )
+import Printer ( Doc, vsep, vcat, text, ($$), (<+>), (<>), putDoc, renderPS )
 import Darcs.RepoPath ( FilePathLike, toFilePath, AbsolutePath, AbsolutePathOrStd,
                         getCurrentDirectory, useAbsoluteOrStd )
-import HTTP ( postUrl )
+import URL.HTTP ( postUrl )
 #include "impossible.h"
 
 #include "gadts.h"
@@ -111,7 +114,7 @@
                      commandBasicOptions = [matchSeveral, depsSel,
                                               allInteractive,
                                               fromOpt, author,
-                                              target,ccSend,subject, inReplyTo,
+                                              target,ccSend,subject, inReplyTo, charset,
                                               output,outputAutoName,sign]
                                               ++dryRun++[summary,
                                               editDescription,
@@ -134,9 +137,9 @@
         -- Test to make sure we aren't trying to push to the current repo
         here <- getCurrentDirectory
         when (repodir == toFilePath here) $
-           fail ("Can't send to current repository! Did you mean send --context?")
+           fail "Can't send to current repository! Did you mean send --context?"
         old_default <- getPreflist "defaultrepo"
-        when (old_default == [repodir] && not (Quiet `elem` input_opts)) $
+        when (old_default == [repodir] && Quiet `notElem` input_opts) $
              putStrLn $ "Creating patch to "++formatPath repodir++"..."
         repo <- identifyRepositoryFor repository repodir
         them <- readRepo repo
@@ -149,7 +152,9 @@
           the_context (_:fs) = the_context fs
 sendCmd _ _ = impossible
 
-sendToThem :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] -> [WhatToDo] -> String -> PatchSet p C(Origin x) -> IO ()
+sendToThem :: (RepoPatch p, ApplyState p ~ Tree)
+           => Repository p C(r u t) -> [DarcsFlag] -> [WhatToDo] -> String
+           -> PatchSet p C(Origin x) -> IO ()
 sendToThem repo opts wtds their_name them = do
 #ifndef HAVE_MAPI
   -- Check if the user has sendmail or provided a --sendmail-cmd
@@ -168,7 +173,7 @@
       NilFL -> do putInfo opts $ text "No recorded local changes to send!"
                   exitWith ExitSuccess
       _ -> putVerbose opts $ text "We have the following patches to send:"
-                     $$ (vcat $ mapFL description us')) :: IO ()
+                     $$ vcat (mapFL description us')) :: IO ()
   pristine <- readRecorded repo
   let context = selectionContext "send" opts Nothing Nothing
       selector = if doReverse opts
@@ -189,15 +194,17 @@
     Just fname' -> writeBundleToFile opts to_be_sent bundle fname' wtds their_name
     Nothing -> sendBundle opts to_be_sent bundle fname wtds their_name
 
-prepareBundle :: forall p C(x y z). RepoPatch p => [DarcsFlag] -> PatchSet p C(Origin z)
-                -> Tree IO -> ((FL (PatchInfoAnd p)) :\/: (FL (PatchInfoAnd p))) C(x y)
-                -> IO Doc
+prepareBundle :: forall p C(x y z). (RepoPatch p, ApplyState p ~ Tree)
+              => [DarcsFlag] -> PatchSet p C(Origin z)
+              -> Tree IO -> (FL (PatchInfoAnd p) :\/: FL (PatchInfoAnd p)) C(x y)
+              -> IO Doc
 prepareBundle opts common pristine (us' :\/: to_be_sent) = do
   pristine' <- applyToTree (invert $ mapFL_FL hopefully us') pristine
   unsig_bundle <- makeBundleN (Just pristine') (unsafeCoerceP common) (mapFL_FL hopefully to_be_sent)
   signString opts unsig_bundle
 
-sendBundle :: forall p C(x y) . (RepoPatch p) => [DarcsFlag] -> FL (PatchInfoAnd p) C(x y)
+sendBundle :: forall p C(x y) . (RepoPatch p, ApplyState p ~ Tree)
+           => [DarcsFlag] -> FL (PatchInfoAnd p) C(x y)
              -> Doc -> String -> [WhatToDo] -> String -> IO ()
 sendBundle opts to_be_sent bundle fname wtds their_name=
          let
@@ -211,35 +218,64 @@
            in do
            thetargets <- getTargets wtds
            from <- getAuthor opts
-           let thesubject = case getSubject opts of
-                            Nothing -> auto_subject to_be_sent
-                            Just subj -> subj
-           (mailcontents, mailfile) <- getDescription opts their_name to_be_sent
+           let thesubject = fromMaybe (auto_subject to_be_sent) $ getSubject opts
+           (mailcontents, mailfile, mailcharset) <- getDescription opts their_name to_be_sent
+
+           let warnMailBody = let msg = "Email body left in " in
+                              case mailfile of
+                                  Just mf -> putStrLn $ msg++mf++"."
+                                  Nothing -> return ()
+
+               warnCharset msg = do
+                 confirmed <- promptYorn $ "Warning: " ++ msg ++ "  Send anyway?"
+                 unless confirmed $ do
+                    putStrLn "Aborted.  You can specify charset with the --charset option."
+                    warnMailBody
+                    exitWith ExitSuccess
+
+           thecharset <- case getCharset opts of
+                              -- Always trust provided charset
+                              providedCset@(Just _) -> return providedCset
+                              Nothing ->
+                                case mailcharset of
+                                Nothing -> do
+                                  warnCharset "darcs could not guess the charset of your mail."
+                                  return mailcharset
+                                Just "utf-8" -> do
+                                  -- Check the locale encoding for consistency
+                                  encoding <- getSystemEncoding
+                                  debugMessage $ "Current locale encoding: " ++ encoding
+                                  unless (isUTF8Locale encoding) $
+                                    warnCharset "your mail is valid UTF-8 but your locale differs."
+                                  return mailcharset
+                                -- Trust other cases (us-ascii)
+                                Just _ -> return mailcharset
+
            let body = makeEmail their_name
                         (maybe [] (\x -> [("In-Reply-To", x), ("References", x)]) . getInReplyTo $ opts)
                         (Just mailcontents)
+                        thecharset
                         bundle
                         (Just fname)
                contentAndBundle = Just (mailcontents, bundle)
 
                sendmail = do
                  sm_cmd <- getSendmailCmd opts
-                 (sendEmailDoc from (lt [t | SendMail t <- thetargets]) (thesubject) (getCc opts)
+                 let to = generateEmailToString thetargets
+                 sendEmailDoc from to thesubject (getCc opts)
                                sm_cmd contentAndBundle body >>
                   (putInfo opts . text $ ("Successfully sent patch bundle to: "
-                            ++ lt [ t | SendMail t <- thetargets ]
-                            ++ ccs (getCc opts) ++".")))
-                 `catch` \e -> let msg = "Email body left in " in
-                               do case mailfile of
-                                    Just mf -> putStrLn $ msg++mf++"."
-                                    Nothing -> return ()
+                            ++ to
+                            ++ ccs (getCc opts) ++"."))
+                 `catch` \e -> do warnMailBody
                                   fail $ ioeGetErrorString e
                ccs [] = []
                ccs cs  = " and cc'ed " ++ cs
 
            when (null [ p | Post p <- thetargets]) sendmail
            nbody <- withOpenTemp $ \ (fh,fn) -> do
-               generateEmail fh from (lt [t | SendMail t <- thetargets]) thesubject (getCc opts) body
+               let to = generateEmailToString thetargets
+               generateEmail fh from to thesubject (getCc opts) body
                hClose fh
                mmapFilePS fn
            forM_ [ p | Post p <- thetargets]
@@ -249,36 +285,35 @@
              `catch` const sendmail
            cleanup opts mailfile
 
-
-lt :: [String] -> String
-lt [t] = t
-lt [t,""] = t
-lt (t:ts) = t++" , "++lt ts
-lt [] = ""
+generateEmailToString :: [WhatToDo] -> String
+generateEmailToString = intercalate " , " . filter (/= "") . map extractEmail
+  where
+    extractEmail (SendMail t) = t
+    extractEmail _ = ""
 
 cleanup :: (FilePathLike t) => [DarcsFlag] -> Maybe t -> IO ()
-cleanup opts (Just mailfile) = when (isNothing (getFileopt opts) || (willRemoveLogFile opts)) $
+cleanup opts (Just mailfile) = when (isNothing (getFileopt opts) || willRemoveLogFile opts) $
                                       removeFileMayNotExist mailfile
 cleanup _ Nothing = return ()
 
-writeBundleToFile :: forall p C(x y) . (RepoPatch p) => [DarcsFlag] -> FL (PatchInfoAnd p) C(x y) -> Doc ->
+writeBundleToFile :: forall p C(x y) . (RepoPatch p, ApplyState p ~ Tree)
+                  => [DarcsFlag] -> FL (PatchInfoAnd p) C(x y) -> Doc ->
                     AbsolutePathOrStd -> [WhatToDo] -> String -> IO ()
 writeBundleToFile opts to_be_sent bundle fname wtds their_name =
-    do (d,f) <- getDescription opts their_name to_be_sent
+    do (d,f,_) <- getDescription opts their_name to_be_sent
        let putabs a = do writeDocBinFile a (d $$ bundle)
                          putStrLn $ "Wrote patch to " ++ toFilePath a ++ "."
            putstd = putDoc (d $$ bundle)
        useAbsoluteOrStd putabs putstd fname
-       let mails = lt [ t | SendMail t <- wtds ]
-       unless (null mails) $ putInfo opts $ text $ "The usual recipent for this bundle is: " ++ mails
+       let to = generateEmailToString wtds
+       unless (null to) $
+           putInfo opts . text $ "The usual recipent for this bundle is: " ++ to
        cleanup opts f
 
-
 data WhatToDo
     = Post String        -- ^ POST the patch via HTTP
     | SendMail String    -- ^ send patch via email
 
-
 decideOnBehavior :: RepoPatch p => [DarcsFlag] -> Maybe (Repository p C(r u t)) -> IO [WhatToDo]
 decideOnBehavior opts remote_repo =
     case the_targets of
@@ -300,9 +335,8 @@
                                 (MaxAge 600)) `catchall` return []
                           emails <- who_to_email the_remote_repo
                           return (p++emails)
-          readPost p = map pp (lines p) where
-            pp ('m':'a':'i':'l':'t':'o':':':s) = SendMail s
-            pp s = Post s
+          readPost = map parseLine . lines where
+              parseLine t = maybe (Post t) SendMail $ stripPrefix "mailto:" t
 #else
           check_post = who_to_email
 #endif
@@ -322,15 +356,16 @@
                  putInfo opts . text $ "Patch bundle will be sent to: "++unwords (map pn emails)
 
 getTargets :: [WhatToDo] -> IO [WhatToDo]
-getTargets [] = do fmap ((:[]) . SendMail) $ askUser "What is the target email address? "
+getTargets [] = fmap ((:[]) . SendMail) $ askUser "What is the target email address? "
 getTargets wtds = return wtds
 
 collectTargets :: [DarcsFlag] -> [WhatToDo]
 collectTargets flags = [ f t | Target t <- flags ] where
-    f url@('h':'t':'t':'p':':':_) = Post url
+    f url | "http:" `isPrefixOf` url = Post url
     f em = SendMail em
 
-getDescription :: RepoPatch p => [DarcsFlag] -> String -> FL (PatchInfoAnd p) C(x y) -> IO (Doc, Maybe String)
+getDescription :: (RepoPatch p, ApplyState p ~ Tree)
+               => [DarcsFlag] -> String -> FL (PatchInfoAnd p) C(x y) -> IO (Doc, Maybe String, Maybe String)
 getDescription opts their_name patches =
     case get_filename of
         Just f -> do file <- f
@@ -345,8 +380,8 @@
                                                exitWith ExitSuccess
                        return ()
                      doc <- readDocBinFile file
-                     return (doc, Just file)
-        Nothing -> return (patchdesc, Nothing)
+                     return (doc, Just file, tryGetCharset doc)
+        Nothing -> return (patchdesc, Nothing, tryGetCharset patchdesc)
     where patchdesc = text (if lengthFL patches == 1
                                then "1 patch"
                                else show (lengthFL patches) ++ " patches")
@@ -359,6 +394,12 @@
                                               then Just tempfile
                                               else Nothing
           tempfile = worldReadableTemp "darcs-temp-mail"
+          tryGetCharset content = let body = renderPS content in
+                                  if isAscii body
+                                  then Just "us-ascii"
+                                  else either (const Nothing)
+                                              (const $ Just "utf-8")
+                                              (decodeUtf8' body)
 
 getFileopt :: [DarcsFlag] -> Maybe AbsolutePath
 getFileopt (LogFile f:_) = Just f
diff --git a/src/Darcs/Commands/ShowContents.hs b/src/Darcs/Commands/ShowContents.hs
--- a/src/Darcs/Commands/ShowContents.hs
+++ b/src/Darcs/Commands/ShowContents.hs
@@ -18,9 +18,7 @@
 module Darcs.Commands.ShowContents ( showContents ) where
 
 import Control.Monad ( filterM, forM_, forM, unless )
-import Control.Monad.Trans( liftIO )
 import System.IO ( stdout )
-import Data.Maybe( fromJust )
 
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Lazy as BL
@@ -30,12 +28,11 @@
                          workingRepoDir, fixSubPaths )
 import Darcs.RepoPath ( sp2fn, toFilePath )
 import Darcs.Patch.FileName( FileName, fp2fn )
-import Darcs.Patch.ApplyMonad ( mReadFilePS, withFiles )
-import Darcs.Patch.Match( Matcher )
+import Darcs.Patch.ApplyMonad ( withFiles )
 import Darcs.Match ( haveNonrangeMatch, applyInvToMatcher, nonrangeMatcher
-                   , InclusiveOrExclusive(..), matchExists )
+                   , InclusiveOrExclusive(..), matchExists, applyNInv
+                   , hasIndexRange )
 import Darcs.Repository ( withRepository, RepoJob(..), findRepository, readRepo, readRecorded )
-import Darcs.Patch( RepoPatch )
 import qualified Storage.Hashed.Monad as HSM
 import Storage.Hashed.AnchoredPath( floatPath, anchorPath )
 
@@ -63,28 +60,31 @@
                               commandAdvancedOptions = [],
                               commandBasicOptions = [matchOne, workingRepoDir]}
 
-getMatcher :: (RepoPatch p) => [DarcsFlag] -> Matcher p
-getMatcher = fromJust . nonrangeMatcher
-
 showContentsCmd :: [DarcsFlag] -> [String] -> IO ()
-showContentsCmd _ [] = fail
- "show contents needs at least one argument."
+showContentsCmd _ [] = fail "show contents needs at least one argument."
 showContentsCmd opts args = withRepository opts $ RepoJob $ \repository -> do
   path_list <- map sp2fn `fmap` fixSubPaths opts args
   pristine <- readRecorded repository
-  let matcher = getMatcher opts
-      unapply_to_match = applyInvToMatcher Exclusive matcher
-  unapply <- if (haveNonrangeMatch opts)
-                 then do patchset <- readRepo repository
-                         unless (matchExists matcher patchset) $
-                                fail $ "Couldn't match pattern " ++ show matcher
-                         return (unapply_to_match patchset)
-                 else return (return ())
+  unapply <- if haveNonrangeMatch opts
+               then do
+                  patchset <- readRepo repository
+                  case nonrangeMatcher opts of
+                    -- Index cannot be a Matcher, so handle it manually.
+                    Nothing -> case hasIndexRange opts of
+                      Just (n, m) | n == m -> return $ applyNInv (n-1) patchset
+                      _ -> fail "Couldn't obtain a valid matcher."
+                    Just m -> do
+                      unless (matchExists m patchset) $
+                        fail $ "Couldn't match pattern " ++ show m
+                      return $ applyInvToMatcher Exclusive m patchset
+                else return (return ())
   let dump :: HSM.TreeIO [(FileName, B.ByteString)]
-      dump = do okpaths <- filterM HSM.fileExists $ map (floatPath . toFilePath) path_list
-                forM okpaths $ \f -> do content <- HSM.readFile f
-                                        return (fp2fn $ ("./" ++) $ anchorPath "" f, B.concat $ BL.toChunks content)
-  files <- flip withFiles unapply `fmap` fst `fmap` HSM.virtualTreeIO dump pristine
+      dump = do
+        let floatedPaths = map (floatPath . toFilePath) path_list
+        okpaths <- filterM HSM.fileExists floatedPaths
+        forM okpaths $ \f -> do
+          content <- (B.concat . BL.toChunks) `fmap` HSM.readFile f
+          return (fp2fn $ ("./" ++) $ anchorPath "" f, content)
+  files <- flip withFiles unapply `fmap` fst
+    `fmap` HSM.virtualTreeIO dump pristine
   forM_ files $ \(_, f) -> B.hPut stdout f
-  return ()
-
diff --git a/src/Darcs/Commands/ShowFiles.hs b/src/Darcs/Commands/ShowFiles.hs
--- a/src/Darcs/Commands/ShowFiles.hs
+++ b/src/Darcs/Commands/ShowFiles.hs
@@ -19,6 +19,7 @@
 #include "gadts.h"
 module Darcs.Commands.ShowFiles ( showFiles
                                 , manifestCmd, toListManifest -- for alias
+                                , manifest
                                 ) where
 import Darcs.Arguments ( DarcsFlag(..), workingRepoDir,
                         files, directories, pending, nullFlag, matchOne )
@@ -26,10 +27,12 @@
 import Darcs.Repository ( Repository, amInRepository, withRepository,
                           RepoJob(..) )
 import Darcs.Patch ( RepoPatch )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Repository.State ( readRecorded, readRecordedAndPending )
 import Storage.Hashed.Tree( Tree, TreeItem(..), list, expand )
 import Storage.Hashed.AnchoredPath( anchorPath )
 import Storage.Hashed.Plain( readPlainTree )
+import System.FilePath ( splitDirectories )
 
 import Data.List( isPrefixOf )
 
@@ -89,13 +92,23 @@
 filesDirs True  False t = [ anchorPath "." p | (p, File _) <- list t ]
 filesDirs True  True  t = "." : (map (anchorPath "." . fst) $ list t)
 
+manifest :: [DarcsFlag] -> [String] -> IO [FilePath]
+manifest = manifestHelper toListFiles
+
 manifestCmd :: ([DarcsFlag] -> Tree IO -> [FilePath]) -> [DarcsFlag] -> [String] -> IO ()
 manifestCmd to_list opts argList = do
+    mapM_ output =<< manifestHelper to_list opts argList
+  where
+    output_null name = do { putStr name ; putChar '\0' }
+    output = if NullFlag `elem` opts then output_null else putStrLn
+
+manifestHelper :: ([DarcsFlag] -> Tree IO -> [FilePath]) -> [DarcsFlag] -> [String] -> IO [FilePath]
+manifestHelper to_list opts argList = do
     list' <- (to_list opts) `fmap` withRepository opts (RepoJob myslurp)
     case argList of
-        [] -> mapM_ output list'
-        prefixes -> mapM_ output (onlysubdirs prefixes list')
-    where myslurp :: RepoPatch p => Repository p C(r u r) -> IO (Tree IO)
+        []       -> return list'
+        prefixes -> return (onlysubdirs prefixes list')
+    where myslurp :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u r) -> IO (Tree IO)
           myslurp r = do let fRevisioned = haveNonrangeMatch opts
                              fPending = Pending `elem` opts
                              fNoPending = NoPending `elem` opts
@@ -106,15 +119,14 @@
                             (False,False,True) -> readRecorded r
                             (False,_,False) -> readRecordedAndPending r -- pending is default
                             (False,True,True) -> error $ "can't mix pending and no-pending flags"
-          output_null name = do { putStr name ; putChar '\0' }
-          output = if NullFlag `elem` opts then output_null else putStrLn
-          isParentDir a b = a == b
-                            || (a  ++ "/") `isPrefixOf` b
-                            || ("./" ++ a ++ "/") `isPrefixOf` b
-                            || "./" ++ a == b
-          onlysubdirs suffixes = filter $ or . mapM isParentDir suffixes
+          isParentDir a' b' =
+            let a = splitDirectories a'
+                b = splitDirectories b'
+            in (a `isPrefixOf` b) || (("." : a) `isPrefixOf` b)
+          onlysubdirs dirs = filter (\p -> any (`isParentDir` p) dirs)
 
-slurpRevision :: RepoPatch p => [DarcsFlag] -> Repository p C(r u r) -> IO (Tree IO)
+slurpRevision :: (RepoPatch p, ApplyState p ~ Tree)
+              => [DarcsFlag] -> Repository p C(r u r) -> IO (Tree IO)
 slurpRevision opts r = withDelayedDir "revisioned.showfiles" $ \_ -> do
   getNonrangeMatch r opts
   expand =<< readPlainTree "."
diff --git a/src/Darcs/Commands/ShowRepo.hs b/src/Darcs/Commands/ShowRepo.hs
--- a/src/Darcs/Commands/ShowRepo.hs
+++ b/src/Darcs/Commands/ShowRepo.hs
@@ -20,7 +20,7 @@
 module Darcs.Commands.ShowRepo ( showRepo ) where
 
 import Data.Char ( toLower, isSpace )
-import Data.List ( intersperse )
+import Data.List ( intercalate )
 import Control.Monad ( when, unless )
 import Text.Html ( tag, stringToHtml )
 import Darcs.Arguments ( DarcsFlag(..), workingRepoDir, files, xmloutput )
@@ -34,6 +34,8 @@
 import Darcs.Patch.Set ( newset2RL )
 import Darcs.Witnesses.Ordered ( lengthRL )
 import qualified Data.ByteString.Char8 as BC  (unpack)
+import Darcs.Patch.Apply( ApplyState )
+import Storage.Hashed.Tree ( Tree )
 
 showRepoHelp :: String
 showRepoHelp =
@@ -88,7 +90,7 @@
 -- subsequent lines in multi-line output are indented accordingly.
 showInfoUsr :: ShowInfo
 showInfoUsr t i = (replicate (14 - length(t)) ' ') ++ t ++ ": " ++
-                  (concat $ intersperse ('\n' : (replicate 16 ' ')) $ lines i) ++ "\n"
+                  intercalate ('\n' : (replicate 16 ' ')) (lines i) ++ "\n"
 
 type PutInfo = String -> String -> IO ()
 putInfo :: ShowInfo -> PutInfo
@@ -98,7 +100,8 @@
 -- sub-displays.  The `out' argument is one of the above operations to
 -- output a labelled text string or an XML tag and contained value.
 
-actuallyShowRepo :: RepoPatch p => PutInfo -> Repository p C(r u r) -> IO ()
+actuallyShowRepo :: (RepoPatch p, ApplyState p ~ Tree)
+                 => PutInfo -> Repository p C(r u r) -> IO ()
 actuallyShowRepo out r@(Repo loc opts rf rt) = do
          when (XMLOutput `elem` opts) (putStr "<repository>\n")
          showRepoType out rt
@@ -121,12 +124,12 @@
 
 showRepoFormat :: PutInfo -> RepoFormat -> IO ()
 showRepoFormat out (RF rf) = out "Format" $
-    concat $ intersperse ", " (map (concat . intersperse "|" . map BC.unpack) rf)
+    intercalate ", " (map (intercalate "|" . map BC.unpack) rf)
 
 showRepoAux :: PutInfo -> RepoType p -> IO ()
 showRepoAux out (DarcsRepository pris cs) =
     do out "Pristine" $ show pris
-       out "Cache" $ concat $ intersperse ", " $ lines $ show cs
+       out "Cache" $ intercalate ", " $ lines $ show cs
 
 
 showRepoPrefs :: PutInfo -> IO ()
@@ -141,6 +144,6 @@
 
 -- Support routines to provide information used by the PutInfo operations above.
 
-numPatches :: RepoPatch p => Repository p C(r u r) -> IO Int
+numPatches :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u r) -> IO Int
 numPatches r = readRepo r >>= (return . lengthRL . newset2RL)
 
diff --git a/src/Darcs/Commands/TrackDown.hs b/src/Darcs/Commands/TrackDown.hs
--- a/src/Darcs/Commands/TrackDown.hs
+++ b/src/Darcs/Commands/TrackDown.hs
@@ -32,6 +32,8 @@
                                  reverseRL, splitAtRL, lengthRL, mapRL, mapFL, mapRL_RL )
 import Darcs.Patch.Conflict ( Conflict )
 import Darcs.Patch.FileHunk ( IsHunk )
+import Darcs.Patch.ApplyMonad ( ApplyMonad )
+import Darcs.Patch.Apply ( ApplyState )
 import Darcs.Patch.Format ( PatchListFormat )
 import Darcs.Patch.Patchy ( Patchy, Invert, Apply, ShowPatch )
 import Darcs.Patch ( RepoPatch, Named, description, apply, invert )
@@ -39,6 +41,7 @@
 import Printer ( putDocLn )
 import Darcs.Test ( getTest )
 import Darcs.Lock ( withTempDir )
+import Storage.Hashed.Tree( Tree )
 
 #include "gadts.h"
 
@@ -98,7 +101,8 @@
      else trackNextLinear) opts test (mapRL_RL hopefully . newset2RL $ patches)
 
 -- | linear search (without --bisect)
-trackNextLinear :: RepoPatch p => [DarcsFlag] -> IO ExitCode -> RL (Named p) C(x y) -> IO ()
+trackNextLinear :: (RepoPatch p, ApplyMonad IO (ApplyState p), ApplyState p ~ Tree)
+                => [DarcsFlag] -> IO ExitCode -> RL (Named p) C(x y) -> IO ()
 trackNextLinear opts test (p:<:ps) = do
     test_result <- test
     if test_result == ExitSuccess
@@ -116,7 +120,8 @@
        else putStrLn "Noone passed the test!"
 
 -- | binary search (with --bisect)
-trackBisect :: (IsHunk p, Conflict p, PatchListFormat p, Patchy p) => [DarcsFlag] -> IO ExitCode -> RL p C(x y) -> IO ()
+trackBisect :: (IsHunk p, Conflict p, PatchListFormat p, Patchy p, ApplyMonad IO (ApplyState p))
+            => [DarcsFlag] -> IO ExitCode -> RL p C(x y) -> IO ()
 trackBisect _ test NilRL = do
     test_result <- test
     if test_result == ExitSuccess
@@ -153,7 +158,7 @@
 patchTree2RL (Fork l r) = (patchTree2RL l) +<+ (patchTree2RL r)
 
 -- | Iterate the Patch Tree
-trackNextBisect :: (IsHunk p, Conflict p, PatchListFormat p, Patchy p)
+trackNextBisect :: (IsHunk p, Conflict p, PatchListFormat p, Patchy p, ApplyMonad IO (ApplyState p))
                 => [DarcsFlag] -> BisectState -> IO ExitCode -> BisectDir -> PatchTree p C(x y) -> IO ()
 trackNextBisect opts (dnow, dtotal) test dir (Fork l r) = do
   putStr ("Trying " ++ show dnow ++ "/" ++ show dtotal ++ " sequences...\n")
@@ -169,20 +174,20 @@
   putStrLn ("Last recent patch that fails the test (assuming monotony in the given range):")
   putDocLn (description p)
 
-jumpHalfOnRight :: (IsHunk p, Conflict p, PatchListFormat p, Patchy p) => [DarcsFlag] -> PatchTree p C(x y) -> IO ()
+jumpHalfOnRight :: (IsHunk p, Conflict p, PatchListFormat p, Patchy p, ApplyMonad IO (ApplyState p)) => [DarcsFlag] -> PatchTree p C(x y) -> IO ()
 jumpHalfOnRight opts l = unapplyRL ps >> makeScriptsExecutable opts ps
   where ps = patchTree2RL l
 
-jumpHalfOnLeft :: (IsHunk p, Conflict p, PatchListFormat p, Patchy p) => [DarcsFlag] -> PatchTree p C(x y) -> IO ()
+jumpHalfOnLeft :: (IsHunk p, Conflict p, PatchListFormat p, Patchy p, ApplyMonad IO (ApplyState p)) => [DarcsFlag] -> PatchTree p C(x y) -> IO ()
 jumpHalfOnLeft opts r = applyRL p >> makeScriptsExecutable opts p
   where p = patchTree2RL r
 
-applyRL :: (Invert p, ShowPatch p, Apply p) => RL p C(x y) -> IO ()
+applyRL :: (Invert p, ShowPatch p, Apply p, ApplyMonad IO (ApplyState p)) => RL p C(x y) -> IO ()
 applyRL   patches = sequence_ (mapFL safeApply (reverseRL $ patches))
 
-unapplyRL :: (Invert p, ShowPatch p, Apply p) => RL p C(x y) -> IO ()
+unapplyRL :: (Invert p, ShowPatch p, Apply p, ApplyMonad IO (ApplyState p)) => RL p C(x y) -> IO ()
 unapplyRL patches = sequence_ (mapRL (safeApply . invert) patches)
 
-safeApply :: (Invert p, ShowPatch p, Apply p) => p C(x y) -> IO ()
+safeApply :: (Invert p, ShowPatch p, Apply p, ApplyMonad IO (ApplyState p)) => p C(x y) -> IO ()
 safeApply p = apply p `catch` (\msg -> fail ("Bad patch (during trackdown --bisect):\n" ++ show msg))
 
diff --git a/src/Darcs/Commands/Unrecord.hs b/src/Darcs/Commands/Unrecord.hs
--- a/src/Darcs/Commands/Unrecord.hs
+++ b/src/Darcs/Commands/Unrecord.hs
@@ -45,6 +45,7 @@
                     readRepo, amInHashedRepository,
                     invalidateIndex, unrecordedChanges )
 import Darcs.Patch ( RepoPatch, invert, commute, effect )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Patch.Set ( PatchSet(..), Tagged(..), appendPSFL )
 #ifdef GADT_WITNESSES
 import Darcs.Patch.Set ( Origin )
@@ -61,6 +62,7 @@
 import Darcs.Witnesses.Sealed ( Sealed(..) )
 import Darcs.RepoPath( useAbsoluteOrStd )
 import Darcs.Lock( writeDocBinFile )
+import Storage.Hashed.Tree( Tree )
 #include "gadts.h"
 
 unrecordDescription :: String
@@ -240,7 +242,7 @@
             of (start :> patches) -> (start :> x +<+ patches)
       mh ps = (ps :> NilRL)
 
-savetoBundle :: RepoPatch p => [DarcsFlag]
+savetoBundle :: (RepoPatch p, ApplyState p ~ Tree) => [DarcsFlag]
              -> PatchSet p C(Origin z) -> FL (PatchInfoAnd p) C(z t)
              -> IO ()
 savetoBundle opts kept removed@(x :>: _) = do
diff --git a/src/Darcs/Commands/Unrevert.hs b/src/Darcs/Commands/Unrevert.hs
--- a/src/Darcs/Commands/Unrevert.hs
+++ b/src/Darcs/Commands/Unrevert.hs
@@ -36,6 +36,7 @@
                           readRecorded,
                           applyToWorking, unrecordedChanges )
 import Darcs.Patch ( RepoPatch, PrimOf, commute, namepatch, fromPrims )
+import Darcs.Patch.Apply( ApplyState )
 #ifdef GADT_WITNESSES
 import Darcs.Patch.Set ( Origin )
 #endif
@@ -104,8 +105,9 @@
   debugMessage "Finished unreverting."
 unrevertCmd _ _ = impossible
 
-writeUnrevert :: RepoPatch p => Repository p C(r u t) -> FL (PrimOf p) C(x y)
-               -> Tree IO -> FL (PrimOf p) C(r x) -> IO ()
+writeUnrevert :: (RepoPatch p, ApplyState p ~ Tree)
+              => Repository p C(r u t) -> FL (PrimOf p) C(x y)
+              -> Tree IO -> FL (PrimOf p) C(r x) -> IO ()
 writeUnrevert repository NilFL _ _ = removeFileMayNotExist $ unrevertUrl repository
 writeUnrevert repository ps rec pend = do
   case commute (pend :> ps) of
diff --git a/src/Darcs/Commands/Util.hs b/src/Darcs/Commands/Util.hs
--- a/src/Darcs/Commands/Util.hs
+++ b/src/Darcs/Commands/Util.hs
@@ -24,10 +24,12 @@
 import Darcs.Arguments ( DarcsFlag(LookForAdds) )
 import Darcs.Patch ( RepoPatch )
 import Darcs.RepoPath ( SubPath, toFilePath )
-import Darcs.Repository ( Repository, extractOptions, readRecordedAndPending,
+import Darcs.Repository ( Repository, extractOptions, readRecorded,
     readUnrecorded )
 import Darcs.Repository.State ( applyTreeFilter, restrictBoring )
+import Darcs.Patch.Apply ( ApplyState )
 import Storage.Hashed( floatPath, readPlainTree )
+import Storage.Hashed.Tree( Tree )
 import Storage.Hashed.Monad ( virtualTreeIO, exists )
 
 announceFiles :: Maybe [SubPath] -> String -> IO ()
@@ -35,9 +37,10 @@
 announceFiles (Just files) message = putStrLn $ message ++ " " ++
     unwords (map show files) ++ ":\n"
 
-filterExistingFiles :: (RepoPatch p) => Repository p C(r u t) -> [SubPath] -> IO [SubPath]
+filterExistingFiles :: (RepoPatch p, ApplyState p ~ Tree)
+                    => Repository p C(r u t) -> [SubPath] -> IO [SubPath]
 filterExistingFiles repo files = do
-      pristine <- readRecordedAndPending repo
+      pristine <- readRecorded repo
       -- TODO this is slightly inefficient, since we should really somehow
       -- extract the unrecorded state as a side-effect of unrecordedChanges
       index <- readUnrecorded repo $ Just files
@@ -46,9 +49,9 @@
       let paths = map toFilePath files
           check = virtualTreeIO (mapM exists $ map floatPath paths)
       (in_working, _) <- check working
-      (in_pending, _) <- check pristine
-      mapM_ maybe_warn $ zip3 paths in_working in_pending
-      return [ path | (path, True) <- zip files (zipWith (||) in_working in_pending) ]
+      (in_pristine, _) <- check pristine
+      mapM_ maybe_warn $ zip3 paths in_working in_pristine
+      return [ path | (path, True) <- zip files (zipWith (||) in_working in_pristine) ]
     where maybe_warn (file, False, False) =
               putStrLn $ "WARNING: File '"++file++"' does not exist!"
           maybe_warn (file, True, False) | LookForAdds `notElem` extractOptions repo =
diff --git a/src/Darcs/Commands/WhatsNew.hs b/src/Darcs/Commands/WhatsNew.hs
--- a/src/Darcs/Commands/WhatsNew.hs
+++ b/src/Darcs/Commands/WhatsNew.hs
@@ -40,6 +40,7 @@
                         , unrecordedChanges, readRecorded )
 import Darcs.Repository.Prefs ( filetypeFunction )
 import Darcs.Patch ( RepoPatch, PrimPatch, PrimOf, plainSummaryPrims, primIsHunk, applyToTree )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Patch.TouchesFiles( choosePreTouching )
 import Darcs.Patch.Permutations ( partitionRL )
 import Darcs.RepoPath( SubPath, toFilePath )
@@ -47,6 +48,7 @@
 import Darcs.Witnesses.Ordered ( FL(..), reverseRL, reverseFL, (:>)(..), nullFL )
 import Darcs.Witnesses.Sealed ( Sealed(..), unFreeLeft )
 import Darcs.Diff( treeDiff )
+import Storage.Hashed.Tree( Tree )
 
 import Printer ( putDocLn, renderString, vcat, text )
 
@@ -98,7 +100,8 @@
                                                  lookforadds,
                                                  workingRepoDir]}
 
-filteredChanges :: RepoPatch p => [DarcsFlag] -> Repository p C(r u t)
+filteredChanges :: (RepoPatch p, ApplyState p ~ Tree, ApplyState (PrimOf p) ~ Tree)
+                => [DarcsFlag] -> Repository p C(r u t)
                 -> Maybe [SubPath] -> IO (Sealed (FL (PrimOf p) C(t)))
 filteredChanges opts repo files =
   choosePreTouching (map toFilePath <$> files) `fmap` unrecordedChanges (diffingOpts opts) repo files
@@ -147,7 +150,8 @@
     Sealed changes <- filteredChanges opts repository files
     when (nullFL changes) $ putStrLn "No changes!" >> (exitWith $ ExitFailure 1)
     printSummary repository changes
-       where printSummary :: RepoPatch p => Repository p C(r u t) -> FL (PrimOf p) C(r y) -> IO ()
+       where printSummary :: (RepoPatch p, ApplyState p ~ Tree, ApplyState (PrimOf p) ~ Tree)
+                          => Repository p C(r u t) -> FL (PrimOf p) C(r y) -> IO ()
              printSummary _ NilFL = do putStrLn "No changes!"
                                        exitWith $ ExitFailure 1
              printSummary r ch | Summary `elem` opts = putDocLn $ plainSummaryPrims ch
diff --git a/src/Darcs/Email.hs b/src/Darcs/Email.hs
--- a/src/Darcs/Email.hs
+++ b/src/Darcs/Email.hs
@@ -16,6 +16,7 @@
 import Foreign.Ptr ( Ptr, plusPtr )
 import Foreign.Storable ( poke )
 import Data.Word ( Word8 )
+import Data.Maybe ( fromMaybe )
 
 -- lineMax is maximum number of characters in an e-mail line excluding the CRLF
 -- at the end. qlineMax is the number of characters in a q-encoded or
@@ -194,27 +195,26 @@
           toWord8 :: Int -> Word8
           toWord8 = fromIntegral
 
-makeEmail :: String -> [(String, String)] -> (Maybe Doc) -> Doc -> (Maybe String) -> Doc
-makeEmail repodir headers mcontents bundle mfilename =
+makeEmail :: String -> [(String, String)] -> (Maybe Doc) -> Maybe String -> Doc -> (Maybe String) -> Doc
+makeEmail repodir headers mcontents mcharset bundle mfilename =
     text "DarcsURL:" <+> text repodir
  $$ foldl (\m (h,v) -> m $$ (text (h ++ ":") <+> text v)) empty headers
  $$ text "MIME-Version: 1.0"
- $$ text "Content-Type: multipart/mixed; boundary=\"=-\""
+ $$ text "Content-Type: multipart/mixed; boundary=\"=_\""
  $$ text ""
- $$ text "--=-"
+ $$ text "--=_"
  $$ (case mcontents of
        Just contents ->
-            text "Content-Type: text/plain"
+            text ("Content-Type: text/plain; charset=\"" ++
+              fromMaybe "x-unknown" mcharset ++ "\"")
          $$ text "Content-Transfer-Encoding: quoted-printable"
          $$ text ""
          $$ packedString (qpencode (renderPS contents))
          $$ text ""
-         $$ text "--=-"
+         $$ text "--=_"
        Nothing -> empty)
- $$ text "Content-Type: multipart/alternative; boundary=\"=_\""
- $$ text ""
- $$ text "--=_"
- $$ text "Content-Type: text/x-darcs-patch"
+ $$ text "Content-Type: text/x-darcs-patch; name=\"patch-preview.txt\""
+ $$ text "Content-Disposition: inline"
  $$ text "Content-Transfer-Encoding: quoted-printable"
  $$ text "Content-Description: Patch preview"
  $$ text ""
@@ -228,11 +228,11 @@
          Just filename -> text "; name=\"" <> text filename <> text "\""
          Nothing -> empty)
  $$ text "Content-Transfer-Encoding: quoted-printable"
+ $$ text "Content-Disposition: attachment"
  $$ text "Content-Description: A darcs patch for your repository!"
  $$ text ""
  $$ packedString (qpencode (renderPS bundle))
  $$ text "--=_--"
- $$ text "--=---"
  $$ text ""
  $$ text "."
  $$ text ""
diff --git a/src/Darcs/External.hs b/src/Darcs/External.hs
--- a/src/Darcs/External.hs
+++ b/src/Darcs/External.hs
@@ -67,9 +67,9 @@
 import Darcs.Lock ( withTemp, withOpenTemp, tempdirLoc, removeFileMayNotExist )
 import CommandLine ( parseCmd, addUrlencoded )
 import URL ( copyUrl, copyUrlFirst, waitUrl )
-import Ssh ( getSSH, copySSH, SSHCmd(..) )
 import URL ( Cachable(..) )
 import Exec ( exec, Redirect(..), withoutNonBlock )
+import Darcs.Ssh ( getSSH, copySSH, SSHCmd(..) )
 import Darcs.URL ( isFile, isHttpUrl, isSshUrl, splitSshUrl, SshFilePath, sshUhost )
 import Darcs.Utils ( catchall )
 import Printer ( Doc, Printers, putDocLnWith, hPutDoc, hPutDocLn, hPutDocWith, ($$), renderPS,
@@ -257,7 +257,7 @@
 --   reading its output.  Return its ExitCode
 execSSH :: SshFilePath -> String -> IO ExitCode
 execSSH remoteAddr command =
-    do (ssh, ssh_args) <- getSSH SSH remoteAddr
+    do (ssh, ssh_args) <- getSSH SSH
        debugMessage $ unwords (ssh:ssh_args++[sshUhost remoteAddr,command])
        withoutProgress $ do hid <- runProcess ssh (ssh_args++[sshUhost remoteAddr,command])
                                    Nothing Nothing Nothing Nothing Nothing
@@ -290,7 +290,7 @@
 
 pipeDocSSH :: SshFilePath -> [String] -> Doc -> IO ExitCode
 pipeDocSSH remoteAddr args input =
-    do (ssh, ssh_args) <- getSSH SSH remoteAddr
+    do (ssh, ssh_args) <- getSSH SSH
        pipeDoc ssh (ssh_args++ (sshUhost remoteAddr:args)) input
 
 sendEmail :: String -> String -> String -> String -> String -> String -> IO ()
@@ -480,7 +480,7 @@
 -- Warning:  A do-notation statement discarded a result of type ExitCode.
        _ <- waitForProcess pid
        takeMVar mvare
-       return $ packedString out
+       return $ if B.null out then empty else packedString out
 
 signString :: [DarcsFlag] -> Doc -> IO Doc
 signString [] d = return d
@@ -619,8 +619,7 @@
     do hPutDocWith pr fh inp
        hClose fh
        bracket (openBinaryFile fn ReadMode) hClose $ \h ->
-         do x <- do pid <- runProcess c args Nothing Nothing (Just h) Nothing Nothing
-                    waitForProcess pid
+         do x <- do waitForProcess  =<< runProcess c args Nothing Nothing (Just h) Nothing Nothing
             when (x == ExitFailure 127) $
                  putStrLn $ "Command not found:\n   "++ show (c:args)
             return x
diff --git a/src/Darcs/Flags.hs b/src/Darcs/Flags.hs
--- a/src/Darcs/Flags.hs
+++ b/src/Darcs/Flags.hs
@@ -23,7 +23,7 @@
                      isNotUnified, doHappyForwarding, includeBoring,
                      doAllowCaseOnly, doAllowWindowsReserved, doReverse,
                      usePacks,
-                     showChangesOnlyToFiles, rollbackInWorkingDir,
+                     showChangesOnlyToFiles, rollbackInWorkingDir, removeFromAmended,
                      defaultFlag
                    ) where
 import Data.Maybe( fromMaybe )
@@ -39,7 +39,7 @@
                | Verbose | NormalVerbosity | Quiet
                | Target String | Cc String
                | Output AbsolutePathOrStd | OutputAutoName AbsolutePath
-               | Subject String | InReplyTo String
+               | Subject String | InReplyTo String | Charset String
                | SendmailCmd String | Author String | PatchName String
                | OnePatch String | SeveralPatch String
                | AfterPatch String | UpToPatch String
@@ -58,7 +58,6 @@
                | Sign | SignAs String | NoSign | SignSSL String
                | HappyForwarding | NoHappyForwarding
                | Verify AbsolutePath | VerifySSL AbsolutePath
-               | SSHControlMaster | NoSSHControlMaster
                | RemoteDarcsOpt String
                | EditDescription | NoEditDescription
                | Toks String
@@ -97,7 +96,7 @@
 
                | Disable | SetScriptsExecutable | DontSetScriptsExecutable | Bisect
                | UseHashedInventory
-               | UseFormat2
+               | UseFormat2 | UseNoWorkingDir | UseWorkingDir
                | NoUpdateWorking
                | Sibling AbsolutePath | Relink
                | OptimizePristine | OptimizeHTTP
@@ -115,6 +114,7 @@
                | Check | Repair | JustThisRepo
                | NullFlag
                | RecordRollback | NoRecordRollback
+               | NoAmendUnrecord | AmendUnrecord
                  deriving ( Eq, Show )
 
 -- ADTs for selecting specific behaviour... FIXME These should be eventually
@@ -130,10 +130,14 @@
               | otherwise = DefaultRemoteDarcs
 
 data UseIndex = UseIndex | IgnoreIndex
-data ScanKnown = ScanKnown | ScanAll
+data ScanKnown = ScanKnown -- ^Just files already known to darcs
+               | ScanAll -- ^All files, i.e. look for new ones
+               | ScanBoring -- ^All files, even boring ones
 diffingOpts :: [DarcsFlag] -> (UseIndex, ScanKnown)
 diffingOpts opts = (if willIgnoreTimes opts then IgnoreIndex else UseIndex,
-                    if LookForAdds `elem` opts then ScanAll else ScanKnown)
+                    if LookForAdds `elem` opts then 
+                      if Boring `elem` opts then ScanBoring else ScanAll
+                      else ScanKnown)
 
 data RemoteDarcs = RemoteDarcs String | DefaultRemoteDarcs
 
@@ -200,7 +204,7 @@
 doReverse = getBoolFlag Reverse Forward
 
 usePacks :: [DarcsFlag] -> Bool
-usePacks = not . getBoolFlag NoPacks Packs
+usePacks = getBoolFlag Packs NoPacks
 
 showChangesOnlyToFiles :: [DarcsFlag] -> Bool
 showChangesOnlyToFiles = getBoolFlag OnlyChangesToFiles ChangesToAllFiles
@@ -215,3 +219,6 @@
 
 rollbackInWorkingDir :: [DarcsFlag] -> Bool
 rollbackInWorkingDir = getBoolFlag NoRecordRollback RecordRollback
+
+removeFromAmended :: [DarcsFlag] -> Bool
+removeFromAmended = getBoolFlag AmendUnrecord NoAmendUnrecord
diff --git a/src/Darcs/Global.hs b/src/Darcs/Global.hs
--- a/src/Darcs/Global.hs
+++ b/src/Darcs/Global.hs
@@ -21,25 +21,38 @@
 -- features, such as exit handlers.  These features slightly break the Haskellian
 -- purity of darcs, in favour of programming convenience.
 module Darcs.Global ( atexit, withAtexit,
-                      sshControlMasterDisabled, setSshControlMasterDisabled,
+                      SshSettings(..), defaultSsh,
                       timingsMode, setTimingsMode,
                       whenDebugMode, withDebugMode, setDebugMode,
                       debugMessage, debugFail, putTiming,
                       addCRCWarning, getCRCWarnings, resetCRCWarnings,
                       addBadSource, getBadSourcesList, isBadSource, darcsdir,
-                      isReachableSource, addReachableSource
+                      isReachableSource, addReachableSource,
+                      windows
     ) where
 
+import Control.Applicative ( (<$>), (<*>) )
 import Control.Monad ( when )
 import Control.Concurrent.MVar
-import Control.Exception.Extensible (bracket_, catch, block, unblock, SomeException)
+import Control.Exception.Extensible ( bracket_, catch, catchJust, SomeException
+                                    , block, unblock
+                                    )
 import Data.IORef ( IORef, newIORef, readIORef, writeIORef )
 import Data.IORef ( modifyIORef )
+import Data.List ( isPrefixOf )
+import System.Info ( os )
 import System.IO.Unsafe (unsafePerformIO)
 import System.IO (hPutStrLn, hPutStr, stderr)
+import System.IO.Error ( ioeGetErrorType, isDoesNotExistErrorType )
+import System.Process ( readProcessWithExitCode )
 import System.Time ( calendarTimeToString, toCalendarTime, getClockTime )
+import System.Environment ( getEnv )
+import System.Exit ( ExitCode(..) )
 import Prelude hiding (catch)
 
+windows :: Bool
+windows = "mingw" `isPrefixOf` os
+
 {-# NOINLINE atexitActions #-}
 atexitActions :: MVar (Maybe [IO ()])
 atexitActions = unsafePerformIO (newMVar (Just []))
@@ -113,16 +126,48 @@
 timingsMode :: Bool
 timingsMode = unsafePerformIO $ readIORef _timingsMode
 
-{-# NOINLINE _sshControlMasterDisabled #-}
-_sshControlMasterDisabled :: IORef Bool
-_sshControlMasterDisabled = unsafePerformIO $ newIORef False
+data SshSettings = SshSettings { ssh :: String
+                               , scp :: String
+                               , sftp :: String }
+  deriving (Show, Eq)
 
-setSshControlMasterDisabled :: IO ()
-setSshControlMasterDisabled = writeIORef _sshControlMasterDisabled True
+_defaultSsh :: IORef SshSettings
+_defaultSsh = unsafePerformIO $ newIORef =<< detectSsh
 
-{-# NOINLINE sshControlMasterDisabled #-}
-sshControlMasterDisabled :: Bool
-sshControlMasterDisabled = unsafePerformIO $ readIORef _sshControlMasterDisabled
+-- expected properties:
+--
+-- * only ever runs once in the lifetime of the program
+-- * environment variables override all
+-- * tries Putty first on Windows
+-- * falls back to plain old ssh
+detectSsh :: IO SshSettings
+detectSsh = do
+  whenDebugMode (putStrLn "Detecting SSH settings")
+  vanilla <- if windows
+                then do
+                  plinkStr <- (snd3 <$> readProcessWithExitCode "plink" [] "")
+                                `catch` \(e :: SomeException) -> return (show e)
+                  whenDebugMode $ putStrLn $ "SSH settings (plink): " ++ (concat . take 1 . lines $ plinkStr)
+                  if "PuTTY" `isPrefixOf` plinkStr
+                    then return (SshSettings "plink" "pscp -q" "psftp")
+                    else return rawVanilla
+                else return rawVanilla
+  settings <- SshSettings <$> fromEnv (ssh vanilla)  "DARCS_SSH"
+                          <*> fromEnv (scp vanilla)  "DARCS_SCP"
+                          <*> fromEnv (sftp vanilla) "DARCS_SFTP"
+  whenDebugMode (putStrLn $ "SSH settings: " ++ show settings)
+  return settings
+ where
+  snd3 (_, x, _) = x
+  rawVanilla = SshSettings "ssh" "scp -q" "sftp"
+  fromEnv :: String -> String -> IO String
+  fromEnv d v = catchJust notFound
+                          (getEnv v)
+                          (const (return d))
+  notFound e = if isDoesNotExistErrorType (ioeGetErrorType e) then Just () else Nothing
+
+defaultSsh :: SshSettings
+defaultSsh = unsafePerformIO $ readIORef _defaultSsh
 
 type CRCWarningList = [FilePath]
 {-# NOINLINE _crcWarningList #-}
diff --git a/src/Darcs/IO.hs b/src/Darcs/IO.hs
--- a/src/Darcs/IO.hs
+++ b/src/Darcs/IO.hs
@@ -15,7 +15,8 @@
 -- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 -- Boston, MA 02110-1301, USA.
 
-{-# OPTIONS_GHC -fglasgow-exts #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
 module Darcs.IO ( runTolerantly, runSilently ) where
 
 import Prelude hiding ( catch )
@@ -24,26 +25,24 @@
 import System.IO.Error ( isDoesNotExistError, isPermissionError )
 import Control.Exception.Extensible ( catch, SomeException, IOException )
 import Control.Monad.Error
-import System.Directory ( getDirectoryContents, createDirectory,
+import System.Directory ( createDirectory,
                           removeDirectory, removeFile,
                           renameFile, renameDirectory,
-                          doesDirectoryExist, doesFileExist,
+                          doesDirectoryExist, doesFileExist
                         )
 import Darcs.Repository.Prefs( changePrefval )
 
-import ByteStringUtils ( linesPS, unlinesPS)
-import qualified Data.ByteString as B (ByteString, empty, null, readFile, concat)
-import qualified Data.ByteString.Lazy as BL
-import qualified Data.ByteString.Char8 as BC (unpack, pack)
+import qualified Data.ByteString as B (empty, null, readFile)
 
 import Darcs.Utils ( prettyException )
 import Darcs.External ( backupByCopying, backupByRenaming )
 import Darcs.Patch.FileName ( FileName, fn2fp )
 import Darcs.Lock ( writeAtomicFilePS )
-import Workaround ( setExecutable )
 import Darcs.Patch.ApplyMonad( ApplyMonad(..) )
+import Storage.Hashed.Tree( Tree )
 
-instance ApplyMonad IO where
+instance ApplyMonad IO Tree where
+    type ApplyMonadBase IO = IO
     mDoesDirectoryExist = doesDirectoryExist . fn2fp
     mChangePref = changePrefval
     mModifyFilePS f j = B.readFile (fn2fp f) >>= j >>= writeAtomicFilePS (fn2fp f)
@@ -113,7 +112,8 @@
     fail s = runTM $ fail s
     return x = runTM $ return x
 
-instance ApplyMonad TolerantIO where
+instance ApplyMonad TolerantIO Tree where
+    type ApplyMonadBase TolerantIO = IO
     mDoesDirectoryExist d = runTM $ mDoesDirectoryExist d
     mReadFilePS f = runTM $ mReadFilePS f
     mChangePref a b c = warning $ mChangePref a b c
@@ -146,7 +146,8 @@
         y = fn2fp b
         couldNotRename = "Could not rename " ++ x ++ " to " ++ y
 
-instance ApplyMonad SilentIO where
+instance ApplyMonad SilentIO Tree where
+    type ApplyMonadBase SilentIO = IO
     mDoesDirectoryExist d = runTM $ mDoesDirectoryExist d
     mReadFilePS f = runTM $ mReadFilePS f
     mChangePref a b c = warning $ mChangePref a b c
diff --git a/src/Darcs/Match.hs b/src/Darcs/Match.hs
--- a/src/Darcs/Match.hs
+++ b/src/Darcs/Match.hs
@@ -48,7 +48,7 @@
                firstMatch, secondMatch, haveNonrangeMatch,
                havePatchsetMatch, getOnePatchset,
                checkMatchSyntax, applyInvToMatcher, nonrangeMatcher,
-               InclusiveOrExclusive(..), matchExists
+               InclusiveOrExclusive(..), matchExists, applyNInv, hasIndexRange
              ) where
 
 import Text.Regex ( mkRegex, matchRegex )
@@ -64,6 +64,7 @@
 import Darcs.Patch.Dummy ( DummyPatch )
 import Darcs.Repository ( Repository, readRepo, createPristineDirectoryTree )
 import Darcs.Patch.Set ( PatchSet(..), Tagged(..), SealedPatchSet, newset2RL )
+import Darcs.Patch.Apply( ApplyState )
 #ifdef GADT_WITNESSES
 import Darcs.Patch.Set ( Origin )
 #endif
@@ -88,6 +89,7 @@
 import Darcs.Patch.FileName ( FileName )
 import Darcs.Witnesses.Sealed ( FlippedSeal(..), Sealed2(..),
                       seal, flipSeal, seal2, unsealFlipped, unseal2, unseal )
+import Storage.Hashed.Tree ( Tree )
 #include "impossible.h"
 
 data InclusiveOrExclusive = Inclusive | Exclusive deriving Eq
@@ -110,15 +112,17 @@
           hasC (Context _:_) = True
           hasC (_:xs) = hasC xs
 
-getNonrangeMatch :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] -> IO ()
+getNonrangeMatch :: (ApplyMonad IO (ApplyState p), RepoPatch p, ApplyState p ~ Tree)
+                 => Repository p C(r u t) -> [DarcsFlag] -> IO ()
 getNonrangeMatch r fs = withRecordedMatch r (getNonrangeMatchS fs)
 
-getPartialNonrangeMatch :: RepoPatch p => Repository p C(r u t)
+getPartialNonrangeMatch :: (RepoPatch p, ApplyMonad IO (ApplyState p), ApplyState p ~ Tree)
+                        => Repository p C(r u t)
                            -> [DarcsFlag] -> [FileName] -> IO ()
 getPartialNonrangeMatch r fs _ =
     withRecordedMatch r (getNonrangeMatchS fs)
 
-getNonrangeMatchS :: (ApplyMonad m, MonadProgress m, RepoPatch p) =>
+getNonrangeMatchS :: (ApplyMonad m (ApplyState p), MonadProgress m, RepoPatch p, ApplyState p ~ Tree) =>
                         [DarcsFlag] -> PatchSet p C(Origin x) -> m ()
 getNonrangeMatchS fs repo =
     case nonrangeMatcher fs of
@@ -135,15 +139,17 @@
                  || isJust (firstMatcher fs::Maybe (Matcher DummyPatch))
                  || isJust (hasIndexRange fs)
 
-getFirstMatch :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] -> IO ()
+getFirstMatch :: (ApplyMonad IO (ApplyState p), RepoPatch p, ApplyState p ~ Tree)
+              => Repository p C(r u t) -> [DarcsFlag] -> IO ()
 getFirstMatch r fs = withRecordedMatch r (getFirstMatchS fs)
 
-getPartialFirstMatch :: RepoPatch p => Repository p C(r u t)
+getPartialFirstMatch :: (RepoPatch p, ApplyMonad IO (ApplyState p), ApplyState p ~ Tree)
+                     => Repository p C(r u t)
                         -> [DarcsFlag] -> Maybe [FileName] -> IO ()
 getPartialFirstMatch r fs _ =
     withRecordedMatch r (getFirstMatchS fs)
 
-getFirstMatchS :: (ApplyMonad m, MonadProgress m, RepoPatch p) =>
+getFirstMatchS :: (ApplyMonad m (ApplyState p), MonadProgress m, RepoPatch p) =>
                      [DarcsFlag] -> PatchSet p C(Origin x) -> m ()
 getFirstMatchS fs repo =
     case hasLastn fs of
@@ -164,7 +170,8 @@
 secondMatch :: [DarcsFlag] -> Bool
 secondMatch fs = isJust (secondMatcher fs::Maybe (Matcher DummyPatch)) || isJust (hasIndexRange fs)
 
-getPartialSecondMatch :: RepoPatch p => Repository p C(r u t)
+getPartialSecondMatch :: (RepoPatch p, ApplyMonad IO (ApplyState p), ApplyState p ~ Tree)
+                      => Repository p C(r u t)
                         -> [DarcsFlag] -> Maybe [FileName] -> IO ()
 getPartialSecondMatch r fs _ =
     withRecordedMatch r $ \repo ->
@@ -176,7 +183,7 @@
               then getTagS m repo
               else getMatcherS Exclusive m repo
 
-unpullLastN :: (ApplyMonad m, MonadProgress m, Patchy p) => PatchSet p C(x y) -> Int -> m ()
+unpullLastN :: (ApplyMonad m (ApplyState p), MonadProgress m, Patchy p) => PatchSet p C(x y) -> Int -> m ()
 unpullLastN repo n = applyInvRL `unsealFlipped` (safetake n $ newset2RL repo)
 
 checkMatchSyntax :: [DarcsFlag] -> IO ()
@@ -290,7 +297,7 @@
                     Nothing -> bug "Couldn't matchPatch"
                     Just m -> findAPatch m ps
 
-getOnePatchset :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] ->
+getOnePatchset :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> [DarcsFlag] ->
                  IO (SealedPatchSet p C(Origin))
 getOnePatchset repository fs =
     case nonrangeMatcher fs of
@@ -392,7 +399,7 @@
 matchExists m (PatchSet (p:<:ps) ts) | applyMatcher m $ p = True
                                      | otherwise = matchExists m (PatchSet ps ts)
 
-applyInvToMatcher :: (RepoPatch p, ApplyMonad m)
+applyInvToMatcher :: (RepoPatch p, ApplyMonad m (ApplyState p))
                   => InclusiveOrExclusive -> Matcher p -> PatchSet p C(Origin x) -> m ()
 applyInvToMatcher _ _ (PatchSet NilRL NilRL) = impossible
 applyInvToMatcher ioe m (PatchSet NilRL (Tagged t _ ps :<: ts)) = applyInvToMatcher ioe m
@@ -401,14 +408,24 @@
     | applyMatcher m p = when (ioe == Inclusive) (applyInvp p)
     | otherwise = applyInvp p >> applyInvToMatcher ioe m (PatchSet ps xs)
 
-getMatcherS :: (ApplyMonad m, RepoPatch p) =>
+-- | @applyNInv@ n ps applies the inverse of the last @n@ patches of @ps@.
+applyNInv :: (RepoPatch p, ApplyMonad m (ApplyState p)) => Int -> PatchSet p C(Origin x) -> m ()
+applyNInv n _ | n <= 0 = return ()
+applyNInv _ (PatchSet NilRL NilRL) = error "Index out of range."
+applyNInv n (PatchSet NilRL (Tagged t _ ps :<: ts)) =
+  applyNInv n (PatchSet (t :<: ps) ts)
+applyNInv n (PatchSet (p :<: ps) xs) =
+  applyInvp p >> applyNInv (n - 1) (PatchSet ps xs)
+
+
+getMatcherS :: (ApplyMonad m (ApplyState p), RepoPatch p) =>
                  InclusiveOrExclusive -> Matcher p -> PatchSet p C(Origin x) -> m ()
 getMatcherS ioe m repo =
     if matchExists m repo
     then applyInvToMatcher ioe m repo
     else fail $ "Couldn't match pattern "++ show m
 
-getTagS :: (ApplyMonad m, MonadProgress m, RepoPatch p) =>
+getTagS :: (ApplyMonad m (ApplyState p), MonadProgress m, RepoPatch p) =>
              Matcher p -> PatchSet p C(Origin x) -> m ()
 getTagS match repo = do
     let pinfo = patch2patchinfo `unseal2` (findAPatch match repo)
@@ -419,7 +436,7 @@
 -- patch', and to apply its inverse. If we fail to fetch the patch
 -- (presumably in a partial repositiory), then we share our sorrow
 -- with the user.
-applyInvp :: (Patchy p, ApplyMonad m) => PatchInfoAnd p C(x y) -> m ()
+applyInvp :: (Patchy p, ApplyMonad m (ApplyState p)) => PatchInfoAnd p C(x y) -> m ()
 applyInvp hp = apply (invert $ fromHopefully hp)
     where fromHopefully = conscientiously $ \e ->
                      text "Sorry, partial repository problem.  Patch not available:"
@@ -434,10 +451,10 @@
 safetake _ NilRL = error "There aren't that many patches..."
 safetake i (a:<:as) = a `consRLSealed` safetake (i-1) as
 
-withRecordedMatch :: RepoPatch p => Repository p C(r u t)
+withRecordedMatch :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t)
                   -> (PatchSet p C(Origin r) -> IO ()) -> IO ()
 withRecordedMatch r job = do createPristineDirectoryTree r "."
                              readRepo r >>= job
 
-applyInvRL :: (ApplyMonad m, MonadProgress m, Patchy p) => RL (PatchInfoAnd p) C(x r) -> m ()
+applyInvRL :: (ApplyMonad m (ApplyState p), MonadProgress m, Patchy p) => RL (PatchInfoAnd p) C(x r) -> m ()
 applyInvRL = applyPatches . invertRL -- this gives nicer feedback
diff --git a/src/Darcs/Patch.hs b/src/Darcs/Patch.hs
--- a/src/Darcs/Patch.hs
+++ b/src/Darcs/Patch.hs
@@ -16,7 +16,7 @@
 --  Boston, MA 02110-1301, USA.
 
 {-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, UndecidableInstances #-} -- XXX Undecidable only in GHC < 7
 #include "gadts.h"
 module Darcs.Patch ( RepoPatch,
                      PrimOf, Named, Patchy,
@@ -89,5 +89,8 @@
                           PrimPatch, PrimPatchBase(..) )
 import Darcs.Patch.TokenReplace ( forceTokReplace )
 import Darcs.Patch.Repair ( isInconsistent )
+import Darcs.Patch.Apply ( ApplyState )
+import Storage.Hashed.Tree( Tree )
 
-instance (CommuteNoConflicts p, Conflict p, IsHunk p, PatchListFormat p, PrimPatchBase p, Patchy p) => Patchy (Named p)
+instance (CommuteNoConflicts p, Conflict p, IsHunk p, PatchListFormat p,
+          PrimPatchBase p, Patchy p, ApplyState p ~ Tree) => Patchy (Named p)
diff --git a/src/Darcs/Patch/Apply.hs b/src/Darcs/Patch/Apply.hs
--- a/src/Darcs/Patch/Apply.hs
+++ b/src/Darcs/Patch/Apply.hs
@@ -16,13 +16,14 @@
 --  Boston, MA 02110-1301, USA.
 
 
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, MultiParamTypeClasses #-}
 
 #include "gadts.h"
 
 module Darcs.Patch.Apply ( Apply(..),
                            applyToFilepaths,
                            applyToTree,
+                           applyToState,
                          )
     where
 
@@ -30,28 +31,35 @@
 
 import Darcs.Witnesses.Ordered ( FL(..), RL(..) )
 
-import Darcs.Patch.ApplyMonad ( ApplyMonad(..), withFilePaths )
+import Darcs.Patch.ApplyMonad ( ApplyMonad(..), withFilePaths, ApplyMonadTrans(..) )
 import Darcs.Patch.FileName( fn2fp, fp2fn )
 import Storage.Hashed.Tree( Tree )
 import Storage.Hashed.Monad( virtualTreeMonad )
 
 import Control.Monad ( MonadPlus )
 
-
 class Apply p where
-    apply :: ApplyMonad m => p C(x y) -> m ()
+    type ApplyState p :: (* -> *) -> *
+    apply :: ApplyMonad m (ApplyState p) => p C(x y) -> m ()
 
 instance Apply p => Apply (FL p) where
+    type ApplyState (FL p) = ApplyState p
     apply NilFL = return ()
     apply (p:>:ps) = apply p >> apply ps
 
 instance Apply p => Apply (RL p) where
+    type ApplyState (RL p) = ApplyState p
     apply NilRL = return ()
     apply (p:<:ps) = apply ps >> apply p
 
-applyToFilepaths :: Apply p => p C(x y) -> [FilePath] -> [FilePath]
+applyToFilepaths :: (Apply p, ApplyState p ~ Tree) => p C(x y) -> [FilePath] -> [FilePath]
 applyToFilepaths pa fs = map fn2fp $ withFilePaths (map fp2fn fs) (apply pa)
 
 -- | Apply a patch to a 'Tree', yielding a new 'Tree'.
-applyToTree :: (Apply p, Functor m, MonadPlus m) => p C(x y) -> Tree m -> m (Tree m)
+applyToTree :: (Apply p, Functor m, Monad m, ApplyState p ~ Tree)
+            => p C(x y) -> Tree m -> m (Tree m)
 applyToTree patch t = snd `fmap` virtualTreeMonad (apply patch) t
+
+applyToState :: forall p m C(x y). (Apply p, ApplyMonadTrans m (ApplyState p))
+             => p C(x y) -> (ApplyState p) m -> m ((ApplyState p) m)
+applyToState patch t = snd `fmap` runApplyMonad (apply patch) t
diff --git a/src/Darcs/Patch/ApplyMonad.hs b/src/Darcs/Patch/ApplyMonad.hs
--- a/src/Darcs/Patch/ApplyMonad.hs
+++ b/src/Darcs/Patch/ApplyMonad.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeSynonymInstances #-}
+{-# LANGUAGE TypeSynonymInstances, MultiParamTypeClasses #-}
 -- Copyright (C) 2010, 2011 Petr Rockai
 --
 -- Permission is hereby granted, free of charge, to any person
@@ -20,40 +20,87 @@
 -- ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 -- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 -- SOFTWARE.
-module Darcs.Patch.ApplyMonad( ApplyMonad(..), withFilePaths, withFiles ) where
+module Darcs.Patch.ApplyMonad( ApplyMonad(..), ApplyMonadTrans(..), withFilePaths, withFiles, ToTree(..) ) where
 
 import qualified Data.ByteString      as B
 import qualified Data.ByteString.Lazy as BL
 import qualified Data.Map             as M
 import qualified Storage.Hashed.Monad as HSM
+import Storage.Hashed.Tree ( Tree )
 import ByteStringUtils( linesPS, unlinesPS )
 import Darcs.Patch.FileName( FileName, movedirfilename, fn2fp )
 import Storage.Hashed.AnchoredPath( floatPath, AnchoredPath )
 import Control.Monad.State.Strict
+import Control.Monad.Identity( Identity )
 import Darcs.MonadProgress
 
+-- TODO should UUID/Object live somewhere more central?
+import Darcs.Patch.Prim.V3.ObjectMap ( UUID, Object, ObjectMap, DirContent )
+
 fn2ap :: FileName -> AnchoredPath
 fn2ap = floatPath . fn2fp
 
-class (Functor m, Monad m) => ApplyMonad m where
-    mDoesDirectoryExist :: FileName -> m Bool
-    mReadFilePS :: FileName -> m B.ByteString
-    mReadFilePSs :: FileName -> m [B.ByteString]
+class ToTree s where
+  toTree :: s m -> Tree m
+
+instance ToTree Tree where
+  toTree = id
+
+class (Functor m, Monad m, ApplyMonad (ApplyMonadOver m state) state)
+      => ApplyMonadTrans m (state :: (* -> *) -> *) where
+  type ApplyMonadOver m state :: * -> *
+  runApplyMonad :: (ApplyMonadOver m state) x -> state m -> m (x, state m)
+
+instance (Functor m, Monad m) => ApplyMonadTrans m Tree where
+  type ApplyMonadOver m Tree = HSM.TreeMonad m
+  runApplyMonad = HSM.virtualTreeMonad
+
+class (Functor m, Monad m, Functor (ApplyMonadBase m), Monad (ApplyMonadBase m), ToTree state)
+       -- ApplyMonadOver (ApplyMonadBase m) ~ m is *not* required in general,
+       -- since ApplyMonadBase is not injective
+       => ApplyMonad m (state :: (* -> *) -> *) where
+    type ApplyMonadBase m :: * -> *
+
+    nestedApply :: m x -> state (ApplyMonadBase m) -> m (x, state (ApplyMonadBase m))
+    liftApply :: (state (ApplyMonadBase m) -> (ApplyMonadBase m) x) -> state (ApplyMonadBase m)
+                 -> m (x, state (ApplyMonadBase m))
+
+    getApplyState :: m (state (ApplyMonadBase m))
+    putApplyState :: state m -> m ()
+
+    -- a semantic, ObjectMap-based interface for patch application
+    editFile :: (state ~ ObjectMap) => UUID -> (B.ByteString -> B.ByteString) -> m ()
+    editDirectory :: (state ~ ObjectMap) => UUID -> (DirContent -> DirContent) -> m ()
+
+    -- a semantic, Tree-based interface for patch application
+    mDoesDirectoryExist :: (state ~ Tree) => FileName -> m Bool
+    mDoesFileExist :: (state ~ Tree) => FileName -> m Bool
+    mReadFilePS :: (state ~ Tree) => FileName -> m B.ByteString
+    mReadFilePSs :: (state ~ Tree) => FileName -> m [B.ByteString]
     mReadFilePSs f = linesPS `fmap` mReadFilePS f
-    mCreateDirectory :: FileName -> m ()
-    mRemoveDirectory :: FileName -> m ()
-    mCreateFile :: FileName -> m ()
+    mCreateDirectory :: (state ~ Tree) => FileName -> m ()
+    mRemoveDirectory :: (state ~ Tree) => FileName -> m ()
+    mCreateFile :: (state ~ Tree) => FileName -> m ()
     mCreateFile f = mModifyFilePS f $ \_ -> return B.empty
-    mRemoveFile :: FileName -> m ()
-    mRename :: FileName -> FileName -> m ()
-    mModifyFilePS :: FileName -> (B.ByteString -> m B.ByteString) -> m ()
-    mModifyFilePSs :: FileName -> ([B.ByteString] -> m [B.ByteString]) -> m ()
+    mRemoveFile :: (state ~ Tree) => FileName -> m ()
+    mRename :: (state ~ Tree) => FileName -> FileName -> m ()
+    mModifyFilePS :: (state ~ Tree) => FileName -> (B.ByteString -> m B.ByteString) -> m ()
+    mModifyFilePSs :: (state ~ Tree) => FileName -> ([B.ByteString] -> m [B.ByteString]) -> m ()
     mModifyFilePSs f j = mModifyFilePS f (fmap unlinesPS . j . linesPS)
-    mChangePref :: String -> String -> String -> m ()
+    mChangePref :: (state ~ Tree) => String -> String -> String -> m ()
     mChangePref _ _ _ = return ()
 
-instance (Functor m, Monad m) => ApplyMonad (HSM.TreeMonad m) where
+instance (Functor m, Monad m) => ApplyMonad (HSM.TreeMonad m) Tree where
+    type ApplyMonadBase (HSM.TreeMonad m) = m
+    getApplyState = gets HSM.tree
+    nestedApply a init = lift $ runApplyMonad a init
+    liftApply a init = do x <- gets HSM.tree
+                          lift $ runApplyMonad (lift $ a x) init
+
+    -- putApplyState needs some support from HSM
+
     mDoesDirectoryExist d = HSM.directoryExists (fn2ap d)
+    mDoesFileExist d = HSM.fileExists (fn2ap d)
     mReadFilePS p = B.concat `fmap` BL.toChunks `fmap` HSM.readFile (fn2ap p)
     mModifyFilePS p j = do have <- HSM.fileExists (fn2ap p)
                            x <- if have then B.concat `fmap` BL.toChunks `fmap` HSM.readFile (fn2ap p)
@@ -69,7 +116,8 @@
 withFilePaths :: [FileName] -> FilePathMonad a -> [FileName]
 withFilePaths fps x = execState x fps
 
-instance ApplyMonad FilePathMonad where
+instance ApplyMonad FilePathMonad Tree where
+    type ApplyMonadBase FilePathMonad = Identity
     -- We can't check it actually is a directory here
     mDoesDirectoryExist d = gets (d `elem`)
     mCreateDirectory _ = return ()
@@ -83,7 +131,8 @@
 
 type RestrictedApply = State (M.Map FileName B.ByteString)
 
-instance ApplyMonad RestrictedApply where
+instance ApplyMonad RestrictedApply Tree where
+  type ApplyMonadBase RestrictedApply = Identity
   mDoesDirectoryExist _ = return True
   mCreateDirectory _ = return ()
   mRemoveFile f = modify $ M.delete f
diff --git a/src/Darcs/Patch/Bundle.hs b/src/Darcs/Patch/Bundle.hs
--- a/src/Darcs/Patch/Bundle.hs
+++ b/src/Darcs/Patch/Bundle.hs
@@ -29,6 +29,7 @@
                          patchInfoAndPatch,
                          unavailable, hopefully )
 import Darcs.Patch ( RepoPatch, Named, showPatch, showContextPatch, readPatchPartial )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Patch.Bracketed ( Bracketed, unBracketedFL )
 import Darcs.Patch.Bracketed.Instances ()
 import Darcs.Patch.Format ( PatchListFormat )
@@ -64,7 +65,7 @@
 hashBundle to_be_sent = sha1PS $ renderPS
                          $ vcat (mapFL showPatch to_be_sent) <> newline
 
-makeBundleN :: RepoPatch p => Maybe (Tree IO)
+makeBundleN :: (ApplyState p ~ Tree, RepoPatch p) => Maybe (Tree IO)
              -> PatchSet p C(start x) -> FL (Named p) C(x y) -> IO Doc
 makeBundleN the_s (PatchSet ps (Tagged t _ _ :<: _)) to_be_sent =
     makeBundle2 the_s (ps +<+ (t :<: NilRL)) to_be_sent to_be_sent
@@ -76,7 +77,7 @@
 -- patch sequences are passed, a bundle with a mismatched hash will be
 -- generated, which is not the end of the world, but isn't very useful
 -- either.
-makeBundle2 :: RepoPatch p => Maybe (Tree IO) -> RL (PatchInfoAnd p) C(start x)
+makeBundle2 :: (ApplyState p ~ Tree, RepoPatch p) => Maybe (Tree IO) -> RL (PatchInfoAnd p) C(start x)
              -> FL (Named p) C(x y) -> FL (Named p) C(x y) -> IO Doc
 makeBundle2 the_s common' to_be_sent to_be_sent2 =
     do patches <- case the_s of
diff --git a/src/Darcs/Patch/Dummy.hs b/src/Darcs/Patch/Dummy.hs
--- a/src/Darcs/Patch/Dummy.hs
+++ b/src/Darcs/Patch/Dummy.hs
@@ -5,10 +5,11 @@
 import Darcs.Patch.FileHunk ( IsHunk )
 import Darcs.Patch.Format ( PatchListFormat )
 import Darcs.Patch.Patchy
-    ( Patchy, ShowPatch, Invert, Commute, Apply, PatchInspect
+    ( Patchy, ShowPatch, Invert, Commute, Apply(..), PatchInspect
     , ReadPatch )
 import Darcs.Patch.Show ( ShowPatchBasic )
 import Darcs.Witnesses.Eq ( MyEq )
+import Storage.Hashed.Tree( Tree )
 
 #include "gadts.h"
 
@@ -23,5 +24,6 @@
 instance ShowPatchBasic DummyPatch
 instance ShowPatch DummyPatch
 instance Commute DummyPatch
-instance Apply DummyPatch
+instance Apply DummyPatch where
+  type ApplyState DummyPatch = Tree
 instance Patchy DummyPatch
diff --git a/src/Darcs/Patch/Named.hs b/src/Darcs/Patch/Named.hs
--- a/src/Darcs/Patch/Named.hs
+++ b/src/Darcs/Patch/Named.hs
@@ -101,6 +101,7 @@
                       return [] ]
 
 instance Apply p => Apply (Named p) where
+    type ApplyState (Named p) = ApplyState p
     apply (NamedP _ _ p) = apply p
 
 instance RepairToFL p => Repair (Named p) where
@@ -173,7 +174,8 @@
     showPatch (NamedP n [] p) = showPatchInfo n <> showPatch p
     showPatch (NamedP n d p) = showNamedPrefix n d <+> showPatch p
 
-instance (Apply p, CommuteNoConflicts p, Conflict p, IsHunk p, PatchListFormat p, PrimPatchBase p, ShowPatch p) => ShowPatch (Named p) where
+instance (Apply p, CommuteNoConflicts p, Conflict p, IsHunk p, PatchListFormat p,
+          PrimPatchBase p, ShowPatch p) => ShowPatch (Named p) where
     showContextPatch (NamedP n [] p) = showContextPatch p >>= return . (showPatchInfo n <>)
     showContextPatch (NamedP n d p) = showContextPatch p >>= return . (showNamedPrefix n d <+>)
     description (NamedP n _ _) = humanFriendly n
diff --git a/src/Darcs/Patch/PatchInfoAnd.hs b/src/Darcs/Patch/PatchInfoAnd.hs
--- a/src/Darcs/Patch/PatchInfoAnd.hs
+++ b/src/Darcs/Patch/PatchInfoAnd.hs
@@ -15,7 +15,7 @@
 -- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 -- Boston, MA 02110-1301, USA.
 
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, UndecidableInstances #-} -- XXX Undecidable only in GHC < 7
 
 #include "gadts.h"
 
@@ -49,6 +49,7 @@
 import Darcs.Witnesses.Ordered ( (:>)(..), (:\/:)(..), (:/\:)(..), FL, mapFL )
 import Darcs.Witnesses.Sealed ( Sealed(Sealed), seal, mapSeal )
 import Darcs.Utils ( prettyException )
+import Storage.Hashed.Tree( Tree )
 
 import Control.Applicative ( (<$>) )
 
@@ -183,7 +184,8 @@
                            Right x -> showPatch x
                            Left _ -> humanFriendly n
 
-instance (Apply p, Conflict p, CommuteNoConflicts p, IsHunk p, PatchListFormat p, PrimPatchBase p, ShowPatch p) => ShowPatch (PatchInfoAnd p) where
+instance (Apply p, Conflict p, CommuteNoConflicts p, IsHunk p, PatchListFormat p, PrimPatchBase p,
+          ShowPatch p, ApplyState p ~ Tree) => ShowPatch (PatchInfoAnd p) where
     showContextPatch (PIAP n p) = case hopefully2either p of
                                     Right x -> showContextPatch x
                                     Left _ -> return $ humanFriendly n
@@ -209,6 +211,7 @@
     hunkMatches _ _ = error "hunkmatches not implemented for PatchInfoAnd"
 
 instance Apply p => Apply (PatchInfoAnd p) where
+    type ApplyState (PatchInfoAnd p) = ApplyState p
     apply p = apply $ hopefully p
 
 instance RepairToFL p => Repair (PatchInfoAnd p) where
@@ -227,4 +230,4 @@
 instance IsHunk (PatchInfoAnd p) where
     isHunk _ = Nothing
 
-instance RepoPatch p => Patchy (PatchInfoAnd p)
+instance (RepoPatch p, ApplyState p ~ Tree) => Patchy (PatchInfoAnd p)
diff --git a/src/Darcs/Patch/Patchy/Instances.hs b/src/Darcs/Patch/Patchy/Instances.hs
--- a/src/Darcs/Patch/Patchy/Instances.hs
+++ b/src/Darcs/Patch/Patchy/Instances.hs
@@ -7,7 +7,9 @@
 import Darcs.Patch.Permutations ()
 import Darcs.Patch.FileHunk ( IsHunk )
 import Darcs.Patch.Viewing ()
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Witnesses.Ordered ( FL, RL )
+import Storage.Hashed.Tree( Tree )
 
 instance (IsHunk p, PatchListFormat p, Patchy p) => Patchy (FL p)
 instance (IsHunk p, PatchListFormat p, Patchy p) => Patchy (RL p)
diff --git a/src/Darcs/Patch/Prim.hs b/src/Darcs/Patch/Prim.hs
--- a/src/Darcs/Patch/Prim.hs
+++ b/src/Darcs/Patch/Prim.hs
@@ -13,7 +13,7 @@
          applyPrimFL,
          readPrim,
          FromPrim(..), FromPrims(..), ToFromPrim(..),
-         PrimPatch, PrimPatchBase(..)
+         PrimPatch, PrimPatchBase(..), PrimConstruct(..)
        )
        where
 
diff --git a/src/Darcs/Patch/Prim/Class.hs b/src/Darcs/Patch/Prim/Class.hs
--- a/src/Darcs/Patch/Prim/Class.hs
+++ b/src/Darcs/Patch/Prim/Class.hs
@@ -9,6 +9,7 @@
     where
 
 import Darcs.Patch.ApplyMonad ( ApplyMonad )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Patch.FileHunk ( FileHunk, IsHunk )
 import Darcs.Patch.FileName ( FileName )
 import Darcs.Patch.Format ( PatchListFormat, FileNameFormat(..) )
@@ -65,8 +66,12 @@
 
 class PrimClassify prim where
    primIsAddfile :: prim C(x y) -> Bool
+   primIsRmfile :: prim C(x y) -> Bool
    primIsAdddir :: prim C(x y) -> Bool
+   primIsRmdir :: prim C(x y) -> Bool
+   primIsMove :: prim C(x y) -> Bool
    primIsHunk :: prim C(x y) -> Bool
+   primIsTokReplace :: prim C(x y) -> Bool
    primIsBinary :: prim C(x y) -> Bool
    primIsSetpref :: prim C(x y) -> Bool
    is_filepatch :: prim C(x y) -> Maybe FileName
@@ -82,6 +87,7 @@
    tokreplace :: FilePath -> String -> String -> String -> prim C(x y)
    binary :: FilePath -> B.ByteString -> B.ByteString -> prim C(x y)
    primFromHunk :: FileHunk C(x y) -> prim C(x y)
+   anIdentity :: prim C(x x)
 
 class PrimCanonize prim where
    tryToShrink :: FL prim C(x y) -> FL prim C(x y)
@@ -127,4 +133,4 @@
    readPrim :: ParserM m => FileNameFormat -> m (Sealed (prim C(x )))
 
 class PrimApply prim where
-   applyPrimFL :: ApplyMonad m => FL prim C(x y) -> m ()
+   applyPrimFL :: ApplyMonad m (ApplyState prim) => FL prim C(x y) -> m ()
diff --git a/src/Darcs/Patch/Prim/V1.hs b/src/Darcs/Patch/Prim/V1.hs
--- a/src/Darcs/Patch/Prim/V1.hs
+++ b/src/Darcs/Patch/Prim/V1.hs
@@ -9,8 +9,13 @@
 import Darcs.Patch.Prim.V1.Read ()
 import Darcs.Patch.Prim.V1.Show ()
 
-import Darcs.Patch.Prim.Class ( PrimPatch )
+import Darcs.Patch.Prim.Class ( PrimPatch, PrimPatchBase(..), FromPrim(..) )
 import Darcs.Patch.Patchy ( Patchy )
 
 instance PrimPatch Prim
 instance Patchy Prim
+instance PrimPatchBase Prim where
+  type PrimOf Prim = Prim
+
+instance FromPrim Prim where
+  fromPrim = id
diff --git a/src/Darcs/Patch/Prim/V1/Apply.hs b/src/Darcs/Patch/Prim/V1/Apply.hs
--- a/src/Darcs/Patch/Prim/V1/Apply.hs
+++ b/src/Darcs/Patch/Prim/V1/Apply.hs
@@ -16,10 +16,12 @@
 
 import Darcs.Global ( darcsdir )
 import Darcs.Patch.ApplyMonad ( ApplyMonad(..) )
+import Storage.Hashed.Tree( Tree )
 
 import Darcs.Repository.Prefs ( changePrefval )
 
 import Darcs.Witnesses.Ordered ( FL(..), mapFL_FL, spanFL, (:>)(..) )
+import Darcs.Witnesses.Unsafe ( unsafeCoercePStart )
 
 import ByteStringUtils ( unlinesPS, breakAfterNthNewline, breakBeforeNthNewline, )
 import Printer( renderString )
@@ -35,6 +37,7 @@
 type FileContents = B.ByteString
 
 instance Apply Prim where
+    type ApplyState Prim = Tree
     apply (FP f RmFile) = mRemoveFile f
     apply (FP f AddFile) = mCreateFile f
     apply p@(FP _ (Hunk _ _ _)) = applyPrimFL (p :>: NilFL)
@@ -61,7 +64,29 @@
            return $ case B.null x of
              True -> Nothing
              False -> Just ("WARNING: Fixing removal of non-empty file "++fn2fp f,
+                           -- No need to coerce because the content
+                           -- removal patch has freely decided contexts
                             FP f (Binary x B.empty) :>: FP f RmFile :>: NilFL )
+    applyAndTryToFixFL (FP f AddFile) =
+        do exists <- mDoesFileExist f
+           if exists
+             then return $
+                     Just ("WARNING: Dropping add of existing file "++fn2fp f,
+                           -- the old context was wrong, so we have to coerce
+                           unsafeCoercePStart NilFL
+                          )
+             else do mCreateFile f
+                     return Nothing
+    applyAndTryToFixFL (DP f AddDir) =
+        do exists <- mDoesDirectoryExist f
+           if exists
+             then return $
+                     Just ("WARNING: Dropping add of existing directory "++fn2fp f,
+                           -- the old context was wrong, so we have to coerce
+                           unsafeCoercePStart NilFL
+                          )
+             else do mCreateDirectory f
+                     return Nothing
     applyAndTryToFixFL p = do apply p; return Nothing
 
 instance PrimApply Prim where
@@ -74,7 +99,7 @@
                   applyPrimFL ps'
         where f_hunk (FP f' (Hunk _ _ _)) | f == f' = True
               f_hunk _ = False
-              hunkmod :: ApplyMonad m => FL FilePatchType C(x y)
+              hunkmod :: ApplyMonad m Tree => FL FilePatchType C(x y)
                       -> B.ByteString -> m B.ByteString
               hunkmod NilFL ps = return ps
               hunkmod (Hunk line old new:>:hs) ps
diff --git a/src/Darcs/Patch/Prim/V1/Core.hs b/src/Darcs/Patch/Prim/V1/Core.hs
--- a/src/Darcs/Patch/Prim/V1/Core.hs
+++ b/src/Darcs/Patch/Prim/V1/Core.hs
@@ -72,12 +72,24 @@
    primIsAddfile (FP _ AddFile) = True
    primIsAddfile _ = False
 
+   primIsRmfile (FP _ RmFile) = True
+   primIsRmfile _ = False
+
    primIsAdddir (DP _ AddDir) = True
    primIsAdddir _ = False
 
+   primIsRmdir (DP _ RmDir) = True
+   primIsRmdir _ = False
+
+   primIsMove (Move _ _) = True
+   primIsMove _ = False
+
    primIsHunk (FP _ (Hunk _ _ _)) = True
    primIsHunk _ = False
 
+   primIsTokReplace (FP _ (TokReplace _ _ _)) = True
+   primIsTokReplace _ = False
+
    primIsBinary (FP _ (Binary _ _)) = True
    primIsBinary _ = False
 
@@ -102,6 +114,7 @@
        evalargs FP (fp2fn $ nFn f) (TokReplace tokchars old new)
    binary f old new = FP (fp2fn $! nFn f) $ Binary old new
    primFromHunk (FileHunk fn line before after) = FP fn (Hunk line before after)
+   anIdentity = let fp = "./dummy" in move fp fp
 
 nFn :: FilePath -> FilePath
 nFn f = "./"++(fn2fp $ normPath $ fp2fn f)
diff --git a/src/Darcs/Patch/Prim/V1/Details.hs b/src/Darcs/Patch/Prim/V1/Details.hs
--- a/src/Darcs/Patch/Prim/V1/Details.hs
+++ b/src/Darcs/Patch/Prim/V1/Details.hs
@@ -8,12 +8,6 @@
 import Darcs.Patch.Prim.V1.Core
     ( Prim(..), FilePatchType(..), DirPatchType(..) )
 import Darcs.Patch.SummaryData ( SummDetail(..), SummOp(..) )
-import Darcs.Patch.TokenReplace ( tryTokInternal )
-import Darcs.Patch.FileName ( fn2fp, fp2fn, movedirfilename, fn2ps )
-
-import qualified Data.ByteString as B ( ByteString, concat )
-import qualified Data.ByteString.Char8 as BC ( pack, split )
-import Data.Maybe ( catMaybes )
 
 #include "gadts.h"
 
diff --git a/src/Darcs/Patch/Prim/V1/Show.hs b/src/Darcs/Patch/Prim/V1/Show.hs
--- a/src/Darcs/Patch/Prim/V1/Show.hs
+++ b/src/Darcs/Patch/Prim/V1/Show.hs
@@ -1,19 +1,23 @@
 {-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE ViewPatterns #-}
+{-# LANGUAGE ViewPatterns, UndecidableInstances #-} -- XXX Undecidable only in GHC < 7
 module Darcs.Patch.Prim.V1.Show
     ( showHunk )
     where
 
 import Prelude hiding ( pi )
 
+import Control.Monad ( join )
 import ByteStringUtils ( fromPS2Hex )
 import qualified Data.ByteString as B (ByteString, length, take, drop)
 import qualified Data.ByteString.Char8 as BC (head)
 
+import Storage.Hashed.Tree( Tree )
+
 import Darcs.Patch.FileHunk ( FileHunk(..), IsHunk(..), showFileHunk )
 import Darcs.Patch.FileName ( FileName )
 import Darcs.Patch.Format ( PatchListFormat, FileNameFormat(..) )
 import Darcs.Patch.Show ( ShowPatchBasic(..), ShowPatch(..), formatFileName )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Patch.Summary ( plainSummaryPrim, plainSummaryPrims )
 import Darcs.Patch.Viewing ( showContextHunk )
 import Darcs.Patch.Permutations () -- for Invert instance of FL
@@ -35,7 +39,7 @@
 instance ShowPatchBasic Prim where
     showPatch = showPrim OldFormat
 
-instance ShowPatch Prim where
+instance (ApplyState Prim ~ Tree) => ShowPatch Prim where
     showContextPatch (isHunk -> Just fh) = showContextHunk fh
     showContextPatch p = return $ showPatch p
     summary = plainSummaryPrim
diff --git a/src/Darcs/Patch/Prim/V3.hs b/src/Darcs/Patch/Prim/V3.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Patch/Prim/V3.hs
@@ -0,0 +1,22 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Darcs.Patch.Prim.V3 ( Prim ) where
+
+import Darcs.Patch.Prim.V3.Apply ()
+import Darcs.Patch.Prim.V3.Coalesce ()
+import Darcs.Patch.Prim.V3.Commute ()
+import Darcs.Patch.Prim.V3.Core ( Prim )
+import Darcs.Patch.Prim.V3.Details ()
+import Darcs.Patch.Prim.V3.Read ()
+import Darcs.Patch.Prim.V3.Show ()
+
+import Darcs.Patch.Prim.Class ( PrimPatch, PrimPatchBase(..), FromPrim(..) )
+import Darcs.Patch.Patchy ( Patchy )
+
+instance PrimPatch Prim
+instance Patchy Prim
+
+instance PrimPatchBase Prim where
+  type PrimOf Prim = Prim
+
+instance FromPrim Prim where
+  fromPrim = id
diff --git a/src/Darcs/Patch/Prim/V3/Apply.hs b/src/Darcs/Patch/Prim/V3/Apply.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Patch/Prim/V3/Apply.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE CPP, MultiParamTypeClasses, OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Darcs.Patch.Prim.V3.Apply ( ObjectMap(..) ) where
+
+import Darcs.Patch.Apply ( Apply(..) )
+import Darcs.Patch.ApplyMonad ( ApplyMonad(..), ApplyMonadTrans(..), ToTree(..) )
+import Darcs.Patch.Repair ( RepairToFL(..) )
+
+import Darcs.Patch.Prim.Class ( PrimApply(..) )
+import Darcs.Patch.Prim.V3.Core ( Prim(..), hunkEdit )
+import Darcs.Patch.Prim.V3.ObjectMap
+
+import Control.Monad.State( StateT, runStateT, gets, lift, put )
+import qualified Data.Map as M
+import Data.List( (\\), sort )
+
+-- import Darcs.Patch.ApplyMonad ( ApplyMonad(..) )
+
+import Darcs.Witnesses.Ordered ( FL(..) )
+import Storage.Hashed.Hash( Hash(..) )
+
+#include "gadts.h"
+#include "impossible.h"
+
+instance Apply Prim where
+    type ApplyState Prim = ObjectMap
+    apply (Manifest id (dirid, name)) = editDirectory dirid (M.insert name id)
+    apply (Demanifest _ (dirid, name)) = editDirectory dirid (M.delete name)
+    apply (TextHunk id hunk) = editFile id (hunkEdit hunk)
+    apply (BinaryHunk id hunk) = editFile id (hunkEdit hunk)
+
+instance RepairToFL Prim where
+    applyAndTryToFixFL p = apply p >> return Nothing
+
+instance PrimApply Prim where
+    applyPrimFL NilFL = return ()
+    applyPrimFL (p:>:ps) = apply p >> applyPrimFL ps
+
+instance ToTree ObjectMap -- TODO
+
+editObject :: (Monad m) => UUID -> (Maybe (Object m) -> Object m) -> (StateT (ObjectMap m) m) ()
+editObject id edit = do load <- gets getObject
+                        store <- gets putObject
+                        obj <- lift $ load id
+                        new <- lift $ store id $ edit obj
+                        put new
+                        return ()
+
+instance (Functor m, Monad m) => ApplyMonad (StateT (ObjectMap m) m) ObjectMap where
+    type ApplyMonadBase (StateT (ObjectMap m) m) = m
+    editFile id edit = editObject id edit'
+      where edit' (Just (Blob x _)) = Blob (edit `fmap` x) NoHash
+            edit' (Just (Directory x)) = Directory x -- error?
+            edit' Nothing = Blob (return $ edit "") NoHash
+    editDirectory id edit = editObject id edit'
+      where edit' (Just (Directory x)) = Directory $ edit x
+            edit' (Just (Blob x y)) = Blob x y -- error?
+            edit' Nothing = Directory $ edit M.empty
+
+instance (Functor m, Monad m) => ApplyMonadTrans m ObjectMap where
+  type ApplyMonadOver m ObjectMap = StateT (ObjectMap m) m
+  runApplyMonad = runStateT
+
diff --git a/src/Darcs/Patch/Prim/V3/Coalesce.hs b/src/Darcs/Patch/Prim/V3/Coalesce.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Patch/Prim/V3/Coalesce.hs
@@ -0,0 +1,18 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Darcs.Patch.Prim.V3.Coalesce () where
+
+import Darcs.Patch.Prim.Class ( PrimCanonize(..) )
+import Darcs.Witnesses.Ordered( FL(..) )
+import Darcs.Patch.Prim.V3.Core( Prim )
+
+#include "gadts.h"
+#include "impossible.h"
+
+-- TODO
+instance PrimCanonize Prim where
+   tryToShrink = error "tryToShrink"
+   tryShrinkingInverse _ = error "tryShrinkingInverse"
+   sortCoalesceFL = id
+   canonize = (:>: NilFL)
+   canonizeFL = id
+   join = const Nothing
diff --git a/src/Darcs/Patch/Prim/V3/Commute.hs b/src/Darcs/Patch/Prim/V3/Commute.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Patch/Prim/V3/Commute.hs
@@ -0,0 +1,70 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Darcs.Patch.Prim.V3.Commute
+    ( CommuteMonad(..) )
+    where
+
+import Data.List ( intersect )
+
+import qualified Data.ByteString as BS (length)
+
+import Darcs.Witnesses.Ordered ( (:>)(..) )
+import Darcs.Witnesses.Unsafe ( unsafeCoerceP )
+import Darcs.Patch.Prim.V3.Core ( Prim(..), Hunk(..), touches )
+import Darcs.Patch.Commute ( Commute(..) )
+import Darcs.Patch.Permutations () -- for Invert instance of FL
+
+#include "impossible.h"
+#include "gadts.h"
+
+class Monad m => CommuteMonad m where
+  commuteFail :: m a
+  -- TODO we eventually have to get rid of runCommute with this signature,
+  -- since m might involve IO at some point, which we can't "run";
+  -- alternatively, for IO it could always yield Nothing, having a separate
+  -- IO-specific function to "run" commutes in IO
+
+instance CommuteMonad Maybe where
+  commuteFail = Nothing
+
+instance Commute Prim where
+    commute = commute'
+
+class Commute' p where
+  commute' :: (CommuteMonad m) => (p :> p) wX wY -> m ((p :> p) wX wY)
+
+typematch :: Prim wX wY -> Prim wY wZ -> Bool
+typematch _ _ = True -- TODO
+
+instance Commute' Prim where
+  commute' (a :> b) | null (touches a `intersect` touches b) = return (unsafeCoerceP b :> unsafeCoerceP a)
+                    | not (a `typematch` b) = commuteFail
+                    | otherwise = commuteOverlapping (a :> b)
+
+-- Commute patches that have actual overlap in terms of touched objects, and their types allow 
+commuteOverlapping :: (CommuteMonad m) => (Prim :> Prim) wX wY -> m ((Prim :> Prim) wX wY)
+commuteOverlapping ((BinaryHunk a x) :> (BinaryHunk _ y)) =
+  do (y' :> x') <- commuteHunk (x :> y)
+     return $ unsafeCoerceP (BinaryHunk a y' :> BinaryHunk a x')
+commuteOverlapping ((TextHunk a x) :> (TextHunk _ y)) =
+  do (y' :> x') <- commuteHunk (x :> y)
+     return $ unsafeCoerceP (TextHunk a y' :> TextHunk a x')
+commuteOverlapping _ = commuteFail
+
+commuteHunk :: (CommuteMonad m) => (Hunk :> Hunk) C(x y) -> m ((Hunk :> Hunk) C(y x))
+commuteHunk ((Hunk off1 old1 new1) :> (Hunk off2 old2 new2))
+  | off1 + lengthnew1 < off2 =
+    return $ Hunk (off2 - lengthnew1 + lengthold1) old2 new2 :> Hunk off1 old1 new1
+  | off2 + lengthold2 < off1 =
+    return $ (Hunk off2 old2 new2) :> Hunk (off1 + lengthnew2 - lengthold2) old1 new1
+  | off1 + lengthnew1 == off2 &&
+    lengthold2 /= 0 && lengthold1 /= 0 && lengthnew2 /= 0 && lengthnew1 /= 0 =
+      return $ Hunk (off2 - lengthnew1 + lengthold1) old2 new2 :> Hunk off1 old1 new1
+  | off2 + lengthold2 == off1 &&
+    lengthold2 /= 0 && lengthold1 /= 0 && lengthnew2 /= 0 && lengthnew1 /= 0 =
+      return $ Hunk off2 old2 new2 :> Hunk (off1 + lengthnew2 - lengthold2) old1 new1
+  | otherwise = commuteFail
+  where lengthnew1 = BS.length new1
+        lengthnew2 = BS.length new2
+        lengthold1 = BS.length old1
+        lengthold2 = BS.length old2
+commuteHunk _ = impossible
diff --git a/src/Darcs/Patch/Prim/V3/Core.hs b/src/Darcs/Patch/Prim/V3/Core.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Patch/Prim/V3/Core.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE CPP, OverloadedStrings #-}
+
+-- Copyright (C) 2011 Petr Rockai
+--
+-- Permission is hereby granted, free of charge, to any person
+-- obtaining a copy of this software and associated documentation
+-- files (the "Software"), to deal in the Software without
+-- restriction, including without limitation the rights to use, copy,
+-- modify, merge, publish, distribute, sublicense, and/or sell copies
+-- of the Software, and to permit persons to whom the Software is
+-- furnished to do so, subject to the following conditions:
+--
+-- The above copyright notice and this permission notice shall be
+-- included in all copies or substantial portions of the Software.
+--
+-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+-- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+-- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+-- BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+-- ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+-- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+-- SOFTWARE.
+
+#include "gadts.h"
+
+module Darcs.Patch.Prim.V3.Core
+       ( Prim(..), Hunk(..), UUID(..), Location, Object(..), touches, hunkEdit )
+       where
+
+import qualified Data.ByteString as BS
+
+import Darcs.Witnesses.Eq ( MyEq(..), EqCheck(..) )
+import Darcs.Witnesses.Unsafe ( unsafeCoerceP )
+import Darcs.Patch.FileHunk( IsHunk(..) )
+import Darcs.Patch.Invert ( Invert(..) )
+import Darcs.Patch.Inspect ( PatchInspect(..) )
+import Darcs.Patch.Prim.Class ( PrimConstruct(..), PrimClassify(..) )
+import Darcs.Patch.Prim.V3.ObjectMap
+
+-- TODO: elaborate
+
+data Hunk C(x y) where
+  Hunk :: !Int -> BS.ByteString -> BS.ByteString -> Hunk C(x y)
+
+invertHunk :: Hunk C(x y) -> Hunk C(y x)
+invertHunk (Hunk off old new) = Hunk off new old
+
+hunkEdit :: Hunk C(x y) -> BS.ByteString -> BS.ByteString
+hunkEdit hunk@(Hunk off old new) bs = case splice bs (off) (off + BS.length old) of
+  x | x == old -> BS.concat [ BS.take off bs, new, BS.drop (off + BS.length old) bs ]
+    | otherwise -> error $ "error applying hunk: " ++ show off ++ " " ++ show old ++ " "
+                        ++ show new ++ " to " ++ show bs
+  where splice bs x y = BS.drop x $ BS.take y bs
+
+instance MyEq Hunk where
+  unsafeCompare (Hunk i x y) (Hunk i' x' y') = i == i' && x == x' && y == y'
+
+data Prim C(x y) where
+    BinaryHunk :: !UUID -> Hunk C(x y) -> Prim C(x y)
+    TextHunk :: !UUID -> Hunk C(x y) -> Prim C(x y)
+
+    -- TODO: String is not the right type here. However, what it represents is
+    -- a single file *name* (not a path). No slashes allowed, no "." and ".."
+    -- allowed either.
+    Manifest :: !UUID -> Location -> Prim C(x y)
+    Demanifest :: !UUID -> Location -> Prim C(x y)
+    Move :: !UUID -> Location -> Location -> Prim C(x y)
+    Identity :: Prim C(x x)
+
+touches :: Prim C(x y) -> [UUID]
+touches (BinaryHunk x _) = [x]
+touches (TextHunk x _) = [x]
+touches (Manifest _ (x, _)) = [x]
+touches (Demanifest _ (x, _)) = [x]
+touches (Move _ (x, _) (y, _)) = [x, y]
+touches Identity = []
+
+-- TODO: PrimClassify doesn't make sense for V3 prims
+instance PrimClassify Prim where
+   primIsAddfile _ = False
+   primIsAdddir _ = False
+   primIsHunk _ = False
+   primIsBinary _ = False
+   primIsSetpref _ = False
+   is_filepatch _ = Nothing
+
+-- TODO: PrimConstruct makes no sense for V3 prims
+instance PrimConstruct Prim where
+   addfile _ = error "PrimConstruct addfile"
+   rmfile _ = error "PrimConstruct rmfile"
+   adddir _ = error "PrimConstruct adddir"
+   rmdir _ = error "PrimConstruct rmdir"
+   move _ _ = error "PrimConstruct move"
+   changepref _ _ _ = error "PrimConstruct changepref"
+   hunk _ _ _ _ = error "PrimConstruct hunk"
+   tokreplace _ _ _ _ = error "PrimConstruct tokreplace"
+   binary _ _ _ = error "PrimConstruct binary"
+   primFromHunk _ = error "PrimConstruct primFromHunk"
+   anIdentity = Identity
+
+instance IsHunk Prim where
+   isHunk _ = Nothing
+
+instance Invert Prim where
+   invert (BinaryHunk x h) = BinaryHunk x $ invertHunk h
+   invert (TextHunk x h) = TextHunk x $ invertHunk h
+   invert (Manifest x y) = Demanifest x y
+   invert (Demanifest x y) = Manifest x y
+   invert Identity = Identity
+
+instance PatchInspect Prim where
+    -- We don't need this for V3. Slashes are not allowed in Manifest and
+    -- Demanifest patches and nothing else uses working-copy paths.
+    listTouchedFiles _ = []
+
+    -- TODO (used for --match 'hunk ...', presumably)
+    hunkMatches f _ = False
+
+instance MyEq Prim where
+    unsafeCompare (BinaryHunk a b) (BinaryHunk c d) = a == c && b `unsafeCompare` d
+    unsafeCompare (TextHunk a b) (TextHunk c d) = a == c && b `unsafeCompare` d
+    unsafeCompare (Manifest a b) (Manifest c d) = a == c && b == d
+    unsafeCompare (Demanifest a b) (Demanifest c d) = a == c && b == d
+    unsafeCompare Identity Identity = True
+    unsafeCompare _ _ = False
+
+instance Eq (Prim C(x y)) where
+    (==) = unsafeCompare
diff --git a/src/Darcs/Patch/Prim/V3/Details.hs b/src/Darcs/Patch/Prim/V3/Details.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Patch/Prim/V3/Details.hs
@@ -0,0 +1,19 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Darcs.Patch.Prim.V3.Details
+    ()
+    where
+
+import Prelude hiding ( pi )
+import Darcs.Patch.Prim.Class ( PrimDetails(..) )
+import Darcs.Patch.Prim.V3.Core ( Prim(..) )
+import Darcs.Patch.SummaryData ( SummDetail(..), SummOp(..) )
+
+import qualified Data.ByteString as B ( ByteString, concat )
+import qualified Data.ByteString.Char8 as BC ( pack, split )
+import Data.Maybe ( catMaybes )
+
+#include "gadts.h"
+
+-- TODO
+instance PrimDetails Prim where
+  summarizePrim _ = []
diff --git a/src/Darcs/Patch/Prim/V3/ObjectMap.hs b/src/Darcs/Patch/Prim/V3/ObjectMap.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Patch/Prim/V3/ObjectMap.hs
@@ -0,0 +1,42 @@
+-- Copyright (C) 2011 Petr Rockai
+--
+-- Permission is hereby granted, free of charge, to any person
+-- obtaining a copy of this software and associated documentation
+-- files (the "Software"), to deal in the Software without
+-- restriction, including without limitation the rights to use, copy,
+-- modify, merge, publish, distribute, sublicense, and/or sell copies
+-- of the Software, and to permit persons to whom the Software is
+-- furnished to do so, subject to the following conditions:
+--
+-- The above copyright notice and this permission notice shall be
+-- included in all copies or substantial portions of the Software.
+--
+-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+-- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+-- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+-- BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+-- ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+-- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+-- SOFTWARE.
+
+module Darcs.Patch.Prim.V3.ObjectMap( UUID(..), Location, Object(..),
+                                      ObjectMap(..), DirContent ) where
+
+import Storage.Hashed.Hash( Hash )
+import qualified Data.ByteString as BS (ByteString)
+import qualified Data.Map as M
+
+
+newtype UUID = UUID BS.ByteString deriving (Eq, Ord, Show)
+type Location = (UUID, BS.ByteString)
+type DirContent = M.Map BS.ByteString UUID
+data Object (m :: * -> *) = Directory DirContent
+                          | Blob (m BS.ByteString) !Hash
+
+data ObjectType = TText | TBinary | TDirectory
+
+data ObjectMap (m :: * -> *) = ObjectMap { getObject :: UUID -> m (Maybe (Object m))
+                                         , putObject :: UUID -> Object m -> m (ObjectMap m)
+                                         , listObjects :: m [UUID]
+                                         }
diff --git a/src/Darcs/Patch/Prim/V3/Read.hs b/src/Darcs/Patch/Prim/V3/Read.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Patch/Prim/V3/Read.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE ViewPatterns, OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Darcs.Patch.Prim.V3.Read () where
+import Darcs.Patch.Read ( ReadPatch(..) )
+import Darcs.Patch.ReadMonads
+import Darcs.Patch.Prim.Class( PrimRead(..) )
+import Darcs.Patch.Prim.V3.Core( Prim(..), Hunk(..) )
+import Darcs.Patch.Prim.V3.ObjectMap
+import Darcs.Witnesses.Sealed( seal )
+
+import Control.Applicative ( (<$>) )
+import Control.Monad ( liftM )
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Char8 as BC
+import Data.Char ( isSpace, ord, chr )
+
+instance PrimRead Prim where
+  readPrim _ = do skipSpace
+                  choice $ map (liftM seal) [
+                    identity,
+                    hunk "hunk" TextHunk,
+                    hunk "binhunk" BinaryHunk,
+                    manifest "manifest" Manifest,
+                    manifest "demanifest" Demanifest ]
+
+    where manifest kind ctor = do id <- patch kind
+                                  loc <- location
+                                  return $ ctor id loc
+          identity = lexString "identity" >> return Identity
+          patch x = string x >> uuid
+          uuid = UUID <$> myLex'
+          filename = encoded
+          encoded = decodeWhite <$> myLex'
+          hunktext = skipSpace >> choice [ string "." >> encoded, string "!" >> return B.empty ]
+          location = do id <- uuid
+                        name <- filename
+                        return (id, name)
+          hunk kind ctor = do id <- patch kind
+                              offset <- int
+                              old <- hunktext
+                              new <- hunktext
+                              return $ ctor id (Hunk offset old new)
+
+instance ReadPatch Prim where
+ readPatch' = readPrim undefined
+
+-- XXX a bytestring version of decodeWhite from Darcs.FileName
+decodeWhite :: B.ByteString -> B.ByteString
+decodeWhite (BC.uncons -> Just ('\\', cs)) =
+    case BC.break (=='\\') cs of
+    (theord, BC.uncons -> Just ('\\', rest)) ->
+        chr (read $ BC.unpack theord) `BC.cons` decodeWhite rest
+    _ -> error "malformed filename"
+decodeWhite (BC.uncons -> Just (c, cs)) = c `BC.cons` decodeWhite cs
+decodeWhite (BC.uncons -> Nothing) = BC.empty
+
diff --git a/src/Darcs/Patch/Prim/V3/Show.hs b/src/Darcs/Patch/Prim/V3/Show.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Patch/Prim/V3/Show.hs
@@ -0,0 +1,81 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE ViewPatterns, OverloadedStrings #-}
+module Darcs.Patch.Prim.V3.Show
+    ( showHunk )
+    where
+
+import Prelude hiding ( pi )
+
+import ByteStringUtils ( fromPS2Hex )
+import Data.Char ( isSpace, ord, chr )
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Char8 as BC
+
+import Darcs.Patch.FileHunk ( FileHunk(..), IsHunk(..), showFileHunk )
+import Darcs.Patch.FileName ( FileName )
+import Darcs.Patch.Format ( PatchListFormat, FileNameFormat(..) )
+import Darcs.Patch.Show ( ShowPatchBasic(..), ShowPatch(..), formatFileName )
+import Darcs.Patch.Summary ( plainSummaryPrim, plainSummaryPrims )
+import Darcs.Patch.Viewing ( showContextHunk )
+import Darcs.Patch.Prim.Class ( PrimShow(..) )
+import Darcs.Patch.Prim.V3.Core ( Prim(..), Hunk(..), UUID(..) )
+import Darcs.Patch.Prim.V3.Details ()
+import Darcs.Witnesses.Show ( appPrec, Show1(..), Show2(..), ShowDict(..) )
+import Printer ( Doc, renderString, vcat,
+                 text, userchunk, packedString, blueText,
+                 ($$), (<+>), (<>),
+               )
+
+#include "gadts.h"
+
+-- TODO this instance shouldn't really be necessary, as Prims aren't used generically
+instance PatchListFormat Prim
+
+instance ShowPatchBasic Prim where
+    showPatch = showPrim OldFormat
+
+instance ShowPatch Prim where
+    showContextPatch p = return $ showPatch p
+    summary = plainSummaryPrim
+    summaryFL = plainSummaryPrims
+    thing _ = "change"
+
+instance Show (Prim C(x y)) where
+    show = renderString . showPrim undefined
+
+instance Show2 Prim where
+   showDict2 = ShowDictClass
+
+instance Show1 (Prim C(x)) where
+   showDict1 = ShowDictClass
+
+instance PrimShow Prim where
+  showPrim _ (TextHunk u h) = showHunk "hunk" u h
+  showPrim _ (BinaryHunk u h) = showHunk "binhunk" u h
+  showPrim _ (Manifest f (d,p)) = showManifest "manifest" d f p
+  showPrim _ (Demanifest f (d,p)) = showManifest "demanifest" d f p
+  showPrim _ Identity = blueText "identity"
+
+showManifest txt dir file path = blueText txt <+>
+                                 formatUUID file <+>
+                                 formatUUID dir <+>
+                                 packedString (encodeWhite path)
+
+showHunk txt id (Hunk off old new) = blueText txt <+>
+                                     formatUUID id <+>
+                                     text (show off) <+>
+                                     hunktext old <+>
+                                     hunktext new
+    where hunktext bit | B.null bit = text "!"
+                       | otherwise = text "." <> packedString (encodeWhite bit)
+
+formatUUID (UUID x) = packedString x
+
+
+-- XXX a bytestring version of encodeWhite from Darcs.FileName
+encodeWhite :: B.ByteString -> B.ByteString
+encodeWhite = BC.concatMap encode
+  where encode c
+          | isSpace c || c == '\\' = B.concat [ "\\", BC.pack $ show $ ord c, "\\" ]
+          | otherwise = BC.singleton c
+
diff --git a/src/Darcs/Patch/Repair.hs b/src/Darcs/Patch/Repair.hs
--- a/src/Darcs/Patch/Repair.hs
+++ b/src/Darcs/Patch/Repair.hs
@@ -20,13 +20,13 @@
 -- 'Repair' is implemented by collections of patches (FL, Named, PatchInfoAnd) that
 -- might need repairing.
 class Repair p where
-    applyAndTryToFix :: ApplyMonad m => p C(x y) -> m (Maybe (String, p C(x y)))
+    applyAndTryToFix :: ApplyMonad m (ApplyState p) => p C(x y) -> m (Maybe (String, p C(x y)))
 
 -- |'RepairToFL' is implemented by single patches that can be repaired (Prim, Patch, RealPatch)
 -- There is a default so that patch types with no current legacy problems don't need to
 -- have an implementation.
 class Apply p => RepairToFL p where
-    applyAndTryToFixFL :: ApplyMonad m => p C(x y) -> m (Maybe (String, FL p C(x y)))
+    applyAndTryToFixFL :: ApplyMonad m (ApplyState p) => p C(x y) -> m (Maybe (String, FL p C(x y)))
     applyAndTryToFixFL p = do apply p; return Nothing
 
 mapMaybeSnd :: (a -> b) -> Maybe (c, a) -> Maybe (c, b)
diff --git a/src/Darcs/Patch/RepoPatch.hs b/src/Darcs/Patch/RepoPatch.hs
--- a/src/Darcs/Patch/RepoPatch.hs
+++ b/src/Darcs/Patch/RepoPatch.hs
@@ -7,10 +7,11 @@
 import Darcs.Patch.Merge ( Merge )
 import Darcs.Patch.Patchy ( Patchy )
 import Darcs.Patch.Patchy.Instances ()
-import Darcs.Patch.Prim ( PrimPatchBase, PrimOf, FromPrim )
+import Darcs.Patch.Prim ( PrimPatchBase, PrimOf, FromPrim, FromPrims )
 import Darcs.Patch.Repair ( RepairToFL, Check )
 
-class (Patchy p, Merge p, Effect p, IsHunk p, FromPrim p, Conflict p, CommuteNoConflicts p, Check p, RepairToFL p, PatchListFormat p,
+class (Patchy p, Merge p, Effect p, IsHunk p, FromPrim p, Conflict p, CommuteNoConflicts p,
+       Check p, RepairToFL p, PatchListFormat p,
        PrimPatchBase p, Patchy (PrimOf p), IsHunk (PrimOf p)
       )
     => RepoPatch p
diff --git a/src/Darcs/Patch/Show.hs b/src/Darcs/Patch/Show.hs
--- a/src/Darcs/Patch/Show.hs
+++ b/src/Darcs/Patch/Show.hs
@@ -35,7 +35,8 @@
 
 import English ( plural, Noun(Noun) )
 import Printer ( Doc, vcat, blueText, ($$), (<>), text, packedString )
-import Storage.Hashed.Monad( TreeIO )
+import Darcs.Patch.ApplyMonad ( ApplyMonadTrans, ApplyMonad )
+import Darcs.Patch.Apply ( ApplyState )
 
 
 #include "gadts.h"
@@ -57,7 +58,9 @@
     -- used for instance before putting it into a bundle. As this
     -- unified context is not included in patch representation, this
     -- requires access to the tree.
-    showContextPatch :: p C(x y) -> TreeIO Doc
+    showContextPatch :: (Monad m, ApplyMonadTrans m (ApplyState p),
+                         ApplyMonad m (ApplyState p), Monad m)
+                     => p C(x y) -> m Doc
     showContextPatch p = return $ showPatch p
     description :: p C(x y) -> Doc
     description = showPatch
diff --git a/src/Darcs/Patch/Split.hs b/src/Darcs/Patch/Split.hs
--- a/src/Darcs/Patch/Split.hs
+++ b/src/Darcs/Patch/Split.hs
@@ -111,7 +111,20 @@
 
 
 doPrimSplit :: PrimPatch prim => prim C(x y) -> Maybe (B.ByteString, B.ByteString -> Maybe (FL prim C(x y)))
-doPrimSplit (isHunk -> Just (FileHunk fn n before after))
+doPrimSplit = doPrimSplit_ explanation
+  where
+    explanation = map BC.pack
+                   [ "Interactive hunk edit:"
+                   , " - Edit the section marked 'AFTER'"
+                   , " - Arbitrary editing is supported"
+                   , " - This will only affect the patch, not your working copy"
+                   , " - Hints:"
+                   , "   - To split added text, delete the part you want to postpone"
+                   , "   - To split removed text, copy back the part you want to retain"
+                   , ""
+                   ]
+
+doPrimSplit_ helptext (isHunk -> Just (FileHunk fn n before after))
  = Just (B.concat $ intersperse (BC.pack "\n") $ concat
            [ helptext
            , [mkSep " BEFORE (reference) =========================="]
@@ -126,22 +139,13 @@
                    (after', _) <- breakSep ls3    -- after 2
                    return (hunk before before' +>+ hunk before' after' +>+ hunk after' after))
     where sep = BC.pack "=========================="
-          helptext = map BC.pack [ "Interactive hunk edit:"
-                                 , " - Edit the section marked 'AFTER'"
-                                 , " - Arbitrary editing is supported"
-                                 , " - This will only affect the patch, not your working copy"
-                                 , " - Hints:"
-                                 , "   - To split added text, delete the part you want to postpone"
-                                 , "   - To split removed text, copy back the part you want to retain"
-                                 , ""
-                                 ]
           hunk :: PrimPatch prim => [B.ByteString] -> [B.ByteString] -> FL prim C(a b)
           hunk b a = canonize (primFromHunk (FileHunk fn n b a))
           mkSep s = BC.append sep (BC.pack s)
           breakSep xs = case break (sep `BC.isPrefixOf`) xs of
                            (_, []) -> Nothing
                            (ys, _:zs) -> Just (ys, zs)
-doPrimSplit _ = Nothing
+doPrimSplit_ _ _ = Nothing
 
 -- |Split a primitive hunk patch up
 -- by allowing the user to edit both the before and after lines, then insert fixup patches
@@ -152,11 +156,22 @@
 
 doReversePrimSplit :: PrimPatch prim => prim C(x y) -> Maybe (B.ByteString, B.ByteString -> Maybe (FL prim C(x y)))
 doReversePrimSplit prim = do
-  (text, parser) <- doPrimSplit (invert prim)
+  (text, parser) <- doPrimSplit_ reverseExplanation (invert prim)
   let parser' p = do
         patch <- parser  p
         return . reverseRL $ invertFL patch
   return (text, parser')
+  where
+    reverseExplanation =
+      map BC.pack [ "Interactive hunk edit:"
+                  , " - Edit the section marked 'AFTER' (representing the state to which you'll revert)"
+                  , " - Arbitrary editing is supported"
+                  , " - Your working copy will be returned to the 'AFTER' state"
+                  , " - Hints:"
+                  , "   - To revert only a part of a text addition, delete the part you want to get rid of"
+                  , "   - To revert only a part of a removal, copy back the part you want to retain"
+                  , ""
+                                 ]
 
 reversePrimSplitter :: PrimPatch prim => Splitter prim
 reversePrimSplitter = Splitter { applySplitter = doReversePrimSplit
diff --git a/src/Darcs/Patch/TouchesFiles.hs b/src/Darcs/Patch/TouchesFiles.hs
--- a/src/Darcs/Patch/TouchesFiles.hs
+++ b/src/Darcs/Patch/TouchesFiles.hs
@@ -30,14 +30,17 @@
                              patchChoices, tag, getChoices,
                       forceFirsts, forceLasts, tpPatch,
                     )
-import Darcs.Patch ( Patchy, applyToFilepaths, listTouchedFiles, invert )
+import Darcs.Patch ( Patchy, listTouchedFiles, invert )
+import Darcs.Patch.Apply ( ApplyState, applyToFilepaths )
 import Darcs.Witnesses.Ordered ( FL(..), (:>)(..), mapFL_FL, (+>+) )
 import Darcs.Witnesses.Sealed ( Sealed, seal )
+import Storage.Hashed.Tree( Tree )
 
-selectTouching :: Patchy p => Maybe [FilePath] -> PatchChoices p C(x y) -> PatchChoices p C(x y)
+selectTouching :: (Patchy p, ApplyState p ~ Tree)
+               => Maybe [FilePath] -> PatchChoices p C(x y) -> PatchChoices p C(x y)
 selectTouching Nothing pc = pc
 selectTouching (Just files) pc = forceFirsts xs pc
-    where ct :: Patchy p => [FilePath] -> FL (TaggedPatch p) C(x y) -> [Tag]
+    where ct :: (Patchy p, ApplyState p ~ Tree) => [FilePath] -> FL (TaggedPatch p) C(x y) -> [Tag]
           ct _ NilFL = []
           ct fs (tp:>:tps) = case lookTouch fs (tpPatch tp) of
                              (True, fs') -> tag tp:ct fs' tps
@@ -45,10 +48,11 @@
           xs = case getChoices pc of
                _ :> mc :> lc -> ct (map fix files) (mc +>+ lc)
 
-deselectNotTouching :: Patchy p => Maybe [FilePath] -> PatchChoices p C(x y) -> PatchChoices p C(x y)
+deselectNotTouching :: (Patchy p, ApplyState p ~ Tree)
+                    => Maybe [FilePath] -> PatchChoices p C(x y) -> PatchChoices p C(x y)
 deselectNotTouching Nothing pc = pc
 deselectNotTouching (Just files) pc = forceLasts xs pc
-    where ct :: Patchy p => [FilePath] -> FL (TaggedPatch p) C(x y) -> [Tag]
+    where ct :: (Patchy p, ApplyState p ~ Tree) => [FilePath] -> FL (TaggedPatch p) C(x y) -> [Tag]
           ct _ NilFL = []
           ct fs (tp:>:tps) = case lookTouch fs (tpPatch tp) of
                              (True, fs') -> ct fs' tps
@@ -56,10 +60,11 @@
           xs = case getChoices pc of
                fc :> mc :> _ -> ct (map fix files) (fc +>+ mc)
 
-selectNotTouching :: Patchy p => Maybe [FilePath] -> PatchChoices p C(x y) -> PatchChoices p C(x y)
+selectNotTouching :: (Patchy p, ApplyState p ~ Tree)
+                  => Maybe [FilePath] -> PatchChoices p C(x y) -> PatchChoices p C(x y)
 selectNotTouching Nothing pc = pc
 selectNotTouching (Just files) pc = forceFirsts xs pc
-    where ct :: Patchy p => [FilePath] -> FL (TaggedPatch p) C(x y) -> [Tag]
+    where ct :: (Patchy p, ApplyState p ~ Tree) => [FilePath] -> FL (TaggedPatch p) C(x y) -> [Tag]
           ct _ NilFL = []
           ct fs (tp:>:tps) = case lookTouch fs (tpPatch tp) of
                              (True, fs') -> ct fs' tps
@@ -73,16 +78,18 @@
 fix "." = "."
 fix f = "./" ++ f
 
-chooseTouching :: Patchy p => Maybe [FilePath] -> FL p C(x y) -> Sealed (FL p C(x))
+chooseTouching :: (Patchy p, ApplyState p ~ Tree)
+               => Maybe [FilePath] -> FL p C(x y) -> Sealed (FL p C(x))
 chooseTouching Nothing p = seal p
 chooseTouching files p = case getChoices $ selectTouching files $ patchChoices p of
                           fc :> _ :> _ -> seal $ mapFL_FL tpPatch fc
 
-choosePreTouching :: (Patchy p) => Maybe [FilePath] -> FL p C(x y) -> Sealed (FL p C(x))
+choosePreTouching :: (Patchy p, ApplyState p ~ Tree)
+                  => Maybe [FilePath] -> FL p C(x y) -> Sealed (FL p C(x))
 choosePreTouching files patch = chooseTouching (applyToFilepaths
     (invert patch) <$> files) patch
 
-lookTouch :: Patchy p => [FilePath] -> p C(x y) -> (Bool, [FilePath])
+lookTouch :: (Patchy p, ApplyState p ~ Tree) => [FilePath] -> p C(x y) -> (Bool, [FilePath])
 lookTouch fs p = (any (\tf -> any (affects tf) fs) (listTouchedFiles p)
                    || fs' /= fs, fs')
     where affects :: FilePath -> FilePath -> Bool
diff --git a/src/Darcs/Patch/V1/Apply.hs b/src/Darcs/Patch/V1/Apply.hs
--- a/src/Darcs/Patch/V1/Apply.hs
+++ b/src/Darcs/Patch/V1/Apply.hs
@@ -9,12 +9,14 @@
 
 import Darcs.Patch.V1.Commute ()
 import Darcs.Patch.V1.Core ( Patch(..) )
+import Darcs.Patch.Apply( ApplyState )
 
 import Darcs.Witnesses.Ordered ( mapFL_FL )
 
 #include "gadts.h"
 
 instance PrimPatch prim => Apply (Patch prim) where
+    type ApplyState (Patch prim) = ApplyState prim
     apply p = applyPrimFL $ effect p
 
 instance PrimPatch prim => RepairToFL (Patch prim) where
diff --git a/src/Darcs/Patch/V1/Viewing.hs b/src/Darcs/Patch/V1/Viewing.hs
--- a/src/Darcs/Patch/V1/Viewing.hs
+++ b/src/Darcs/Patch/V1/Viewing.hs
@@ -18,7 +18,7 @@
     showPatch = showPatch_
 
 instance PrimPatch prim => ShowPatch (Patch prim) where
-    showContextPatch (PP (isHunk -> Just fh)) = showContextHunk fh
+    showContextPatch (PP p) = showContextPatch p
     showContextPatch p = return $ showPatch p
     summary = plainSummary
     summaryFL = plainSummary
diff --git a/src/Darcs/Patch/V2/Real.hs b/src/Darcs/Patch/V2/Real.hs
--- a/src/Darcs/Patch/V2/Real.hs
+++ b/src/Darcs/Patch/V2/Real.hs
@@ -717,6 +717,7 @@
     CommonRL :: RL p C(x i) -> RL p C(y i) -> RL p C(i f) -> CommonRL p C(x y f)
 
 instance PrimPatch prim => Apply (RealPatch prim) where
+    type ApplyState (RealPatch prim) = ApplyState prim
     apply p = apply (effect p)
 
 instance PrimPatch prim => RepairToFL (RealPatch prim) where
diff --git a/src/Darcs/Patch/Viewing.hs b/src/Darcs/Patch/Viewing.hs
--- a/src/Darcs/Patch/Viewing.hs
+++ b/src/Darcs/Patch/Viewing.hs
@@ -24,10 +24,10 @@
     where
 
 import Prelude hiding ( pi, readFile )
-import Control.Monad.State.Strict ( gets )
-import Control.Monad.Trans ( liftIO )
+import Control.Applicative( (<$>) )
 
-import Storage.Hashed.Monad( TreeIO, fileExists, readFile, tree, virtualTreeIO )
+import Storage.Hashed.Monad( TreeIO, fileExists, readFile, tree, virtualTreeMonad )
+import Storage.Hashed.Tree( Tree )
 import Storage.Hashed.AnchoredPath( floatPath )
 import ByteStringUtils (linesPS )
 import qualified Data.ByteString as BS (null, concat)
@@ -42,38 +42,49 @@
 import Darcs.Patch.Format ( PatchListFormat(..), ListFormat(..), FileNameFormat(..) )
 import Darcs.Patch.FileHunk ( IsHunk(..), FileHunk(..), showFileHunk )
 import Darcs.Patch.Show ( ShowPatchBasic(..), ShowPatch(..), formatFileName )
-import Darcs.Patch.Apply ( Apply(..), applyToTree )
+import Darcs.Patch.Apply ( Apply(..), applyToState )
+import Darcs.Patch.ApplyMonad ( ApplyMonadTrans, runApplyMonad, getApplyState
+                              , ApplyMonadOver, ApplyMonad(..), toTree )
 #include "gadts.h"
 import Darcs.Witnesses.Ordered ( RL(..), FL(..),
                              mapFL, mapFL_FL, reverseRL, concatFL )
 
-
-showContextSeries :: (Apply p, ShowPatch p, IsHunk p) => FL p C(x y) -> TreeIO Doc
+showContextSeries :: forall p m x y. (Apply p, ShowPatch p, IsHunk p,
+                      ApplyMonadTrans m (ApplyState p), ApplyMonad m (ApplyState p))
+                  => FL p C(x y) -> m Doc
 showContextSeries patches = scs Nothing patches
-    where scs :: (Apply p, ShowPatch p, IsHunk p) => Maybe (FileHunk C(w x)) -> FL p C(x y) -> TreeIO Doc
+    where scs :: forall m' ww xx yy.
+                 (ApplyMonadTrans m' (ApplyState p), ApplyMonad m' (ApplyState p), ApplyMonadBase m ~ ApplyMonadBase m')
+              => Maybe (FileHunk C(ww xx)) -> FL p C(xx yy) -> m' Doc
           scs pold (p:>:ps) = do
-            s' <- gets tree >>= liftIO . applyToTree p
+            (_, s') <- nestedApply (apply p) =<< getApplyState
             case isHunk p of
               Nothing -> do a <- showContextPatch p
-                            b <- liftIO $ virtualTreeIO (scs Nothing ps) s'
+                            b <- nestedApply (scs Nothing ps) s'
                             return $ a $$ fst b
               Just fh ->
                   case ps of
-                  NilFL -> coolContextHunk pold fh Nothing
-                  (p2:>:_) -> do a <- coolContextHunk pold fh (isHunk p2)
-                                 b <- liftIO $ virtualTreeIO (scs (Just fh) ps) s'
+                  NilFL -> fst <$> liftApply (cool pold fh Nothing) s'
+                  (p2:>:_) -> do a <- fst <$> liftApply (cool pold fh (isHunk p2)) s'
+                                 b <- nestedApply (scs (Just fh) ps) s'
                                  return $ a $$ fst b
           scs _ NilFL = return empty
+          cool :: Maybe (FileHunk C(a b))
+                  -> FileHunk C(b c)
+                  -> Maybe (FileHunk C(c d))
+                  -> (ApplyState p) (ApplyMonadBase m)
+                  -> (ApplyMonadBase m) Doc
+          cool pold fh ps s = fst <$> virtualTreeMonad (coolContextHunk pold fh ps) (toTree s)
 
-showContextHunk :: FileHunk C(x y) -> TreeIO Doc
+showContextHunk :: (ApplyMonad m Tree) => FileHunk C(x y) -> m Doc
 showContextHunk h = coolContextHunk Nothing h Nothing
 
-coolContextHunk :: Maybe (FileHunk C(a b)) -> FileHunk C(b c) -> Maybe (FileHunk C(c d)) -> TreeIO Doc
+coolContextHunk :: (ApplyMonad m Tree, ApplyMonadTrans m Tree)
+                => Maybe (FileHunk C(a b)) -> FileHunk C(b c) -> Maybe (FileHunk C(c d)) -> m Doc
 coolContextHunk prev fh@(FileHunk f l o n) next = do
-  let path = floatPath $ fn2fp f
-  have <- fileExists path
-  content <- if have then Just `fmap` readFile path else return Nothing
-  case (linesPS . BS.concat . BL.toChunks) `fmap` content of -- sigh
+  have <- mDoesFileExist f
+  content <- if have then Just `fmap` mReadFilePS f else return Nothing
+  case linesPS `fmap` content of
     Nothing -> return $ showFileHunk OldFormat fh -- This is a weird error...
     Just ls ->
         let numpre = case prev of
@@ -111,7 +122,8 @@
 
 instance (Apply p, IsHunk p, PatchListFormat p, ShowPatch p) => ShowPatch (FL p) where
     showContextPatch = showContextPatchInternal patchListFormat
-      where showContextPatchInternal :: ListFormat p -> FL p C(x y) -> TreeIO Doc
+      where showContextPatchInternal :: (ApplyMonadTrans m (ApplyState p), ApplyMonad m (ApplyState (FL p)))
+                                     => ListFormat p -> FL p C(x y) -> m Doc
             showContextPatchInternal ListFormatV1      (p :>: NilFL) = showContextPatch p
             showContextPatchInternal ListFormatV1      NilFL         = return $ blueText "{" $$ blueText "}"
             showContextPatchInternal ListFormatV1      ps            = do x <- showContextSeries ps
diff --git a/src/Darcs/PrintPatch.hs b/src/Darcs/PrintPatch.hs
--- a/src/Darcs/PrintPatch.hs
+++ b/src/Darcs/PrintPatch.hs
@@ -23,6 +23,7 @@
                           printPatchPager, printFriendly ) where
 
 import Darcs.Patch ( Patchy, showContextPatch, showPatch )
+import Darcs.Patch.Apply ( ApplyState )
 import Storage.Hashed.Tree( Tree )
 import Storage.Hashed.Monad( virtualTreeIO )
 import Darcs.Arguments ( DarcsFlag, showFriendly )
@@ -46,5 +47,5 @@
 
 -- | 'contextualPrintPatch' prints a patch, together with its context,
 -- on standard output.
-contextualPrintPatch :: Patchy p => Tree IO -> p C(x y) -> IO ()
+contextualPrintPatch :: (Patchy p, ApplyState p ~ Tree) => Tree IO -> p C(x y) -> IO ()
 contextualPrintPatch s p = virtualTreeIO (showContextPatch p) s >>= putDocLnWith fancyPrinters . fst
diff --git a/src/Darcs/RemoteApply.hs b/src/Darcs/RemoteApply.hs
--- a/src/Darcs/RemoteApply.hs
+++ b/src/Darcs/RemoteApply.hs
@@ -9,7 +9,7 @@
 import Darcs.Utils ( breakCommand )
 import Darcs.URL ( isHttpUrl, isSshUrl, splitSshUrl, SshFilePath(..) )
 import Darcs.External ( darcsProgram, pipeDoc, pipeDocSSH, maybeURLCmd )
-import qualified Ssh( remoteDarcs )
+import qualified Darcs.Ssh as Ssh ( remoteDarcs )
 import Printer ( Doc )
 
 remoteApply :: [DarcsFlag] -> String -> Doc -> IO ExitCode
diff --git a/src/Darcs/RepoPath.hs b/src/Darcs/RepoPath.hs
--- a/src/Darcs/RepoPath.hs
+++ b/src/Darcs/RepoPath.hs
@@ -62,11 +62,9 @@
 #include "impossible.h"
 
 class FilePathOrURL a where
- {-# INLINE toPath #-}
  toPath :: a -> String
 
 class FilePathOrURL a => FilePathLike a where
- {-# INLINE toFilePath #-}
  toFilePath :: a -> FilePath
 
 -- | Paths which are relative to the local darcs repository and normalized.
diff --git a/src/Darcs/Repository.hs b/src/Darcs/Repository.hs
--- a/src/Darcs/Repository.hs
+++ b/src/Darcs/Repository.hs
@@ -26,7 +26,7 @@
     , withRepoLock, withRepoReadLock, withRepository, withRepositoryDirectory
     , withGutsOf, makePatchLazy, writePatchSet, findRepository, amInRepository
     , amNotInRepository, amInHashedRepository, replacePristine
-    , withRecorded, readRepo, prefsUrl
+    , withRecorded, readRepo, prefsUrl, readRepoUsingSpecificInventory
     , addToPending, tentativelyAddPatch, tentativelyRemovePatches
     , tentativelyAddToPending, tentativelyReplacePatches, readTentativeRepo
     , tentativelyMergePatches, considerMergeToWorking, revertRepositoryChanges
@@ -60,7 +60,7 @@
      findRepository, amInRepository, amNotInRepository, amInHashedRepository,
      makePatchLazy,
      withRecorded,
-     readRepo, readTentativeRepo,
+     readRepo, readTentativeRepo, readRepoUsingSpecificInventory,
      prefsUrl,
      withRepoLock, withRepoReadLock, withRepository, withRepositoryDirectory, withGutsOf,
      tentativelyAddPatch, tentativelyRemovePatches, tentativelyAddToPending,
@@ -104,6 +104,7 @@
                                      copySources )
 import Darcs.Repository.InternalTypes ( extractOptions, modifyCache )
 import Darcs.Patch ( RepoPatch, PrimOf )
+import Darcs.Patch.Apply( ApplyState )
 
 import Darcs.Witnesses.Ordered ( FL(..), RL(..), bunchFL, mapFL, mapRL
                                , lengthRL, (+>+), (:\/:)(..) )
@@ -170,7 +171,7 @@
   | formatHas HashedInventory f = Hashed
   | otherwise = Old
 
-copyInventory :: forall p C(r u t). RepoPatch p => Repository p C(r u t) -> IO ()
+copyInventory :: forall p C(r u t). (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> IO ()
 copyInventory fromRepo@(Repo fromDir opts fromFormat (DarcsRepository _ fromCache)) = do
   toRepo@(Repo toDir opts' toFormat (DarcsRepository toPristine toCache)) <-
     identifyDarcsRepository opts "."
@@ -195,46 +196,53 @@
                 endTedious k
                 HashedRepo.finalizeTentativeChanges toRepo $ compression opts
 
-copyRepository :: forall p C(r u t). RepoPatch p => Repository p C(r u t) -> IO ()
-copyRepository fromRepo@(Repo fromDir opts _ _) = do
+copyRepository :: forall p C(r u t). (RepoPatch p, ApplyState (PrimOf p) ~ Tree, ApplyState p ~ Tree)
+               => Repository p C(r u t) -> Bool -> IO ()
+copyRepository fromRepo@(Repo fromDir opts _ _) withWorkingDir = do
   debugMessage "Copying prefs"
   copyFileOrUrl (remoteDarcs opts) (fromDir ++ "/" ++ darcsdir ++ "/prefs/prefs")
     (darcsdir ++ "/prefs/prefs") (MaxAge 600) `catchall` return ()
   -- try packs for remote repositories
   if (not . isFile) fromDir && usePacks opts
-    then copyPackedRepository fromRepo
-    else copyNotPackedRepository fromRepo
+    then copyPackedRepository fromRepo withWorkingDir
+    else copyNotPackedRepository fromRepo withWorkingDir
 
 putInfo :: [DarcsFlag] -> Doc -> IO ()
 putInfo opts = unless (Quiet `elem` opts) . hPutDocLn stderr
 
-copyNotPackedRepository :: forall p C(r u t). RepoPatch p => Repository p C(r u t) -> IO ()
-copyNotPackedRepository fromrepository@(Repo _ opts rffrom _) = do
+copyNotPackedRepository :: forall p C(r u t). (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) ->
+                           Bool -> IO ()
+copyNotPackedRepository fromrepository@(Repo _ opts rffrom _) withWorkingDir = do
   copyInventory fromrepository
   debugMessage "Grabbing lock in new repository..."
   withRepoLock opts $ RepoJob $ \torepository ->
       if formatHas HashedInventory rffrom
-      then do debugMessage "Writing working directory contents..."
-              createPristineDirectoryTree torepository "."
-              fetchPatchesIfNecessary opts torepository `catchInterrupt`
-                (putInfo opts $ text "Using lazy repository.")
+      then do
+        when withWorkingDir $ do
+          debugMessage "Writing working directory contents..."
+          createPristineDirectoryTree torepository "."
+        fetchPatchesIfNecessary opts torepository `catchInterrupt`
+          (putInfo opts $ text "Using lazy repository.")
       else      do local_patches <- readRepo torepository
                    replacePristine torepository emptyTree
                    let patchesToApply = progressFL "Applying patch" $ newset2FL local_patches
                    sequence_ $ mapFL applyToTentativePristine $ bunchFL 100 patchesToApply
                    finalizeRepositoryChanges torepository
-                   debugMessage "Writing working directory contents..."
-                   createPristineDirectoryTree torepository "."
+                   when withWorkingDir $ do
+                     debugMessage "Writing working directory contents..."
+                     createPristineDirectoryTree torepository "."
 
-copyPackedRepository :: forall p C(r u t). RepoPatch p =>
-  Repository p C(r u t) -> IO ()
-copyPackedRepository r =
+copyPackedRepository ::
+  forall p C(r u t). (RepoPatch p, ApplyState (PrimOf p) ~ Tree, ApplyState p ~ Tree)
+  => Repository p C(r u t) -> Bool -> IO ()
+copyPackedRepository r withWorkingDir =
   -- fallback to no-packs get in case of error
-  copyPackedRepository2 r `catchall` copyNotPackedRepository r
+  copyPackedRepository2 r withWorkingDir `catchall` copyNotPackedRepository r withWorkingDir
 
-copyPackedRepository2 :: forall p C(r u t). RepoPatch p =>
-  Repository p C(r u t) -> IO ()
-copyPackedRepository2 fromRepo@(Repo fromDir opts _ (DarcsRepository _ fromCache)) = do
+copyPackedRepository2 ::
+  forall p C(r u t). (RepoPatch p, ApplyState (PrimOf p) ~ Tree, ApplyState p ~ Tree)
+  => Repository p C(r u t) -> Bool -> IO ()
+copyPackedRepository2 fromRepo@(Repo fromDir opts _ (DarcsRepository _ fromCache)) withWorkingDir = do
   b <- fetchFileLazyPS (fromDir ++ "/" ++ darcsdir ++ "/packs/basic.tar.gz") Uncachable
   when (Verbose `elem` opts) $ putDocLn $ text "Getting packed repository."
   Repo toDir _ toFormat (DarcsRepository toPristine toCache) <-
@@ -252,7 +260,8 @@
   cleanDir "pristine.hashed"
   removeFile $ darcsdir </> "hashed_inventory"
   unpackBasic toCache3 . Tar.read $ decompress b
-  createPristineDirectoryTree toRepo "."
+  when withWorkingDir $
+    createPristineDirectoryTree toRepo "."
   -- pull new patches
   us <- readRepo toRepo
   them <- readRepo fromRepo
@@ -262,7 +271,8 @@
   invalidateIndex toRepo
   withGutsOf toRepo $ do
     finalizeRepositoryChanges toRepo
-    _ <- applyToWorking toRepo opts pw
+    when withWorkingDir $
+      applyToWorking toRepo opts pw >> return ()
     return ()
   -- get old patches
   unless isLazy $ (do
@@ -390,7 +400,7 @@
 
 -- | writePatchSet is like patchSetToRepository, except that it doesn't
 -- touch the working directory or pristine cache.
-writePatchSet :: RepoPatch p => PatchSet p C(Origin x) -> [DarcsFlag] -> IO (Repository p C(r u t))
+writePatchSet :: (RepoPatch p, ApplyState p ~ Tree) => PatchSet p C(Origin x) -> [DarcsFlag] -> IO (Repository p C(r u t))
 writePatchSet patchset opts = do
     maybeRepo <- maybeIdentifyRepository opts "."
     let repo@(Repo _ _ _ (DarcsRepository _ c)) =
@@ -408,7 +418,8 @@
 --   repository with the --to-match flag and the new repository is not in hashed format.
 --   This function does not (yet) work for hashed repositories. If the passed @DarcsFlag@s tell
 --   darcs to create a hashed repository, this function will call @error@.
-patchSetToRepository :: RepoPatch p => Repository p C(r1 u1 r1) -> PatchSet p C(Origin x)
+patchSetToRepository :: (RepoPatch p, ApplyState p ~ Tree)
+                     => Repository p C(r1 u1 r1) -> PatchSet p C(Origin x)
                      -> [DarcsFlag] -> IO (Repository p C(r u t))
 patchSetToRepository (Repo fromrepo _ rf _) patchset opts = do
     when (formatHas HashedInventory rf) $ -- set up sources and all that
@@ -434,7 +445,7 @@
 -- | Unless a flag has been given in the first argument that tells darcs not to do so (--lazy,
 --   or --partial), this function fetches all patches that the given repository has
 --   with fetchFileUsingCache. This is used as a helper in copyRepository.
-fetchPatchesIfNecessary :: forall p C(r u t). RepoPatch p => [DarcsFlag] -> Repository p C(r u t) -> IO ()
+fetchPatchesIfNecessary :: forall p C(r u t). (RepoPatch p, ApplyState p ~ Tree) => [DarcsFlag] -> Repository p C(r u t) -> IO ()
 fetchPatchesIfNecessary opts torepository@(Repo _ _ _ (DarcsRepository _ c)) =
     unless (Lazy `elem` opts) $
              do unless (Complete `elem` opts) $
@@ -455,7 +466,8 @@
           _ <- fetchFileUsingCache c HashedPatchesDir f
           mapM_ (speculateFileUsingCache c HashedPatchesDir) ss
 
-addToPending :: RepoPatch p => Repository p C(r u t) -> FL (PrimOf p) C(u y) -> IO ()
+addToPending :: (RepoPatch p, ApplyState p ~ Tree)
+             => Repository p C(r u t) -> FL (PrimOf p) C(u y) -> IO ()
 addToPending (Repo _ opts _ _) _ | NoUpdateWorking `elem` opts = return ()
 addToPending repo@(Repo{}) p =
     do pend <- unrecordedChanges (UseIndex, ScanKnown) repo Nothing
diff --git a/src/Darcs/Repository/ApplyPatches.hs b/src/Darcs/Repository/ApplyPatches.hs
--- a/src/Darcs/Repository/ApplyPatches.hs
+++ b/src/Darcs/Repository/ApplyPatches.hs
@@ -27,10 +27,11 @@
 import Darcs.IO () -- for ApplyMonad IO
 import Darcs.Patch.PatchInfoAnd ( PatchInfoAnd, hopefully, info )
 import Darcs.Patch.Info ( humanFriendly )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.Witnesses.Ordered ( FL(..), mapFL )
 import Printer ( text, ($$) )
 
-applyPatches :: (MonadProgress m, ApplyMonad m, Patchy p) => FL (PatchInfoAnd p) C(x y) -> m ()
+applyPatches :: (MonadProgress m, ApplyMonad m (ApplyState p), Patchy p) => FL (PatchInfoAnd p) C(x y) -> m ()
 applyPatches ps = runProgressActions "Applying patch" (mapFL doApply ps)
    where doApply hp =
             ProgressAction { paAction = apply (hopefully hp)
diff --git a/src/Darcs/Repository/Cache.hs b/src/Darcs/Repository/Cache.hs
--- a/src/Darcs/Repository/Cache.hs
+++ b/src/Darcs/Repository/Cache.hs
@@ -47,7 +47,7 @@
 import Darcs.URL ( isFile, isHttpUrl, isSshUrl )
 import Darcs.Utils ( withCurrentDirectory, catchall )
 import Darcs.SignalHandler ( catchNonSignal )
-import qualified HTTP ( ConnectionError(..) )
+import qualified URL ( ConnectionError(..) )
 
 data HashedDir = HashedPristineDir | HashedPatchesDir | HashedInventoriesDir
 hashedDir :: HashedDir -> String
@@ -133,7 +133,7 @@
 cacheHash :: B.ByteString -> String
 cacheHash ps = case show (B.length ps) of
                  x | l > 10 -> sha256sum ps
-                   | otherwise -> take (10-l) (repeat '0') ++ x ++'-':sha256sum ps
+                   | otherwise -> replicate (10-l) '0' ++ x ++'-':sha256sum ps
                                         where l = length x
 
 okayHash :: String -> Bool
@@ -265,7 +265,7 @@
             let string = case dropWhile (/='(') e of
                           (_:xs) -> fst (break (==')') xs)
                           _      -> e
-            let cerror = case reads string ::[(HTTP.ConnectionError,String)] of
+            let cerror = case reads string ::[(URL.ConnectionError,String)] of
                            [(ce,_)] -> Just ce
                            _        -> Nothing
             if isJust cerror
diff --git a/src/Darcs/Repository/Format.hs b/src/Darcs/Repository/Format.hs
--- a/src/Darcs/Repository/Format.hs
+++ b/src/Darcs/Repository/Format.hs
@@ -16,7 +16,7 @@
 
 import Darcs.SignalHandler ( catchNonSignal )
 import Darcs.External ( fetchFilePS, Cachable( Cachable ) )
-import Darcs.Flags ( DarcsFlag ( UseFormat2, UseHashedInventory) )
+import Darcs.Flags ( DarcsFlag ( UseFormat2, UseHashedInventory, UseNoWorkingDir ) )
 import Darcs.Lock ( writeBinFile )
 import Darcs.Utils ( catchall, prettyException )
 import Progress ( beginTedious, endTedious, finishedOneIO )
@@ -29,7 +29,7 @@
 
 #include "impossible.h"
 
-data RepoProperty = Darcs1_0 | Darcs2 | HashedInventory
+data RepoProperty = Darcs1_0 | Darcs2 | HashedInventory | NoWorkingDir
 
 -- | @RepoFormat@ is the representation of the format of a
 -- repository. Each sublist corresponds to a line in the format
@@ -94,10 +94,13 @@
 defaultRepoFormat = RF [[rp2ps Darcs1_0]]
 
 createRepoFormat :: [DarcsFlag] -> RepoFormat
-createRepoFormat fs = RF (map rp2ps [HashedInventory]: maybe2)
+createRepoFormat fs = RF (map rp2ps (HashedInventory:flags2wd): maybe2)
     where maybe2 = if UseFormat2 `notElem` fs && (UseHashedInventory `elem` fs)
                    then []
                    else [[rp2ps Darcs2]]
+          flags2wd = if UseNoWorkingDir `elem` fs
+                      then [NoWorkingDir]
+                      else []
 
 -- | @writeProblem form@ tells if we can write to a repo in format @form@.
 -- It returns @Nothing@ if there's no problem writing to such a repository.
@@ -145,12 +148,15 @@
 -- | This is the list of properties which this version of darcs knows
 -- how to handle.
 knownProperties :: [RepoProperty]
-knownProperties = [Darcs1_0, Darcs2, HashedInventory]
+knownProperties = [Darcs1_0, Darcs2, HashedInventory, NoWorkingDir]
 
 formatHas :: RepoProperty -> RepoFormat -> Bool
 formatHas f (RF ks) = rp2ps f `elem` concat ks
 
+instance Show RepoProperty where
+  show Darcs1_0 = "darcs-1.0"
+  show Darcs2 = "darcs-2"
+  show HashedInventory = "hashed"
+  show NoWorkingDir = "no-working-dir"
 rp2ps :: RepoProperty -> B.ByteString
-rp2ps Darcs1_0 = BC.pack "darcs-1.0"
-rp2ps Darcs2 = BC.pack "darcs-2"
-rp2ps HashedInventory = BC.pack "hashed"
+rp2ps = BC.pack . show
diff --git a/src/Darcs/Repository/HashedIO.hs b/src/Darcs/Repository/HashedIO.hs
--- a/src/Darcs/Repository/HashedIO.hs
+++ b/src/Darcs/Repository/HashedIO.hs
@@ -14,7 +14,7 @@
 -- along with this program; if not, write to the Free Software Foundation,
 -- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances #-}
+{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances, MultiParamTypeClasses #-}
 
 #include "gadts.h"
 
@@ -51,7 +51,7 @@
 
 import Storage.Hashed.Darcs( readDarcsHashedDir, darcsLocation,
                              decodeDarcsHash, decodeDarcsSize )
-import Storage.Hashed.Tree( ItemType(..) )
+import Storage.Hashed.Tree( ItemType(..), Tree )
 import Darcs.CommandsAux
 
 -- | @readHashFile c subdir hash@ reads the file with hash @hash@ in dir subdir,
@@ -107,7 +107,8 @@
                                                    Just h -> inh h $ mInCurrentDirectory fn'' j
     where fn' = normPath fn
 
-instance ApplyMonad (HashedIO p) where
+instance ApplyMonad (HashedIO p) Tree where
+    type ApplyMonadBase (HashedIO p) = IO
     mDoesDirectoryExist fn = do thing <- identifyThing fn
                                 case thing of Just (D,_) -> return True
                                               _ -> return False
diff --git a/src/Darcs/Repository/HashedRepo.hs b/src/Darcs/Repository/HashedRepo.hs
--- a/src/Darcs/Repository/HashedRepo.hs
+++ b/src/Darcs/Repository/HashedRepo.hs
@@ -21,12 +21,14 @@
 module Darcs.Repository.HashedRepo ( revertTentativeChanges, finalizeTentativeChanges,
                                      cleanPristine,
                                      copyPristine, copyPartialsPristine,
-                                     applyToTentativePristine,
+                                     applyToTentativePristine, addToSpecificInventory,
                                      addToTentativeInventory, removeFromTentativeInventory,
-                                     readRepo, readTentativeRepo, writeAndReadPatch,
+                                     readRepo, readTentativeRepo,
+                                     readRepoUsingSpecificInventory, writeAndReadPatch,
                                      writeTentativeInventory, copyRepo,
                                      readHashedPristineRoot, pris2inv, copySources,
-                                     listInventories
+                                     listInventories, writePatchIfNecessary,
+                                     readRepoFromInventoryList, readPatchIds
                                    ) where
 
 import System.Directory ( createDirectoryIfMissing )
@@ -56,7 +58,7 @@
 import Darcs.Patch.PatchInfoAnd ( PatchInfoAnd, patchInfoAndPatch, info,
                          extractHash, createHashed )
 import Darcs.Patch ( RepoPatch, Patchy, showPatch, readPatch, apply )
-import Darcs.Patch.Patchy ( Apply )
+import Darcs.Patch.Apply ( Apply, ApplyState )
 import Darcs.Patch.ReadMonads ( parseStrictly )
 import Darcs.Patch.Depends ( commuteToEnd, slightlyOptimizePatchset )
 import Darcs.Patch.Info ( PatchInfo, showPatchInfo, humanFriendly, readPatchInfo )
@@ -84,11 +86,11 @@
 import Storage.Hashed.Darcs( hashedTreeIO, readDarcsHashedNosize, readDarcsHashed,
                              writeDarcsHashed,
                              decodeDarcsHash, decodeDarcsSize )
-import Storage.Hashed.Tree( treeHash )
+import Storage.Hashed.Tree( treeHash, Tree )
 import Storage.Hashed.Hash( encodeBase16, Hash(..) )
 
 applyHashed'
-   :: Apply p => Hash -> p C(x y) -> IO String
+   :: (Apply p, ApplyState p ~ Tree) => Hash -> p C(x y) -> IO String
 applyHashed' root p = do case root of
                               (SHA256 _) -> return ()
                               _ -> fail $ "Cannot handle hash: " ++ show root
@@ -96,7 +98,7 @@
                          (_, t) <- (hashedTreeIO (apply p) s "_darcs/pristine.hashed")
                          return $ BC.unpack . encodeBase16 $ treeHash t
 
-applyHashed :: Patchy q => String -> q C(x y) -> IO String
+applyHashed :: (ApplyState q ~ Tree, Patchy q) => String -> q C(x y) -> IO String
 applyHashed h p = applyHashed' hash p `catch` \_ -> do
                           hPutStrLn stderr warn
                           inv <- gzReadFilePS invpath
@@ -121,7 +123,7 @@
        i <- gzReadFilePS (darcsdir++"/hashed_inventory")
        writeBinFile (darcsdir++"/tentative_pristine") $ "pristine:" ++ inv2pris i
 
-finalizeTentativeChanges :: RepoPatch p => Repository p C(r u t) -> Compression -> IO ()
+finalizeTentativeChanges :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> Compression -> IO ()
 finalizeTentativeChanges r compr =
     do let t = darcsdir++"/tentative_hashed_inventory"
        -- first let's optimize it...
@@ -150,15 +152,20 @@
       i <- gzReadFilePS (darcsdir++"/hashed_inventory")
       cleanHashdir (extractCache r) HashedPristineDir [inv2pris i]
 
+addToSpecificInventory :: RepoPatch p => String -> Cache -> Compression
+                           -> PatchInfoAnd p C(x y) -> IO FilePath
+addToSpecificInventory invPath c compr p = do
+  let invFile = darcsdir </> invPath
+  hash <- snd `fmap` writePatchIfNecessary c compr p
+  appendDocBinFile invFile $ showPatchInfo $ info p
+  appendBinFile invFile $ "\nhash: " ++ hash ++ "\n"
+  return $ darcsdir </> "patches" </> hash
+
 addToTentativeInventory :: RepoPatch p => Cache -> Compression
                            -> PatchInfoAnd p C(x y) -> IO FilePath
-addToTentativeInventory c compr p =
-    do hash <- snd `fmap` writePatchIfNecesary c compr p
-       appendDocBinFile (darcsdir++"/tentative_hashed_inventory") $ showPatchInfo $ info p
-       appendBinFile (darcsdir++"/tentative_hashed_inventory") $ "\nhash: " ++ hash ++ "\n"
-       return $ darcsdir++"/patches/" ++ hash
+addToTentativeInventory = addToSpecificInventory "tentative_hashed_inventory"
 
-removeFromTentativeInventory :: RepoPatch p => Repository p C(r u t) -> Compression
+removeFromTentativeInventory :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> Compression
                                 -> FL (PatchInfoAnd p) C(x t) -> IO ()
 removeFromTentativeInventory repo compr to_remove =
        -- FIXME: This algorithm should be *far* simpler.  All we need do is
@@ -172,7 +179,7 @@
        unless okay $ bug "bug in HashedRepo.removeFromTentativeInventory"
        sequence_ $ mapFL (addToTentativeInventory (extractCache repo) compr) (reverseRL skipped)
 
-simpleRemoveFromTentativeInventory :: forall p C(r u t). RepoPatch p =>
+simpleRemoveFromTentativeInventory :: forall p C(r u t). (RepoPatch p, ApplyState p ~ Tree) =>
                                           Repository p C(r u t) -> Compression -> [PatchInfo] -> IO Bool
 simpleRemoveFromTentativeInventory repo compr pis = do
     inv <- readTentativeRepo repo "."
@@ -192,34 +199,38 @@
 writeHashFile c compr subdir d = do debugMessage $ "Writing hash file to "++(hashedDir subdir)
                                     writeFileUsingCache c compr subdir $ renderPS d
 
-readRepo :: RepoPatch p => Repository p C(r u t) -> String -> IO (PatchSet p C(Origin r))
-readRepo repo d = do
-  realdir <- toPath `fmap` ioAbsoluteOrRemote d
-  Sealed ps <- readRepoPrivate (extractCache repo) realdir "hashed_inventory" `catch`
-                 (\e -> do hPutStrLn stderr ("Invalid repository:  " ++ realdir)
-                           ioError e)
-  return $ unsafeCoerceP ps
+readRepo :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> String -> IO (PatchSet p C(Origin r))
+readRepo repo d = readRepoUsingSpecificInventory "hashed_inventory" repo d
 
-readTentativeRepo :: RepoPatch p => Repository p C(r u t) -> String -> IO (PatchSet p C(Origin t))
-readTentativeRepo repo d = do
-  realdir <- toPath `fmap` ioAbsoluteOrRemote d
-  Sealed ps <- readRepoPrivate (extractCache repo) realdir "tentative_hashed_inventory" `catch`
+readTentativeRepo :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> String -> IO (PatchSet p C(Origin t))
+readTentativeRepo repo d =
+  readRepoUsingSpecificInventory "tentative_hashed_inventory" repo d
+
+readRepoUsingSpecificInventory :: (RepoPatch p, ApplyState p ~ Tree) => String -> Repository p C(r u t)
+  -> String -> IO (PatchSet p C(Origin s))
+readRepoUsingSpecificInventory invPath repo dir = do
+  realdir <- toPath `fmap` ioAbsoluteOrRemote dir
+  Sealed ps <- readRepoPrivate (extractCache repo) realdir invPath `catch`
                  (\e -> do hPutStrLn stderr ("Invalid repository:  " ++ realdir)
                            ioError e)
   return $ unsafeCoerceP ps
 
-readRepoPrivate :: RepoPatch p => Cache -> FilePath -> FilePath -> IO (SealedPatchSet p C(Origin))
-readRepoPrivate cache d iname =
- do inventory <- readInventoryPrivate cache (d </> "_darcs") iname
-    parseinvs inventory
-    where read_patches :: RepoPatch p => [(PatchInfo, String)]
+readRepoPrivate :: (RepoPatch p, ApplyState p ~ Tree) => Cache -> FilePath -> FilePath -> IO (SealedPatchSet p C(Origin))
+readRepoPrivate cache d iname = do
+  inventory <- readInventoryPrivate cache (d </> "_darcs") iname
+  readRepoFromInventoryList cache inventory
+
+readRepoFromInventoryList :: (RepoPatch p, ApplyState p ~ Tree) => Cache
+  -> (Maybe String, [(PatchInfo, String)]) -> IO (SealedPatchSet p C(Origin))
+readRepoFromInventoryList cache inventory = parseinvs inventory
+    where read_patches :: (RepoPatch p, ApplyState p ~ Tree) => [(PatchInfo, String)]
                        -> IO (Sealed (RL (PatchInfoAnd p) C(x)))
           read_patches [] = return $ seal NilRL
           read_patches allis@((i1,h1):is1) =
               lift2Sealed (\p rest -> i1 `patchInfoAndPatch` p :<: rest)
                           (rp is1)
                           (createHashed h1 (const $ speculate h1 allis >> parse i1 h1))
-              where rp :: RepoPatch p => [(PatchInfo, String)]
+              where rp :: (RepoPatch p, ApplyState p ~ Tree) => [(PatchInfo, String)]
                        -> IO (Sealed (RL (PatchInfoAnd p) C(x)))
                     rp [] = return $ seal NilRL
                     rp [(i,h),(il,hl)] =
@@ -229,7 +240,7 @@
                     rp ((i,h):is) = lift2Sealed (\p rest -> i `patchInfoAndPatch` p :<: rest)
                                                 (rp is)
                                                 (createHashed h (parse i))
-          read_tag :: RepoPatch p => (PatchInfo, String) -> IO (Sealed (PatchInfoAnd p C(x)))
+          read_tag :: (RepoPatch p, ApplyState p ~ Tree) => (PatchInfo, String) -> IO (Sealed (PatchInfoAnd p C(x)))
           read_tag (i,h) = mapSeal (patchInfoAndPatch i) `fmap` createHashed h (parse i)
           speculate :: String -> [(PatchInfo, String)] -> IO ()
           speculate h is =
@@ -244,7 +255,7 @@
                            Nothing -> fail $ unlines ["Couldn't parse file "++fn,
                                                       "which is patch",
                                                       renderString $ humanFriendly i]
-          parseinvs :: RepoPatch p => (Maybe String, [(PatchInfo, String)])
+          parseinvs :: (RepoPatch p, ApplyState p ~ Tree) => (Maybe String, [(PatchInfo, String)])
                     -> IO (SealedPatchSet p C(Origin))
           parseinvs (Nothing, ris) = mapSeal (\ps -> PatchSet ps NilRL)
                                      `fmap` (read_patches $ reverse ris)
@@ -255,7 +266,7 @@
                                              unsafeInterleaveIO (read_patches $
                                                                  reverse ris)
                                          return $ seal $ PatchSet ps ts
-          read_ts :: RepoPatch p => (PatchInfo, String) -> String -> IO (Sealed (RL (Tagged p) C(Origin)))
+          read_ts :: (RepoPatch p, ApplyState p ~ Tree) => (PatchInfo, String) -> String -> IO (Sealed (RL (Tagged p) C(Origin)))
           read_ts tag0 h0 =
               do contents <- unsafeInterleaveIO $ readTaggedInventory cache h0
                  let is = reverse $ case contents of (Just _, _:ris0) -> ris0
@@ -315,7 +326,7 @@
 
 writeAndReadPatch :: RepoPatch p => Cache -> Compression -> PatchInfoAnd p C(x y)
                      -> IO (PatchInfoAnd p C(x y))
-writeAndReadPatch c compr p =    do (i,h) <- writePatchIfNecesary c compr p
+writeAndReadPatch c compr p =    do (i,h) <- writePatchIfNecessary c compr p
                                     unsafeInterleaveIO $ readp h i
     where parse i h = do debugMessage ("Rereading patch file: "++ show (humanFriendly i))
                          (fn,ps) <- fetchFileUsingCache c HashedPatchesDir h
@@ -348,14 +359,14 @@
                         -> PatchSet p C(Origin x) -> IO (Maybe String)
 writeInventoryPrivate _ _ _ (PatchSet NilRL NilRL) = return Nothing
 writeInventoryPrivate cache _ compr (PatchSet x NilRL) =
-  do inventory <- sequence $ mapRL (writePatchIfNecesary cache compr) x
+  do inventory <- sequence $ mapRL (writePatchIfNecessary cache compr) x
      let inventorylist = hcat (map pihash $ reverse inventory)
      hash <- writeHashFile cache compr HashedInventoriesDir inventorylist
      return $ Just hash
 writeInventoryPrivate cache k compr (PatchSet x xs@(Tagged t _ _ :<: _)) =
   do resthash <- write_ts xs
      finishedOneIO k $ maybe "" id resthash
-     inventory <- sequence $ mapRL (writePatchIfNecesary cache compr) (x+<+t:<:NilRL)
+     inventory <- sequence $ mapRL (writePatchIfNecessary cache compr) (x+<+t:<:NilRL)
      let inventorylist = hcat (map pihash $ reverse inventory)
          inventorycontents =
              case resthash of
@@ -369,9 +380,9 @@
               writeInventoryPrivate cache k compr $ PatchSet pps tts
           write_ts NilRL = return Nothing
 
-writePatchIfNecesary :: RepoPatch p => Cache -> Compression
+writePatchIfNecessary :: RepoPatch p => Cache -> Compression
                         -> PatchInfoAnd p C(x y) -> IO (PatchInfo, String)
-writePatchIfNecesary c compr hp =
+writePatchIfNecessary c compr hp =
     seq infohp $ case extractHash hp of
                    Right h -> return (infohp, h)
                    Left p -> (\h -> (infohp, h)) `fmap`
@@ -419,13 +430,13 @@
                 then Nothing
                 else Just (BC.unpack $ B.tail h,r)
 
-applyPristine :: Patchy q => String -> String -> q C(x y) -> IO ()
+applyPristine :: (ApplyState q ~ Tree, Patchy q) => String -> String -> q C(x y) -> IO ()
 applyPristine d iname p =
     do i <- gzReadFilePS (d++"/"++iname)
        h <- applyHashed (inv2pris i) p
        writeDocBinFile (d++"/"++iname) $ pris2inv h i
 
-applyToTentativePristine :: Patchy q => q C(x y) -> IO ()
+applyToTentativePristine :: (ApplyState q ~ Tree, Patchy q) => q C(x y) -> IO ()
 applyToTentativePristine p = applyPristine "." (darcsdir++"/tentative_pristine") p
 
 copyPristine :: Cache -> Compression -> String -> String -> IO ()
diff --git a/src/Darcs/Repository/Internal.hs b/src/Darcs/Repository/Internal.hs
--- a/src/Darcs/Repository/Internal.hs
+++ b/src/Darcs/Repository/Internal.hs
@@ -30,7 +30,7 @@
                     announceMergeConflicts, setTentativePending,
                     checkUnrecordedConflicts,
                     withRecorded,
-                    readRepo, readTentativeRepo,
+                    readRepo, readTentativeRepo, readRepoUsingSpecificInventory,
                     prefsUrl, makePatchLazy,
                     withRepoLock, withRepoReadLock,
                     withRepository, withRepositoryDirectory, withGutsOf,
@@ -49,7 +49,8 @@
                     makeNewPending, seekRepo
                   ) where
 
-import Printer ( putDocLn, (<+>), text, ($$) )
+import Printer ( putDocLn, (<+>), text, ($$), redText, putDocWith, (<>), ($$))
+import Darcs.ColorPrinter (fancyPrinters)
 
 import Darcs.Repository.Prefs ( getPrefval )
 import Darcs.Repository.State ( readRecorded, readWorking )
@@ -63,12 +64,12 @@
 import Darcs.IO ( runTolerantly, runSilently )
 
 import Darcs.SignalHandler ( withSignalsBlocked )
-import Darcs.Repository.Format ( RepoFormat, RepoProperty( Darcs2, HashedInventory ),
+import Darcs.Repository.Format ( RepoFormat, RepoProperty( Darcs2 , HashedInventory, NoWorkingDir ),
                                  tryIdentifyRepoFormat, formatHas,
                                  writeProblem, readProblem, readfromAndWritetoProblem )
 import System.Directory ( doesDirectoryExist, setCurrentDirectory,
                           createDirectoryIfMissing, doesFileExist )
-import Control.Monad ( liftM, when, unless, filterM )
+import Control.Monad ( when, unless, filterM )
 import Control.Applicative ( (<$>) )
 import Workaround ( getCurrentDirectory, renameFile, setExecutable )
 
@@ -76,10 +77,11 @@
 import qualified Data.ByteString.Char8 as BC (pack)
 
 import Darcs.Patch ( Effect, primIsHunk, primIsBinary, description,
-                     tryToShrink, commuteFLorComplain, commute )
+                     tryToShrink, commuteFLorComplain, commute, fromPrim )
 
 import Darcs.Patch.Dummy ( DummyPatch )
 
+import Darcs.Patch.Apply ( ApplyState )
 import Darcs.Patch.V1 ( Patch )
 import Darcs.Patch.V2 ( RealPatch )
 import Darcs.Patch.Prim.V1 ( Prim )
@@ -87,8 +89,7 @@
 import Darcs.Patch.Inspect ( PatchInspect )
 import Darcs.Patch.Prim ( PrimPatchBase, PrimOf, tryShrinkingInverse, PrimPatch )
 import Darcs.Patch.Bundle ( scanBundle, makeBundleN )
-import Darcs.Patch.PatchInfoAnd ( PatchInfoAnd, info,
-                         hopefully, hopefullyM )
+import Darcs.Patch.PatchInfoAnd ( PatchInfoAnd, hopefully )
 import qualified Darcs.Repository.HashedRepo as HashedRepo
                             ( revertTentativeChanges, finalizeTentativeChanges,
                               removeFromTentativeInventory,
@@ -96,7 +97,8 @@
                               applyToTentativePristine,
                               writeTentativeInventory, writeAndReadPatch,
                               addToTentativeInventory,
-                              readRepo, readTentativeRepo, cleanPristine )
+                              readRepo, readTentativeRepo,
+                              readRepoUsingSpecificInventory, cleanPristine )
 import qualified Darcs.Repository.Old as Old
                             ( readOldRepo, revertTentativeChanges, oldRepoFailMsg )
 import Darcs.Flags ( DarcsFlag(Verbose, Quiet,
@@ -108,12 +110,12 @@
 import Darcs.Witnesses.Unsafe ( unsafeCoerceP, unsafeCoercePStart )
 import Darcs.Witnesses.Ordered ( FL(..), RL(..),
                              (:\/:)(..), (:/\:)(..), (:>)(..),
-                             (+>+), lengthFL, dropWhileFL,
+                             (+>+), lengthFL,
                              allFL, filterFLFL,
                              reverseFL, mapFL_FL, concatFL )
 import Darcs.Patch ( RepoPatch, Patchy, merge,
                      listConflictedFiles, listTouchedFiles,
-                     Named, patchcontents,
+                     Named,
                      commuteRL, fromPrims,
                      readPatch,
                      effect, invert,
@@ -122,7 +124,6 @@
                      apply, applyToTree,
                    )
 import Darcs.Patch.Permutations ( commuteWhatWeCanFL, removeFL )
-import Darcs.Patch.Info ( PatchInfo )
 import Darcs.Patch.Set ( PatchSet(..), SealedPatchSet, newset2FL )
 #ifdef GADT_WITNESSES
 import Darcs.Patch.Set ( Origin )
@@ -137,13 +138,14 @@
 import Darcs.Repository.Prefs ( getCaches )
 import Darcs.Lock ( withLock, writeDocBinFile, removeFileMayNotExist,
                     withTempDir, withPermDir )
-import Darcs.Witnesses.Sealed ( Sealed(Sealed), seal, FlippedSeal(FlippedSeal), flipSeal )
+import Darcs.Witnesses.Sealed ( Sealed(Sealed), seal, FlippedSeal(FlippedSeal), flipSeal, mapSeal )
 import Darcs.Repository.InternalTypes( Repository(..), RepoType(..), Pristine(..) )
 import Darcs.Global ( darcsdir )
 
 import System.Mem( performGC )
 
 import qualified Storage.Hashed.Tree as Tree
+import Storage.Hashed.Tree ( Tree )
 import Storage.Hashed.AnchoredPath( anchorPath )
 
 #include "impossible.h"
@@ -331,7 +333,12 @@
 findRepository (_:fs) = findRepository fs
 findRepository [] = maybe (Right ()) id <$> seekRepo
 
-makeNewPending :: forall p C(r u t y). RepoPatch p
+-- TODO: see also Repository.State.readPendingLL ... to be removed after GHC 7.2
+readNewPendingLL :: (RepoPatch p, ApplyState p ~ Tree)
+              => Repository p C(r u t) -> IO (Sealed ((FL p) C(t)))
+readNewPendingLL repo = mapSeal (mapFL_FL fromPrim) `fmap` readNewPending repo
+
+makeNewPending :: forall p C(r u t y). (RepoPatch p, ApplyState p ~ Tree)
                  => Repository p C(r u t) -> FL (PrimOf p) C(t y) -> IO ()
 makeNewPending (Repo _ opts _ _) _ | NoUpdateWorking `elem` opts = return ()
 makeNewPending repo@(Repo r _ _ tp) origp =
@@ -341,7 +348,7 @@
        Sealed sfp <- return $ siftForPending origp
        writeNewPending repo sfp
        cur <- readRecorded repo
-       Sealed p <- readNewPending repo :: IO (Sealed (FL (PrimOf p) C(t)))
+       Sealed p <- readNewPendingLL repo -- :: IO (Sealed (FL (PrimOf p) C(t)))
 -- Warning:  A do-notation statement discarded a result of type Tree.Tree IO.
        _ <- catch (applyToTree p cur) $ \err -> do
          let buggyname = pendingName tp ++ "_buggy"
@@ -376,17 +383,24 @@
 -- seal it.  Instead, update this function to work with type witnesses
 -- by fixing DarcsRepo to match HashedRepo in the handling of
 -- Repository state.
-readRepo :: RepoPatch p => Repository p C(r u t) -> IO (PatchSet p C(Origin r))
+readRepo :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> IO (PatchSet p C(Origin r))
 readRepo repo@(Repo r _ rf _)
     | formatHas HashedInventory rf = HashedRepo.readRepo repo r
     | otherwise = do Sealed ps <- Old.readOldRepo r
                      return $ unsafeCoerceP ps
 
-readTentativeRepo :: RepoPatch p => Repository p C(r u t) -> IO (PatchSet p C(Origin t))
+readTentativeRepo :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> IO (PatchSet p C(Origin t))
 readTentativeRepo repo@(Repo r _ rf _)
     | formatHas HashedInventory rf = HashedRepo.readTentativeRepo repo r
     | otherwise = fail Old.oldRepoFailMsg
 
+readRepoUsingSpecificInventory :: (RepoPatch p, ApplyState p ~ Tree) => String -> Repository p C(r u t)
+  -> IO (PatchSet p C(Origin t))
+readRepoUsingSpecificInventory invPath repo@(Repo r _ rf _)
+    | formatHas HashedInventory rf =
+        HashedRepo.readRepoUsingSpecificInventory invPath repo r
+    | otherwise = fail Old.oldRepoFailMsg
+
 makePatchLazy :: RepoPatch p => Repository p C(r u t) -> PatchInfoAnd p C(x y) -> IO (PatchInfoAnd p C(x y))
 makePatchLazy (Repo r opts rf (DarcsRepository _ c)) p
     | formatHas HashedInventory rf = withCurrentDirectory r $ HashedRepo.writeAndReadPatch c (compression opts) p
@@ -398,12 +412,16 @@
 unrevertUrl :: Repository p C(r u t) -> String
 unrevertUrl (Repo r _ _ (DarcsRepository _ _)) = r ++ "/"++darcsdir++"/patches/unrevert"
 
-applyToWorking :: RepoPatch p => Repository p C(r u t) -> [DarcsFlag] -> FL (PrimOf p) C(u y) -> IO (Repository p C(r y t))
+applyToWorking :: (ApplyState (PrimOf p) ~ Tree, RepoPatch p)
+               => Repository p C(r u t) -> [DarcsFlag] -> FL (PrimOf p) C(u y)
+               -> IO (Repository p C(r y t))
 applyToWorking (Repo r ropts rf (DarcsRepository t c)) opts patch =
-    do withCurrentDirectory r $ if Quiet `elem` opts
-                                then runSilently $ apply patch
-                                else runTolerantly $ apply patch
-       return (Repo r ropts rf (DarcsRepository t c))
+  do
+    unless (formatHas NoWorkingDir rf) $
+      withCurrentDirectory r $ if Quiet `elem` opts
+                               then runSilently $ apply patch
+                               else runTolerantly $ apply patch
+    return (Repo r ropts rf (DarcsRepository t c))
 
 handlePendForAdd :: forall p C(r u t x y). (RepoPatch p)
                     => Repository p C(r u t) -> PatchInfoAnd p C(x y) -> IO ()
@@ -455,11 +473,11 @@
     [] -> return False
     cfs -> if MarkConflicts `elem` opts || AllowConflicts `elem` opts
               || wantExternalMerge opts /= Nothing
-           then do putStrLn "We have conflicts in the following files:"
-                   putStrLn $ unwords cfs
+           then do putDocWith fancyPrinters $ 
+                     redText "We have conflicts in the following files:" $$ text (unwords cfs)
                    return True
-           else do putStrLn "There are conflicts in the following files:"
-                   putStrLn $ unwords cfs
+           else do putDocWith fancyPrinters $
+                     redText "There are conflicts in the following files:" $$ text (unwords cfs)
                    fail $ "Refusing to "++cmd++" patches leading to conflicts.\n"++
                           "If you would rather apply the patch and mark the conflicts,\n"++
                           "use the --mark-conflicts or --allow-conflicts options to "++cmd++"\n"++
@@ -491,7 +509,7 @@
           fromPrims_ :: FL (PrimOf p) C(a b) -> FL p C(a b)
           fromPrims_ = fromPrims
 
-tentativelyAddPatch :: RepoPatch p
+tentativelyAddPatch :: (RepoPatch p, ApplyState p ~ Tree)
                     => Repository p C(r u t) -> Compression -> PatchInfoAnd p C(t y) -> IO (Repository p C(r u y))
 tentativelyAddPatch = tentativelyAddPatch_ UpdatePristine
 
@@ -499,7 +517,7 @@
 
 -- TODO re-add a safety catch for --dry-run? Maybe using a global, like dryRun
 -- :: Bool, with dryRun = unsafePerformIO $ readIORef ...
-tentativelyAddPatch_ :: RepoPatch p
+tentativelyAddPatch_ :: (RepoPatch p, ApplyState p ~ Tree)
                      => UpdatePristine -> Repository p C(r u t) -> Compression
                      -> PatchInfoAnd p C(t y) -> IO (Repository p C(r u y))
 tentativelyAddPatch_ up r@(Repo dir ropts rf (DarcsRepository t c)) compr p =
@@ -514,7 +532,8 @@
                                         handlePendForAdd r p
        return (Repo dir ropts rf (DarcsRepository t c))
 
-applyToTentativePristine :: (Effect q, Patchy q, PrimPatchBase q) => Repository p C(r u t) -> q C(t y) -> IO ()
+applyToTentativePristine :: (ApplyState q ~ Tree, Effect q, Patchy q, PrimPatchBase q)
+                         => Repository p C(r u t) -> q C(t y) -> IO ()
 applyToTentativePristine (Repo dir opts rf (DarcsRepository _ _)) p =
     withCurrentDirectory dir $
     do when (Verbose `elem` opts) $ putDocLn $ text "Applying to pristine..." <+> description p
@@ -559,11 +578,13 @@
             newpend NilFL patch_ = seal patch_
             newpend p     patch_ = seal $ patch_ +>+ p
 
-tentativelyRemovePatches :: RepoPatch p => Repository p C(r u t) -> Compression
+tentativelyRemovePatches :: (RepoPatch p, ApplyState p ~ Tree)
+                         => Repository p C(r u t) -> Compression
                          -> FL (PatchInfoAnd p) C(x t) -> IO (Repository p C(r u x))
 tentativelyRemovePatches = tentativelyRemovePatches_ UpdatePristine
 
-tentativelyRemovePatches_ :: forall p C(r u t x). RepoPatch p => UpdatePristine
+tentativelyRemovePatches_ :: forall p C(r u t x). (RepoPatch p, ApplyState p ~ Tree)
+                          => UpdatePristine
                           -> Repository p C(r u t) -> Compression
                           -> FL (PatchInfoAnd p) C(x t) -> IO (Repository p C(r u x))
 tentativelyRemovePatches_ up repository@(Repo dir ropts rf (DarcsRepository t c)) compr ps =
@@ -580,7 +601,8 @@
         else fail Old.oldRepoFailMsg
       return (Repo dir ropts rf (DarcsRepository t c))
 
-tentativelyReplacePatches :: forall p C(r u t x). RepoPatch p => Repository p C(r u t) -> Compression
+tentativelyReplacePatches :: forall p C(r u t x). (RepoPatch p, ApplyState p ~ Tree)
+                          => Repository p C(r u t) -> Compression
                           -> FL (PatchInfoAnd p) C(x t) -> IO (Repository p C(r u t))
 tentativelyReplacePatches repository compr ps =
     do repository' <- tentativelyRemovePatches_ DontUpdatePristine repository compr ps
@@ -591,7 +613,8 @@
                do r' <- tentativelyAddPatch_ DontUpdatePristine r compr a
                   mapAdd r' as
 
-finalizePending :: RepoPatch p => Repository p C(r u t) -> IO ()
+finalizePending :: (RepoPatch p, ApplyState p ~ Tree)
+                => Repository p C(r u t) -> IO ()
 finalizePending (Repo dir opts _ rt)
     | NoUpdateWorking `elem` opts =
         withCurrentDirectory dir $ removeFileMayNotExist $ (pendingName rt)
@@ -601,7 +624,7 @@
                                 Sealed new_pending <- return $ siftForPending tpend
                                 makeNewPending repository new_pending
 
-finalizeRepositoryChanges :: RepoPatch p => Repository p C(r u t) -> IO ()
+finalizeRepositoryChanges :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> IO ()
 finalizeRepositoryChanges (Repo _ opts _ _)
     | DryRun `elem` opts = bug "finalizeRepositoryChanges called when --dry-run specified"
 finalizeRepositoryChanges repository@(Repo dir opts rf _)
@@ -614,10 +637,10 @@
                                       debugMessage "Done finalizing changes..."
     | otherwise = fail Old.oldRepoFailMsg
 
-testTentative :: RepoPatch p => Repository p C(r u t) -> IO (ExitCode)
+testTentative :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> IO (ExitCode)
 testTentative = testAny withTentative
 
-testRecorded :: RepoPatch p => Repository p C(r u t) -> IO (ExitCode)
+testRecorded :: (RepoPatch p, ApplyState p ~ Tree)  => Repository p C(r u t) -> IO (ExitCode)
 testRecorded = testAny withRecorded
 
 testAny :: RepoPatch p => (Repository p C(r u t)
@@ -671,7 +694,10 @@
                            | otherwise = withSignalsBlocked
 
 data RepoJob a
-    = RepoJob (forall p C(r u) . RepoPatch p => Repository p C(r u r) -> IO a)
+    -- = RepoJob (forall p C(r u) . RepoPatch p => Repository p C(r u r) -> IO a)
+    -- TODO: Unbind Tree from RepoJob, possibly renaming existing RepoJob
+    = RepoJob (forall p C(r u) . (RepoPatch p, ApplyState p ~ Tree, ApplyState (PrimOf p) ~ Tree)
+               => Repository p C(r u r) -> IO a)
     | V1Job (forall C(r u) . Repository (Patch Prim) C(r u r) -> IO a)
     | V2Job (forall C(r u) . Repository (RealPatch Prim) C(r u r) -> IO a)
 
@@ -679,6 +705,7 @@
           -> (forall p C(r u) . RepoPatch p => (Repository p C(r u r) -> IO a) -> (Repository p C(r u r) -> IO a))
           -> RepoJob a
 onRepoJob (RepoJob job) f = RepoJob (f job)
+-- onRepoJob (TreeJob job) f = TreeJob (f job)
 onRepoJob (V1Job job) f = V1Job (f job)
 onRepoJob (V2Job job) f = V2Job (f job)
 
@@ -693,12 +720,14 @@
                  let therepo = Repo dir opts rf (DarcsRepository t c) :: Repository (RealPatch Prim) C(r u r)
                  case repojob of
                    RepoJob job -> job therepo
+                   -- TreeJob job -> job therepo
                    V2Job job -> job therepo
                    V1Job _ -> fail "This repository contains darcs v1 patches, but the command requires darcs v2 patches."
          else do debugMessage $ "Identified darcs-1 repo: " ++ dir
                  let therepo = Repo dir opts rf (DarcsRepository t c) :: Repository (Patch Prim) C(r u r)
                  case repojob of
                    RepoJob job -> job therepo
+                   -- TreeJob job -> job therepo
                    V1Job job -> job therepo
                    V2Job _ -> fail "This repository contains darcs v2 patches, but the command requires darcs v1 patches."
 
@@ -720,7 +749,7 @@
                                 then job repository
                                 else withLock name (revertRepositoryChanges repository >> job repository)
 
-removeFromUnrevertContext :: forall p C(r u t x). RepoPatch p
+removeFromUnrevertContext :: forall p C(r u t x). (RepoPatch p, ApplyState p ~ Tree)
                              => Repository p C(r u t) -> FL (PatchInfoAnd p) C(x t) -> IO ()
 removeFromUnrevertContext repository ps = do
   Sealed bundle <- unrevert_patch_bundle `catchall` (return $ seal (PatchSet NilRL NilRL))
@@ -768,7 +797,7 @@
 -- to a given tag are included in that tag, so less commutation and
 -- history traversal is needed.  This latter issue can become very
 -- important in large repositories.
-optimizeInventory :: RepoPatch p => Repository p C(r u t) -> IO ()
+optimizeInventory :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> IO ()
 optimizeInventory repository@(Repo _ opts rf (DarcsRepository _ c)) =
     do ps <- readRepo repository
        decideHashedOrNormal rf $
@@ -806,7 +835,7 @@
     = mk_dir $ \d -> do createPristineDirectoryTree repository (toFilePath d)
                         f d
 
-withTentative :: forall p a C(r u t). RepoPatch p =>
+withTentative :: forall p a C(r u t). (RepoPatch p, ApplyState p ~ Tree) =>
                  Repository p C(r u t) -> ((AbsolutePath -> IO a) -> IO a)
               -> (AbsolutePath -> IO a) -> IO a
 withTentative (Repo dir opts rf (DarcsRepository _ c)) mk_dir f
diff --git a/src/Darcs/Repository/InternalTypes.hs b/src/Darcs/Repository/InternalTypes.hs
--- a/src/Darcs/Repository/InternalTypes.hs
+++ b/src/Darcs/Repository/InternalTypes.hs
@@ -34,7 +34,8 @@
   | HashedPristine
     deriving ( Show, Eq )
 
-data Repository (p :: * C(-> * -> *)) C(recordedstate unrecordedstate tentativestate) = Repo !String ![DarcsFlag] !RepoFormat !(RepoType p) deriving ( Show )
+data Repository (p :: * C(-> * -> *)) C(recordedstate unrecordedstate tentativestate) =
+  Repo !String ![DarcsFlag] !RepoFormat !(RepoType p) deriving ( Show )
 
 data RepoType (p :: * C(-> * -> *)) = DarcsRepository !Pristine Cache deriving ( Show )
 
diff --git a/src/Darcs/Repository/Merge.hs b/src/Darcs/Repository/Merge.hs
--- a/src/Darcs/Repository/Merge.hs
+++ b/src/Darcs/Repository/Merge.hs
@@ -33,6 +33,7 @@
 import Darcs.Patch
     ( RepoPatch, PrimOf, merge, joinPatches, listTouchedFiles
     , patchcontents, anonymous, fromPrims, effect )
+import Darcs.Patch.Apply ( ApplyState )
 import Darcs.Patch.Depends( merge2FL )
 import Progress( debugMessage )
 import Darcs.ProgressPatches( progressFL )
@@ -46,7 +47,9 @@
     , MakeChanges(..), setTentativePending
     , tentativelyAddPatch_, applyToTentativePristine, UpdatePristine(..) )
 
-tentativelyMergePatches_ :: forall p C(r u t y x). RepoPatch p
+import Storage.Hashed.Tree( Tree )
+
+tentativelyMergePatches_ :: forall p C(r u t y x). (RepoPatch p, ApplyState p ~ Tree)
                          => MakeChanges
                          -> Repository p C(r u t) -> String -> [DarcsFlag]
                          -> FL (PatchInfoAnd p) C(x t) -> FL (PatchInfoAnd p) C(x y)
@@ -63,7 +66,7 @@
      Sealed standard_resolved_pw <- return $ standardResolution pwprim
      debugMessage "Checking for conflicts..."
      unless (AllowConflicts `elem` opts || NoAllowConflicts `elem` opts) $
-            mapM_ backupByCopying $ listTouchedFiles standard_resolved_pw
+       mapM_ backupByCopying $ listTouchedFiles standard_resolved_pw
      debugMessage "Announcing conflicts..."
      have_conflicts <- announceMergeConflicts cmd opts standard_resolved_pw
      debugMessage "Checking for unrecorded conflicts..."
@@ -100,14 +103,14 @@
                              debugMessage "Applying patches to pristine..."
                              applyToTentativePristine repo ps
 
-tentativelyMergePatches :: RepoPatch p
+tentativelyMergePatches :: (RepoPatch p, ApplyState p ~ Tree)
                         => Repository p C(r u t) -> String -> [DarcsFlag]
                         -> FL (PatchInfoAnd p) C(x t) -> FL (PatchInfoAnd p) C(x y)
                         -> IO (Sealed (FL (PrimOf p) C(u)))
 tentativelyMergePatches = tentativelyMergePatches_ MakeChanges
 
 
-considerMergeToWorking :: RepoPatch p
+considerMergeToWorking :: (RepoPatch p, ApplyState p ~ Tree)
                        => Repository p C(r u t) -> String -> [DarcsFlag]
                        -> FL (PatchInfoAnd p) C(x t) -> FL (PatchInfoAnd p) C(x y)
                        -> IO (Sealed (FL (PrimOf p) C(u)))
diff --git a/src/Darcs/Repository/Old.hs b/src/Darcs/Repository/Old.hs
--- a/src/Darcs/Repository/Old.hs
+++ b/src/Darcs/Repository/Old.hs
@@ -127,4 +127,5 @@
        writeBinFile (darcsdir++"/tentative_pristine") ""
 
 oldRepoFailMsg :: String
-oldRepoFailMsg = "ERROR: repository upgrade required, see http://wiki.darcs.net/OF"
+oldRepoFailMsg = "ERROR: repository upgrade required, try `darcs optimize --upgrade`\n"
+              ++ "See http://wiki.darcs.net/OF for more details."
diff --git a/src/Darcs/Repository/Prefs.hs b/src/Darcs/Repository/Prefs.hs
--- a/src/Darcs/Repository/Prefs.hs
+++ b/src/Darcs/Repository/Prefs.hs
@@ -31,7 +31,7 @@
                    getCaches,
                    binariesFileHelp, boringFileHelp,
                    globalCacheDir,
-                   globalPrefsDirDoc
+                   globalPrefsDirDoc,
                  ) where
 
 import System.IO.Error ( isDoesNotExistError )
diff --git a/src/Darcs/Repository/Repair.hs b/src/Darcs/Repository/Repair.hs
--- a/src/Darcs/Repository/Repair.hs
+++ b/src/Darcs/Repository/Repair.hs
@@ -1,7 +1,8 @@
 {-# LANGUAGE CPP, PatternGuards #-}
 
-module Darcs.Repository.Repair ( replayRepository, checkIndex
-                               , RepositoryConsistency(..) )
+module Darcs.Repository.Repair ( replayRepository, checkIndex,
+                                 replayRepositoryInTemp,
+                                 RepositoryConsistency(..) )
        where
 
 import Control.Monad ( when, unless )
@@ -10,15 +11,18 @@
 import Control.Exception ( finally )
 import Data.Maybe ( catMaybes )
 import Data.List ( sort, (\\) )
-import System.Directory ( createDirectoryIfMissing )
-
+import System.Directory ( createDirectoryIfMissing, getCurrentDirectory,
+                          setCurrentDirectory )
 import Darcs.Lock( rmRecursive )
+import Darcs.RepoPath( AbsolutePath, ioAbsolute, toFilePath )
 import Darcs.Patch.PatchInfoAnd ( PatchInfoAnd, info, winfo, WPatchInfo, unWPatchInfo, compareWPatchInfo )
 
 import Darcs.Witnesses.Eq ( EqCheck(..) )
 import Darcs.Witnesses.Ordered ( FL(..), RL(..), lengthFL, reverseFL,
                                  mapRL, nullFL, (:||:)(..) )
 import Darcs.Witnesses.Sealed ( Sealed2(..), Sealed(..), unFreeLeft )
+import Darcs.Patch.Apply( ApplyState )
+import Darcs.Patch.ApplyMonad( ApplyMonad )
 import Darcs.Patch.Repair ( Repair(applyAndTryToFix) )
 import Darcs.Patch.PatchInfoAnd( hopefully )
 import Darcs.Patch.Info ( humanFriendly )
@@ -42,6 +46,7 @@
 import Progress ( debugMessage, beginTedious, endTedious, tediousSize, finishedOneIO )
 import Darcs.Utils ( catchall )
 import Darcs.Global ( darcsdir )
+import Darcs.Lock( withTempDir )
 import Printer ( Doc, putDocLn, text )
 import Darcs.Arguments ( DarcsFlag( Verbose, Quiet ) )
 
@@ -70,7 +75,9 @@
     | IsEq <- winfo o `compareWPatchInfo` o' = c:>:replaceInFL orig ch_rest
     | otherwise = o:>:replaceInFL orig ch
 
-applyAndFix :: forall p C(r u t). RepoPatch p => Repository p C(r u t) -> FL (PatchInfoAnd p) C(Origin r) -> TreeIO (FL (PatchInfoAnd p) C(Origin r), Bool)
+applyAndFix :: forall p C(r u t). (RepoPatch p, ApplyState p ~ Tree)
+            => Repository p C(r u t) -> FL (PatchInfoAnd p) C(Origin r)
+            -> TreeIO (FL (PatchInfoAnd p) C(Origin r), Bool)
 applyAndFix _ NilFL = return (NilFL, True)
 applyAndFix r psin =
     do liftIO $ beginTedious k
@@ -101,7 +108,8 @@
   | BrokenPristine (Tree IO)
   | BrokenPatches (Tree IO) (PatchSet p C(Origin x))
 
-checkUniqueness :: RepoPatch p => (Doc -> IO ()) -> (Doc -> IO ()) -> Repository p C(r u t) -> IO ()
+checkUniqueness :: (RepoPatch p, ApplyState p ~ Tree)
+                => (Doc -> IO ()) -> (Doc -> IO ()) -> Repository p C(r u t) -> IO ()
 checkUniqueness putVerbose putInfo repository =
     do putVerbose $ text "Checking that patch names are unique..."
        r <- readRepo repository
@@ -118,13 +126,14 @@
           hd (x1:x2:xs) | x1 == x2 = Just x1
                         | otherwise = hd (x2:xs)
 replayRepository' ::
-    forall p C(r u t) . (RepoPatch p)
-               => Repository p C(r u t) -> [DarcsFlag] -> IO (RepositoryConsistency p C(r))
-replayRepository' repo opts = do
-  let putVerbose s = when (Verbose `elem` opts) $ putDocLn s
+    forall p C(r u t) . (RepoPatch p, ApplyState p ~ Tree)
+               => AbsolutePath -> Repository p C(r u t) -> [DarcsFlag] -> IO (RepositoryConsistency p C(r))
+replayRepository' whereToReplay' repo opts = do
+  let whereToReplay = toFilePath whereToReplay'
+      putVerbose s = when (Verbose `elem` opts) $ putDocLn s
       putInfo s = when (not $ Quiet `elem` opts) $ putDocLn s
   checkUniqueness putVerbose putInfo repo
-  createDirectoryIfMissing False $ darcsdir ++ "/pristine.hashed"
+  createDirectoryIfMissing False whereToReplay
   putVerbose $ text "Reading recorded state..."
   pris <- readRecorded repo `catch` \_ -> return emptyTree
   putVerbose $ text "Applying patches..."
@@ -132,7 +141,8 @@
   debugMessage "Fixing any broken patches..."
   let psin = newset2FL patches
       repair = applyAndFix repo psin
-  ((ps, patches_ok), newpris) <- hashedTreeIO repair emptyTree "_darcs/pristine.hashed"
+
+  ((ps, patches_ok), newpris) <- hashedTreeIO repair emptyTree whereToReplay
   debugMessage "Done fixing broken patches..."
   let newpatches = PatchSet (reverseFL ps) NilRL
 
@@ -159,13 +169,26 @@
        current <- readHashedPristineRoot r
        cleanHashdir c HashedPristineDir $ catMaybes [current]
 
-replayRepository :: (RepoPatch p) => Repository p C(r u t) -> [DarcsFlag] -> (RepositoryConsistency p C(r) -> IO a) -> IO a
-replayRepository r opt f = run `finally` cleanupRepositoryReplay r
+replayRepositoryInTemp :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> [DarcsFlag]
+                          -> IO (RepositoryConsistency p C(r))
+replayRepositoryInTemp r opt = do
+  repodir <- getCurrentDirectory
+  withTempDir "darcs-check" $ \tmpDir -> do
+    setCurrentDirectory repodir
+    replayRepository' tmpDir r opt
+
+replayRepository :: (RepoPatch p, ApplyState p ~ Tree)
+                 => Repository p C(r u t) -> [DarcsFlag]
+                 -> (RepositoryConsistency p C(r) -> IO a) -> IO a
+replayRepository r opt f = do
+  run `finally` cleanupRepositoryReplay r
     where run = do
-            st <- replayRepository' r opt
+            createDirectoryIfMissing False "_darcs/pristine.hashed"
+            hashedPristine <- ioAbsolute "_darcs/pristine.hashed"
+            st <- replayRepository' hashedPristine r opt
             f st
 
-checkIndex :: (RepoPatch p) => Repository p C(r u t) -> Bool -> IO Bool
+checkIndex :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> Bool -> IO Bool
 checkIndex repo quiet = do
   index <- updateIndex =<< readIndex repo
   pristine <- expand =<< readRecordedAndPending repo
diff --git a/src/Darcs/Repository/State.hs b/src/Darcs/Repository/State.hs
--- a/src/Darcs/Repository/State.hs
+++ b/src/Darcs/Repository/State.hs
@@ -35,27 +35,28 @@
 import Prelude hiding ( filter )
 import Control.Monad( when )
 import Control.Applicative( (<$>) )
-import Data.Maybe( isJust )
+import Data.Maybe( isJust, isNothing )
 import Data.List( union )
-import Text.Regex( matchRegex )
+import Text.Regex( mkRegex, matchRegex )
 
 import System.Directory( removeFile, doesFileExist, doesDirectoryExist, renameFile )
 import System.FilePath ( (</>) )
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BSC
 
-import Darcs.Patch ( RepoPatch, PrimOf, applyToTree, applyToFilepaths
-                   , sortCoalesceFL )
-import Darcs.Witnesses.Ordered ( FL(..), (+>+) )
-import Darcs.Witnesses.Eq ( EqCheck(IsEq) )
+import Darcs.Patch ( RepoPatch, PrimOf, sortCoalesceFL, fromPrim, effect )
+import Darcs.Patch.Apply ( ApplyState, applyToTree, applyToFilepaths )
+import Darcs.Witnesses.Ordered ( FL(..), (+>+), mapFL_FL )
+import Darcs.Witnesses.Eq ( EqCheck(IsEq, NotEq) )
 import Darcs.Witnesses.Unsafe ( unsafeCoerceP )
-import Darcs.Witnesses.Sealed ( Sealed(Sealed), seal, unFreeLeft )
+import Darcs.Witnesses.Sealed ( Sealed(Sealed), seal, unFreeLeft, mapSeal )
 import Darcs.Diff ( treeDiff )
 import Darcs.Flags ( UseIndex(..), ScanKnown(..) )
 import Darcs.Global ( darcsdir )
 import Darcs.Utils ( filterPaths )
 
-import Darcs.Repository.InternalTypes ( Repository )
+import Darcs.Repository.InternalTypes ( Repository(..) )
+import Darcs.Repository.Format(formatHas, RepoProperty(NoWorkingDir))
 import qualified Darcs.Repository.LowLevel as LowLevel
 import Darcs.Repository.Prefs ( filetypeFunction, boringRegexps )
 
@@ -74,21 +75,35 @@
 
 newtype TreeFilter m = TreeFilter { applyTreeFilter :: forall tr . FilterTree tr m => tr m -> tr m }
 
+-- TODO: We wrap the pending patch inside RepoPatch here, to avoid the
+-- requirement to propagate an (ApplyState (PrimOf p) ~ ApplyState p)
+-- constraint everywhere. When we have GHC 7.2 as a minimum requirement, we can
+-- lift this constraint into RepoPatch superclass context and remove this hack.
+readPendingLL :: (RepoPatch p, ApplyState p ~ Tree)
+              => Repository p C(r u t) -> IO (Sealed ((FL p) C(t)))
+readPendingLL repo = mapSeal (mapFL_FL fromPrim) `fmap` LowLevel.readPending repo
+
 -- | From a repository and a list of SubPath's, construct a filter that can be
 -- used on a Tree (recorded or unrecorded state) of this repository. This
 -- constructed filter will take pending into account, so the subpaths will be
 -- translated correctly relative to pending move patches.
-restrictSubpaths :: (RepoPatch p) => Repository p C(r u t) -> [SubPath]
+restrictSubpaths :: forall p m C(r u t). (RepoPatch p, ApplyState p ~ Tree)
+                 => Repository p C(r u t) -> [SubPath]
                  -> IO (TreeFilter m)
 restrictSubpaths repo subpaths = do
-  Sealed pending <- LowLevel.readPending repo
+  Sealed pending <- readPendingLL repo
   let paths = map (fn2fp . sp2fn) subpaths
       paths' = paths `union` applyToFilepaths pending paths
       anchored = map floatPath paths'
-      restrictPaths :: FilterTree t m => t m -> t m
+      restrictPaths :: FilterTree tree m => tree m -> tree m
       restrictPaths = filter (filterPaths anchored)
   return (TreeFilter restrictPaths)
 
+-- |Is the given path in (or equal to) the _darcs metadata directory?
+inDarcsDir :: AnchoredPath -> Bool
+inDarcsDir (AnchoredPath (Name x:_)) | x == BSC.pack darcsdir = True
+inDarcsDir _ = False
+
 -- | Construct a Tree filter that removes any boring files the Tree might have
 -- contained. Additionally, you should (in most cases) pass an (expanded) Tree
 -- that corresponds to the recorded content of the repository. This is
@@ -103,7 +118,7 @@
 restrictBoring :: forall m . Tree m -> IO (TreeFilter m)
 restrictBoring guide = do
   boring <- boringRegexps
-  let boring' (AnchoredPath (Name x:_)) | x == BSC.pack darcsdir = False
+  let boring' p | inDarcsDir p = False
       boring' p = not $ any (\rx -> isJust $ matchRegex rx p') boring
           where p' = anchorPath "" p
       restrictTree :: FilterTree t m => t m -> t m
@@ -112,6 +127,11 @@
                                         _ -> True
   return (TreeFilter restrictTree)
 
+-- | Construct a Tree filter that removes any darcs metadata files the
+-- Tree might have contained.
+restrictDarcsdir :: forall m . TreeFilter m
+restrictDarcsdir = TreeFilter $ filter $ \p _ -> not (inDarcsDir p)
+
 -- | For a repository and an optional list of paths (when Nothing, take
 -- everything) compute a (forward) list of prims (i.e. a patch) going from the
 -- recorded state of the repository (pristine) to the unrecorded state of the
@@ -132,34 +152,52 @@
 -- is very inefficient, although in extremely rare cases, the index could go
 -- out of sync (file is modified, index is updated and file is modified again
 -- within a single second).
-unrecordedChanges :: forall p C(r u t) . (RepoPatch p)
+unrecordedChanges :: forall p C(r u t) . (RepoPatch p, ApplyState p ~ Tree)
                   => (UseIndex, ScanKnown) -> Repository p C(r u t)
                   -> Maybe [SubPath] -> IO (FL (PrimOf p) C(t u))
+unrecordedChanges _ r@(Repo _ _ rf _) _
+  | (formatHas NoWorkingDir rf) = do
+    IsEq <- return $ workDirLessRepoWitness r
+    return NilFL
 unrecordedChanges (useidx, scan) repo mbpaths = do
-  (all_current, Sealed (pending :: FL (PrimOf p) C(t x))) <- readPending repo
+  (all_current, Sealed (pending :: FL p C(t x))) <- readPending repo
 
   relevant <- maybe (return $ TreeFilter id) (restrictSubpaths repo) mbpaths
   let getIndex = I.updateIndex =<< (applyTreeFilter relevant <$> readIndex repo)
       current = applyTreeFilter relevant all_current
 
-  working <- case (scan, useidx) of
-               (ScanKnown, UseIndex) -> getIndex
-               (ScanKnown, IgnoreIndex) -> do
-                 guide <- expand current
-                 applyTreeFilter relevant <$> restrict guide <$> readPlainTree "."
-               (ScanAll, _) -> do
-                 index <- getIndex
-                 nonboring <- restrictBoring index
-                 plain <- applyTreeFilter relevant <$> applyTreeFilter nonboring <$> readPlainTree "."
-                 return $ case useidx of
-                   UseIndex -> plain `overlay` index
-                   IgnoreIndex -> plain
+  index <- getIndex
+  working <- applyTreeFilter restrictDarcsdir <$> case scan of
+    ScanKnown -> case useidx of
+      UseIndex -> getIndex
+      IgnoreIndex -> do
+        guide <- expand current
+        applyTreeFilter relevant <$> restrict guide <$> readPlainTree "."
+    ScanAll -> do
+      nonboring <- restrictBoring index
+      plain <- applyTreeFilter relevant <$> applyTreeFilter nonboring <$> readPlainTree "."
+      return $ case useidx of
+        UseIndex -> plain `overlay` index
+        IgnoreIndex -> plain
+    ScanBoring -> do
+      plain <- applyTreeFilter relevant <$> readPlainTree "."
+      return $ case useidx of
+        UseIndex -> plain `overlay` index
+        IgnoreIndex -> plain
 
   ft <- filetypeFunction
   Sealed (diff :: FL (PrimOf p) C(x y)) <- (unFreeLeft `fmap` treeDiff ft current working) :: IO (Sealed (FL (PrimOf p) C(x)))
   IsEq <- return (unsafeCoerceP IsEq) :: IO (EqCheck C(y u))
-  return $ sortCoalesceFL (pending +>+ diff)
+  return $ sortCoalesceFL (effect pending +>+ diff)
 
+-- | Witnesses the fact that in the absence of a working directory, we
+-- pretend that the working dir updates magically to the tentative state.
+workDirLessRepoWitness :: Repository p C(r u t)
+                          -> (EqCheck C(u t))
+workDirLessRepoWitness r@(Repo _ _ rf _) | formatHas NoWorkingDir rf =
+  unsafeCoerceP IsEq
+                                         | otherwise = NotEq
+
 -- | Obtains a Tree corresponding to the "recorded" state of the repository:
 -- this is the same as the pristine cache, which is the same as the result of
 -- applying all the repository's patches to an empty directory.
@@ -168,7 +206,7 @@
 -- no-pristine case, as that requires replaying patches. Cf. 'readDarcsHashed'
 -- and 'readPlainTree' in hashed-storage that are used to do the actual 'Tree'
 -- construction.
-readRecorded :: (RepoPatch p) => Repository p C(r u t) -> IO (Tree IO)
+readRecorded :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> IO (Tree IO)
 readRecorded _repo = do
   let h_inventory = darcsdir </> "hashed_inventory"
   hashed <- doesFileExist h_inventory
@@ -196,7 +234,8 @@
 -- Limiting the query may be more efficient, since hashes on the uninteresting
 -- parts of the index do not need to go through an up-to-date check (which
 -- involves a relatively expensive lstat(2) per file.
-readUnrecorded :: (RepoPatch p) => Repository p C(r u t) -> Maybe [SubPath] -> IO (Tree IO)
+readUnrecorded :: (RepoPatch p, ApplyState p ~ Tree)
+               => Repository p C(r u t) -> Maybe [SubPath] -> IO (Tree IO)
 readUnrecorded repo mbpaths = do
   relevant <- maybe (return $ TreeFilter id) (restrictSubpaths repo) mbpaths
   readIndex repo >>= I.updateIndex . applyTreeFilter relevant
@@ -209,15 +248,14 @@
 readWorking = expand =<< (nodarcs `fmap` readPlainTree ".")
   where nodarcs = Tree.filter (\(AnchoredPath (Name x:_)) _ -> x /= BSC.pack "_darcs")
 
-readRecordedAndPending :: (RepoPatch p) => Repository p C(r u t) -> IO (Tree IO)
-readRecordedAndPending repo = do
-  pristine <- readRecorded repo
-  Sealed pending <- snd `fmap` readPending repo
-  applyToTree pending pristine
+readRecordedAndPending :: (RepoPatch p, ApplyState p ~ Tree)
+                       => Repository p C(r u t) -> IO (Tree IO)
+readRecordedAndPending repo = fst `fmap` readPending repo
 
-readPending :: (RepoPatch p) => Repository p C(r u t) -> IO (Tree IO, Sealed (FL (PrimOf p) C(t)))
+readPending :: (RepoPatch p, ApplyState p ~ Tree)
+            => Repository p C(r u t) -> IO (Tree IO, Sealed (FL p C(t)))
 readPending repo =
-  do Sealed pending <- LowLevel.readPending repo
+  do Sealed pending <- readPendingLL repo
      pristine <- readRecorded repo
      catch ((\t -> (t, seal pending)) `fmap` applyToTree pending pristine) $ \ err -> do
        putStrLn $ "Yikes, pending has conflicts! " ++ show err
@@ -235,7 +273,7 @@
 invalidateIndex _ = do
   BS.writeFile "_darcs/index_invalid" BS.empty
 
-readIndex :: (RepoPatch p) => Repository p C(r u t) -> IO I.Index
+readIndex :: (RepoPatch p, ApplyState p ~ Tree) => Repository p C(r u t) -> IO I.Index
 readIndex repo = do
   invalid <- doesFileExist "_darcs/index_invalid"
   exist <- doesFileExist "_darcs/index"
diff --git a/src/Darcs/Resolution.hs b/src/Darcs/Resolution.hs
--- a/src/Darcs/Resolution.hs
+++ b/src/Darcs/Resolution.hs
@@ -33,7 +33,8 @@
 import Darcs.Diff( treeDiff )
 import Darcs.Patch ( PrimOf, PrimPatch, RepoPatch, joinPatches, resolveConflicts,
                      applyToFilepaths, patchcontents,
-                     invert, listConflictedFiles, commute, applyToTree )
+                     invert, listConflictedFiles, commute, applyToTree, fromPrim )
+import Darcs.Patch.Apply( ApplyState )
 import Darcs.RepoPath ( toFilePath )
 import Darcs.Witnesses.Ordered ( FL(..), RL(..), (:>)(..), (+>+),
                              mapFL_FL, reverseRL )
@@ -70,10 +71,14 @@
               Nothing -> doml mp ps -- This shouldn't happen for "good" resolutions.
           doml mp [] = Sealed mp
 
-externalResolution :: RepoPatch p => Tree.Tree IO -> String -> FL (PrimOf p) C(x y) -> FL (PrimOf p) C(x z)
+externalResolution :: forall p C(x y z a). (RepoPatch p, ApplyState p ~ Tree.Tree)
+                   => Tree.Tree IO -> String -> FL (PrimOf p) C(x y) -> FL (PrimOf p) C(x z)
                     -> FL p C(y a)
                     -> IO (Sealed (FL (PrimOf p) C(a)))
-externalResolution s1 c p1 p2 pmerged = do
+externalResolution s1 c p1_prim p2_prim pmerged = do
+ -- TODO: remove the following two once we can rely on GHC 7.2 / superclass equality
+ let p1 :: FL p C(x y) = mapFL_FL fromPrim p1_prim
+     p2 :: FL p C(x z) = mapFL_FL fromPrim p2_prim
  sa <- applyToTree (invert p1) s1
  sm <- applyToTree pmerged s1
  s2 <- applyToTree p2 sa
diff --git a/src/Darcs/RunCommand.hs b/src/Darcs/RunCommand.hs
--- a/src/Darcs/RunCommand.hs
+++ b/src/Darcs/RunCommand.hs
@@ -50,14 +50,13 @@
 import Darcs.Commands.GZCRCs ( doCRCWarnings )
 import Darcs.Global ( atexit )
 import Darcs.External ( viewDoc )
-import Darcs.Global ( setDebugMode, setSshControlMasterDisabled,
-                      setTimingsMode )
+import Darcs.Global ( setDebugMode, setTimingsMode )
 import Darcs.Match ( checkMatchSyntax )
 import Progress ( setProgressMode )
 import Darcs.RepoPath ( getCurrentDirectory )
 import Darcs.Test ( runPosthook, runPrehook )
 import Darcs.Utils ( formatPath )
-import Data.List ( intersperse )
+import Data.List ( intercalate )
 import Printer ( text )
 import URL ( setDebugHTTP, disableHTTPPipelining )
 
@@ -134,7 +133,6 @@
                when (DebugHTTP `elem` os) setDebugHTTP
                when (Quiet `elem` os) $ setProgressMode False
                when (NoHTTPPipelining `elem` os) $ disableHTTPPipelining
-               unless (SSHControlMaster `elem` os) setSshControlMasterDisabled
                unless (Quiet `elem` os) $ atexit $ doCRCWarnings (Verbose `elem` os)
                -- actually run the command and its hooks
                preHookExitCode <- runPrehook os here
@@ -153,7 +151,7 @@
   return $ already ++ defaults
 
 getOptionsOptions :: [OptDescr DarcsFlag] -> String
-getOptionsOptions = concat . intersperse "\n" . concatMap goo
+getOptionsOptions = intercalate "\n" . concatMap goo
  where
   goo (Option _ os _ _) = map ("--"++) os
 
diff --git a/src/Darcs/SelectChanges.hs b/src/Darcs/SelectChanges.hs
--- a/src/Darcs/SelectChanges.hs
+++ b/src/Darcs/SelectChanges.hs
@@ -41,6 +41,7 @@
                      invert, listTouchedFiles,
                      commuteFLorComplain, fromPrims, anonymous )
 import Darcs.Patch.Set ( newset2RL )
+import Darcs.Patch.Apply( ApplyState )
 import qualified Darcs.Patch ( thing, things )
 import Darcs.Patch.Split ( Splitter(..) )
 import Darcs.Witnesses.Ordered ( FL(..), RL(..), (:>)(..), (:||:)(..),
@@ -48,7 +49,7 @@
                        spanFL, spanFL_M, reverseFL, (+<+), mapFL, filterFL )
 import Darcs.Witnesses.WZipper( FZipper(..), left, right
                               , rightmost
-                              , toEnd)
+                              , toEnd, toStart)
 import Darcs.Patch.Choices ( PatchChoices, patchChoices,
                              patchChoicesTpsSub,
                              forceFirst, forceLast, makeUncertain, tag,
@@ -73,6 +74,7 @@
 import Darcs.Utils ( askUser, promptChar, PromptConfig(..) )
 import Darcs.Lock ( editText )
 import Printer ( prefix, putDocLn )
+import Storage.Hashed.Tree( Tree )
 
 -- | When asking about patches, we either ask about them in
 -- oldest-first or newest first (with respect to the current ordering
@@ -178,7 +180,7 @@
 runSelection = runReaderT
 
 -- | Select patches from a @FL@.
-selectChanges :: forall p C(x y) . Patchy p =>
+selectChanges :: forall p C(x y) . (Patchy p, ApplyState p ~ Tree) =>
                 WhichChanges -> FL p C(x y)
                              -> PatchSelection p C(x y)
 selectChanges First = sc1 First
@@ -191,7 +193,7 @@
                              >=> sc1 LastReversed
                              >=> return . invertC
 
-sc1 :: forall p C(x y) . Patchy p =>
+sc1 :: forall p C(x y) . (Patchy p, ApplyState p ~ Tree) =>
                 WhichChanges -> FL p C(x y)
                              -> PatchSelection p C(x y)
 sc1 whch =
@@ -240,8 +242,9 @@
 keysFor = concatMap (map kp)
 
 -- | The function for selecting a patch to amend record. Read at your own risks.
-withSelectedPatchFromRepo :: forall p C(r u t). RepoPatch p => String -> Repository p C(r u t) -> [DarcsFlag]
-                              -> (FORALL(a) (FL (PatchInfoAnd p) :> PatchInfoAnd p) C(a r) -> IO ()) -> IO ()
+withSelectedPatchFromRepo :: forall p C(r u t). (RepoPatch p, ApplyState p ~ Tree)
+                          => String -> Repository p C(r u t) -> [DarcsFlag]
+                          -> (FORALL(a) (FL (PatchInfoAnd p) :> PatchInfoAnd p) C(a r) -> IO ()) -> IO ()
 withSelectedPatchFromRepo jn repository o job = do
     p_s <- readRepo repository
     sp <- wspfr jn (matchAPatchread o)
@@ -253,7 +256,8 @@
 -- | This ensures that the selected patch commutes freely with the skipped patches, including pending
 -- and also that the skipped sequences has an ending context that matches the recorded state, z,
 -- of the repository.
-wspfr :: RepoPatch p => String -> (FORALL(a b) (PatchInfoAnd p) C(a b) -> Bool)
+wspfr :: (RepoPatch p, ApplyState p ~ Tree)
+      => String -> (FORALL(a b) (PatchInfoAnd p) C(a b) -> Bool)
       -> RL (PatchInfoAnd p) C(x y) -> FL (PatchInfoAnd p) C(y u)
       -> IO (Maybe (FlippedSeal (FL (PatchInfoAnd p) :> (PatchInfoAnd p)) C(u)))
 wspfr _ _ NilRL _ = return Nothing
@@ -270,6 +274,7 @@
           basic_options =
                     [[ KeyPress 'y' (jn++" this patch")
                      , KeyPress 'n' ("don't "++jn++" it")
+                     , KeyPress 'k' "back up to previous patch"
                     ]]
           advanced_options =
                     [[ KeyPress 'v' "view this patch in full"
@@ -286,6 +291,9 @@
       case yorn of
         'y' -> return $ Just $ flipSeal $ skipped' :> p'
         'n' -> wspfr jn matches pps (p:>:skipped)
+        'k' -> case skipped of
+                  NilFL -> repeat_this
+                  (prev :>: skipped') -> wspfr jn matches (prev :<: p :<: pps) skipped'
         'v' -> printPatch p >> repeat_this
         'p' -> printPatchPager p >> repeat_this
         'x' -> do putDocLn $ prefix "    " $ summary p
@@ -348,7 +356,7 @@
 
 -- | Selects the patches matching the match criterion, and puts them first or last
 -- according to whch, while respecting any dependencies.
-patchesToConsider :: Patchy p
+patchesToConsider :: (Patchy p, ApplyState p ~ Tree)
                      => WhichChanges
                      -> FL p C(x y)
                      -> Reader (PatchSelectionContext p) (PatchChoices p C(x y))
@@ -454,7 +462,8 @@
 optionsNav :: String -> [KeyPress]
 optionsNav aThing =
     [ KeyPress 'j' ("skip to next "++ aThing)
-    , KeyPress 'k' ("back up to previous "++ aThing) ]
+    , KeyPress 'k' ("back up to previous "++ aThing)
+    , KeyPress 'o' ("start over from first " ++ aThing)]
 
 optionsSplit :: Maybe (Splitter a) -> String -> [KeyPress]
 optionsSplit split aThing
@@ -618,6 +627,12 @@
 skipAll = do
   modify $ \isc -> isc {tps = toEnd $ tps isc}
 
+backAll :: forall p C(x y) . Patchy p =>
+          InteractiveSelectionM p C(x y) ()
+backAll = do
+  modify $ \isc -> isc {tps = toStart $ tps isc
+                       ,current = 0}
+
 isSingleFile :: Patchy p => p C(x y) -> Bool
 isSingleFile p = length (listTouchedFiles p) == 1
 
@@ -706,6 +721,7 @@
                'l' -> printSelected whichch >> showCur whichch
                'x' -> liftIO $ unseal2 printSummary reprCur
                'd' -> skipAll
+               'o' -> backAll >> showCur whichch
                'a' ->
                    do
                      askConfirmation
@@ -754,6 +770,7 @@
                                    n ps_done []
                          _ -> textView o n_max
                                   (n+1) (p:ps_done) ps_todo'
+        first_patch = textView o n_max 0 [] (ps_done++ps_todo)
         options_yn =
           [ KeyPress 'y' "view this patch and go to the next"
           , KeyPress 'n' "skip to the next patch" ]
@@ -766,6 +783,7 @@
           [ KeyPress 'q' "quit view changes"
           , KeyPress 'k' "back up to previous patch"
           , KeyPress 'j' "skip to next patch"
+          , KeyPress 'o' "start over from the first patch"
           , KeyPress 'c' "count total patch number" ]
         basicOptions = [ options_yn ]
         advancedOptions =
@@ -787,6 +805,7 @@
             'q' -> exitWith ExitSuccess
             'k' -> prev_patch
             'j' -> next_patch
+            'o' -> first_patch
             'c' -> textView o
                        count_n_max n ps_done ps_todo
             _   -> do putStrLn $ helpFor "view changes" basicOptions advancedOptions
@@ -843,7 +862,7 @@
 
 -- |Optionally remove any patches (+dependencies) from a sequence that
 -- conflict with the recorded or unrecorded changes in a repo
-filterOutConflicts :: RepoPatch p
+filterOutConflicts :: (RepoPatch p, ApplyState p ~ Tree)
                    => [DarcsFlag]                                    -- ^Command-line options. Only 'SkipConflicts' is
                                                                      -- significant; filtering will happen iff it is present
                    -> RL (PatchInfoAnd p) C(x t)                     -- ^Recorded patches from repository, starting from
diff --git a/src/Darcs/Ssh.hs b/src/Darcs/Ssh.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Ssh.hs
@@ -0,0 +1,195 @@
+{-# LANGUAGE CPP, ForeignFunctionInterface #-}
+
+module Darcs.Ssh (
+  copySSH, SSHCmd(..), getSSH,
+  environmentHelpSsh, environmentHelpScp, environmentHelpSshPort,
+  remoteDarcs
+  ) where
+
+import Prelude hiding ( lookup, catch )
+import qualified Ratified( hGetContents )
+
+import System.Exit ( ExitCode(..) )
+import System.Environment ( getEnv )
+#ifndef WIN32
+import System.Posix.Process ( getProcessID )
+#else
+import Darcs.Utils ( showHexLen )
+import Data.Bits ( (.&.) )
+import System.Random ( randomIO )
+#endif
+import System.IO ( Handle, hSetBinaryMode, hPutStrLn, hGetLine, hFlush )
+import System.IO.Unsafe ( unsafePerformIO )
+import System.Directory ( doesFileExist, createDirectoryIfMissing )
+import Control.Monad ( when )
+import System.Process ( runInteractiveProcess )
+
+import Data.Map ( Map, empty, insert, lookup )
+import Data.IORef ( IORef, newIORef, readIORef, modifyIORef )
+
+import Darcs.SignalHandler ( catchNonSignal )
+import Darcs.Utils ( breakCommand, prettyException, catchall )
+import Darcs.Global ( atexit, withDebugMode
+                    , defaultSsh, SshSettings
+                    )
+import Darcs.Lock ( tempdirLoc, removeFileMayNotExist )
+import Darcs.URL (SshFilePath(..), urlOf)
+import Exec ( exec, Redirects, Redirect(..), )
+import Progress ( withoutProgress, debugMessage, debugFail )
+import Darcs.Flags( RemoteDarcs(..) )
+
+import qualified Data.ByteString as B (ByteString, hGet, writeFile )
+import qualified Darcs.Global as Settings
+
+{-# NOINLINE sshConnections #-}
+sshConnections :: IORef (Map String (Maybe Connection))
+sshConnections = unsafePerformIO $ newIORef empty
+
+data Connection = C { inp :: !Handle, out :: !Handle, err :: !Handle, deb :: String -> IO () }
+
+-- | @withSSHConnection rdarcs destination withconnection withoutconnection@
+-- performs an action on a remote host. If we are already connected to @destination@,
+-- then it does @withconnection@, else @withoutconnection@.
+withSSHConnection :: String -> SshFilePath -> (Connection -> IO a) -> IO a -> IO a
+withSSHConnection rdarcs repoid withconnection withoutconnection =
+    withoutProgress $
+    do cs <- readIORef sshConnections
+       case lookup (sshUhost repoid) (cs :: Map String (Maybe Connection)) of
+         Just Nothing -> withoutconnection
+         Just (Just c) -> withconnection c
+         Nothing ->
+           do mc <- do (ssh,sshargs_) <- getSSH SSH
+                       let sshargs = sshargs_ ++ [sshUhost repoid, rdarcs,
+                                                  "transfer-mode","--repodir",sshRepo repoid]
+                       debugMessage $ unwords (ssh : sshargs)
+                       (i,o,e,_) <- runInteractiveProcess ssh sshargs Nothing Nothing
+                       hSetBinaryMode i True
+                       hSetBinaryMode o True
+                       l <- hGetLine o
+                       if l == "Hello user, I am darcs transfer mode"
+                           then return ()
+                           else debugFail "Couldn't start darcs transfer-mode on server"
+                       let c = C { inp = i, out = o, err = e,
+                                   deb = \s -> debugMessage ("with ssh (transfer-mode) " ++ sshUhost repoid ++ " " ++ s) }
+                       modifyIORef sshConnections (insert (sshUhost repoid) (Just c))
+                       return $ Just c
+                    `catchNonSignal`
+                            \e -> do debugMessage $ "Failed to start ssh connection:\n    "++
+                                                    prettyException e
+                                     severSSHConnection repoid
+                                     debugMessage $ unlines $
+                                         [ "NOTE: the server may be running a version of darcs prior to 2.0.0."
+                                         , ""
+                                         , "Installing darcs 2 on the server will speed up ssh-based commands."
+                                         ]
+                                     return Nothing
+              maybe withoutconnection withconnection mc
+
+severSSHConnection :: SshFilePath -> IO ()
+severSSHConnection x = do debugMessage $ "Severing ssh failed connection to "++(sshUhost x)
+                          modifyIORef sshConnections (insert (urlOf x) Nothing)
+
+grabSSH :: SshFilePath -> Connection -> IO B.ByteString
+grabSSH dest c = do
+  debugMessage $ "grabSSH dest=" ++ urlOf dest
+  let failwith e = do severSSHConnection dest
+                        -- hGetContents is ok here because we're
+                        -- only grabbing stderr, and we're also
+                        -- about to throw the contents.
+                      eee <- Ratified.hGetContents (err c)
+                      debugFail $ e ++ " grabbing ssh file "++
+                        urlOf dest++"/"++ file ++"\n"++eee
+      file = sshFile dest
+  deb c $ "get "++ file
+  hPutStrLn (inp c) $ "get " ++ file
+  hFlush (inp c)
+  l2 <- hGetLine (out c)
+  if l2 == "got "++file
+    then do showlen <- hGetLine (out c)
+            case reads showlen of
+              [(len,"")] -> B.hGet (out c) len
+              _ -> failwith "Couldn't get length"
+    else if l2 == "error "++file
+         then do e <- hGetLine (out c)
+                 case reads e of
+                   (msg,_):_ -> debugFail $ "Error reading file remotely:\n"++msg
+                   [] -> failwith "An error occurred"
+         else failwith "Error"
+
+remoteDarcs :: RemoteDarcs -> String
+remoteDarcs DefaultRemoteDarcs = "darcs"
+remoteDarcs (RemoteDarcs x) = x
+
+copySSH :: RemoteDarcs -> SshFilePath -> FilePath -> IO ()
+copySSH remote dest to | rdarcs <- remoteDarcs remote = do
+  debugMessage $ "copySSH file: " ++ urlOf dest
+  withSSHConnection rdarcs dest (\c -> grabSSH dest c >>= B.writeFile to) $
+              do let u = escape_dollar $ urlOf dest
+                 (scp, args) <- getSSH SCP
+                 r <- exec scp (args ++ [u, to]) (AsIs,AsIs,AsIs)
+                 when (r /= ExitSuccess) $
+                      debugFail $ "(scp) failed to fetch: " ++ u
+    where {- '$' in filenames is troublesome for scp, for some reason.. -}
+          escape_dollar :: String -> String
+          escape_dollar = concatMap tr
+           where tr '$' = "\\$"
+                 tr c = [c]
+
+-- ---------------------------------------------------------------------
+-- older ssh helper functions
+-- ---------------------------------------------------------------------
+
+data SSHCmd = SSH | SCP | SFTP
+
+fromSshCmd :: SshSettings -> SSHCmd -> String
+fromSshCmd s SSH  = Settings.ssh s
+fromSshCmd s SCP  = Settings.scp s
+fromSshCmd s SFTP = Settings.sftp s
+
+-- | Return the command and arguments needed to run an ssh command
+--   First try the appropriate darcs environment variable and SSH_PORT
+--   defaulting to "ssh" and no specified port.
+getSSH :: SSHCmd -> IO (String, [String])
+getSSH cmd =
+ do -- port
+    port <- (portFlag cmd `fmap` getEnv "SSH_PORT") `catchall` return []
+    let (ssh, ssh_args) = breakCommand command
+    --
+    return (ssh, ssh_args ++ port)
+    where
+     command = fromSshCmd defaultSsh cmd
+     portFlag SSH  x = ["-p", x]
+     portFlag SCP  x = ["-P", x]
+     portFlag SFTP x = ["-oPort="++x]
+
+environmentHelpSsh :: ([String], [String])
+environmentHelpSsh = (["DARCS_SSH"], [
+ "Repositories of the form [user@]host:[dir] are taken to be remote",
+ "repositories, which Darcs accesses with the external program ssh(1).",
+ "",
+ "The environment variable $DARCS_SSH can be used to specify an",
+ "alternative SSH client.  Arguments may be included, separated by",
+ "whitespace.  The value is not interpreted by a shell, so shell",
+ "constructs cannot be used; in particular, it is not possible for the",
+ "program name to contain whitespace by using quoting or escaping."])
+
+environmentHelpScp :: ([String], [String])
+environmentHelpScp = (["DARCS_SCP", "DARCS_SFTP"], [
+ "When reading from a remote repository, Darcs will attempt to run",
+ "`darcs transfer-mode' on the remote host.  This will fail if the",
+ "remote host only has Darcs 1 installed, doesn't have Darcs installed",
+ "at all, or only allows SFTP.",
+ "",
+ "If transfer-mode fails, Darcs will fall back on scp(1) and sftp(1).",
+ "The commands invoked can be customized with the environment variables",
+ "$DARCS_SCP and $DARCS_SFTP respectively, which behave like $DARCS_SSH.",
+ "If the remote end allows only sftp, try setting DARCS_SCP=sftp."])
+
+environmentHelpSshPort :: ([String], [String])
+environmentHelpSshPort = (["SSH_PORT"], [
+ "If this environment variable is set, it will be used as the port",
+ "number for all SSH calls made by Darcs (when accessing remote",
+ "repositories over SSH).  This is useful if your SSH server does not",
+ "run on the default port, and your SSH client does not support",
+ "ssh_config(5).  OpenSSH users will probably prefer to put something",
+ "like `Host *.example.net Port 443' into their ~/.ssh/config file."])
diff --git a/src/Darcs/Test/Email.hs b/src/Darcs/Test/Email.hs
--- a/src/Darcs/Test/Email.hs
+++ b/src/Darcs/Test/Email.hs
@@ -46,6 +46,7 @@
     unlines ("":s++["", ""]) ==
               BC.unpack (readEmail (renderPS
                     $ makeEmail "reponame" [] (Just (text "contents\n"))
+                                 Nothing
                                  (text $ unlines s) (Just "filename")))
 
 -- | Check that formatHeader never creates lines longer than 78 characters
diff --git a/src/Darcs/Test/Patch.hs b/src/Darcs/Test/Patch.hs
--- a/src/Darcs/Test/Patch.hs
+++ b/src/Darcs/Test/Patch.hs
@@ -1,3 +1,7 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+#if __GLASGOW_HASKELL__ >= 700
+{-# LANGUAGE ImpredicativeTypes #-}
+#endif
 --  Copyright (C) 2002-2005,2007 David Roundy
 --
 --  This program is free software; you can redistribute it and/or modify
@@ -15,17 +19,349 @@
 --  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 --  Boston, MA 02110-1301, USA.
 
-module Darcs.Test.Patch ( testInfo, testSuite ) where
+module Darcs.Test.Patch ( testSuite ) where
 
-import Darcs.Test.Patch.Examples ( testInfo, patchExampleTests )
-import Darcs.Test.Patch.Properties2 ( patchPropertyTests )
-import Darcs.Test.Patch.Unit ( patchUnitTests )
-import Darcs.Test.Patch.Unit2 ( patchUnitTests2 )
-import qualified Darcs.Test.Patch.Info
+import Data.Maybe( isNothing )
 import Test.Framework ( Test, testGroup )
+import Test.Framework.Providers.HUnit ( testCase )
+import Test.Framework.Providers.QuickCheck2 ( testProperty )
+import Test.QuickCheck.Arbitrary( Arbitrary )
+import Test.QuickCheck( Testable )
+import Test.HUnit ( assertBool )
 
+import Darcs.Test.Util.TestResult ( TestResult, isOk, fromMaybe )
+import Darcs.Test.Patch.Utils ( testConditional )
+
+import Darcs.Witnesses.Ordered
+import Darcs.Witnesses.Sealed
+import Darcs.Witnesses.Eq ( unsafeCompare )
+import Darcs.Witnesses.Show
+import Darcs.Patch.Prim( PrimPatch, join, FromPrim, PrimOf, PrimPatchBase )
+import Darcs.Patch.Prim.Class( PrimCanonize )
+import qualified Darcs.Patch.Prim.V1 as V1 ( Prim )
+import qualified Darcs.Patch.Prim.V3 as V3 ( Prim )
+import qualified Darcs.Patch.V1 as V1
+import Darcs.Patch.V2.Real ( isConsistent, isForward, RealPatch )
+import Darcs.Patch.RepoPatch( RepoPatch )
+import Darcs.Patch.Patchy ( Commute(..), Patchy )
+import Darcs.Patch.Merge( Merge )
+import Darcs.Patch.Apply( ApplyState )
+
+import Darcs.Test.Patch.Arbitrary.Generic
+import qualified Darcs.Test.Patch.Arbitrary.PrimV1 as P1
+import qualified Darcs.Test.Patch.Arbitrary.PrimV3 as P3
+import Darcs.Test.Patch.Arbitrary.Real
+import Darcs.Test.Patch.Arbitrary.PatchV1 ()
+import Darcs.Test.Patch.Arbitrary.PrimV1 ()
+import Darcs.Test.Patch.RepoModel
+import Darcs.Test.Patch.V3Model( V3Model )
+import Darcs.Test.Patch.V1Model( V1Model )
+import Darcs.Test.Patch.WithState( WithState, wsPatch, WithStartState )
+
+import qualified Darcs.Test.Patch.Info
+
+import qualified Darcs.Test.Patch.Examples.Set1 as Ex
+import qualified Darcs.Test.Patch.Examples.Set2Unwitnessed as ExU
+
+import Darcs.Test.Patch.Properties.Check( Check(..), checkAPatch )
+import qualified Darcs.Test.Patch.Properties.V1Set1 as Prop
+import qualified Darcs.Test.Patch.Properties.V1Set2 as Prop
+import qualified Darcs.Test.Patch.Properties.Generic as Prop
+import qualified Darcs.Test.Patch.Properties.Real as Prop
+import qualified Darcs.Test.Patch.Properties.GenericUnwitnessed as PropU
+
+import qualified Darcs.Test.Patch.WSub as WSub
+
+#include "gadts.h"
+
+type instance ModelOf (FL prim) = ModelOf prim
+
+#if __GLASGOW_HASKELL__ >= 700
+type TestGenerator thing gen = (FORALL(t ctx) ((FORALL(xx yy) thing xx yy -> t) -> (gen ctx -> t)))
+type TestCondition thing = (FORALL (yy zz) thing C(yy zz) -> Bool)
+type TestCheck thing t = (FORALL (yy zz) thing C(yy zz) -> t)
+
+-- arbitraryThing :: (FORALL(xx yy) thing C(xx yy) -> t) -> (thing C(a b) -> t)
+arbitraryThing :: x -> TestGenerator thing (thing x)
+arbitraryThing _ f p = f p
+#endif
+
+-- | Run a test function on a set of data, using HUnit. The test function should
+--   return @Nothing@ upon success and a @Just x@ upon failure.
+testCases :: Show a => String               -- ^ The test name
+             -> (a -> TestResult)  -- ^ The test function
+             -> [a]                -- ^ The test data
+             -> Test
+testCases name test datas = testCase name (assertBool assertName res)
+    where assertName = "Boolean assertion for \"" ++ name ++ "\""
+          res        = and $ map (isOk . test) datas
+
+unit_V1P1:: [Test]
+unit_V1P1 =
+  [ testCases "known commutes" Prop.checkCommute Ex.knownCommutes
+  , testCases "known non-commutes" Prop.checkCantCommute Ex.knownCantCommutes
+  , testCases "known merges" Prop.checkMerge Ex.knownMerges
+  , testCases "known merges (equiv)" Prop.checkMergeEquiv Ex.knownMergeEquivs
+  , testCases "known canons" Prop.checkCanon Ex.knownCanons
+  , testCases "merge swaps" Prop.checkMergeSwap Ex.mergePairs2
+  , testCases "the patch validation works" Prop.tTestCheck Ex.validPatches
+  , testCases "commute/recommute" (Prop.recommute commute) Ex.commutePairs
+  , testCases "merge properties: merge either way valid" Prop.tMergeEitherWayValid Ex.mergePairs
+  , testCases "merge properties: merge swap" Prop.mergeEitherWay Ex.mergePairs
+  , testCases "primitive patch IO functions" (Prop.tShowRead eqFLUnsafe) Ex.primitiveTestPatches
+  , testCases "IO functions (test patches)" (Prop.tShowRead eqFLUnsafe) Ex.testPatches
+  , testCases "IO functions (named test patches)" (Prop.tShowRead unsafeCompare) Ex.testPatchesNamed
+  , testCases "primitive commute/recommute" (Prop.recommute commute) Ex.primitiveCommutePairs
+  ]
+
+unit_V2P1 :: [Test]
+unit_V2P1 =
+  [ testCases "join commute" (PropU.joinCommute WSub.join) ExU.primPermutables
+  , testCases "prim recommute" (PropU.recommute WSub.commute) ExU.commutables
+  , testCases "prim patch and inverse commute" (PropU.patchAndInverseCommute WSub.commute) ExU.commutables
+  , testCases "prim inverses commute" (PropU.commuteInverses WSub.commute) ExU.commutables
+  , testCases "FL prim recommute" (PropU.recommute WSub.commute) ExU.commutablesFL
+  , testCases "FL prim patch and inverse commute" (PropU.patchAndInverseCommute WSub.commute) ExU.commutablesFL
+  , testCases "FL prim inverses commute" (PropU.commuteInverses WSub.commute) $ ExU.commutablesFL
+  , testCases "fails" (PropU.commuteFails WSub.commute) ([] :: [(V1.Prim WSub.:> V1.Prim) C(x y)])
+  , testCases "read and show work on Prim" PropU.show_read ExU.primPatches
+  , testCases "read and show work on RealPatch" PropU.show_read ExU.realPatches
+  , testCases "example flattenings work" PropU.consistentTreeFlattenings ExU.realPatchLoopExamples
+  , testCases "real merge input consistent" (PropU.mergeArgumentsConsistent isConsistent) ExU.realMergeables
+  , testCases "real merge input is forward" (PropU.mergeArgumentsConsistent isForward) ExU.realMergeables
+  , testCases "real merge output is forward" (PropU.mergeConsistent isForward) ExU.realMergeables
+  , testCases "real merge output consistent" (PropU.mergeConsistent isConsistent) ExU.realMergeables
+  , testCases "real merge either way" PropU.mergeEitherWay ExU.realMergeables
+  , testCases "real merge and commute" PropU.mergeCommute ExU.realMergeables
+
+  , testCases "real recommute" (PropU.recommute WSub.commute) ExU.realCommutables
+  , testCases "real inverses commute" (PropU.commuteInverses WSub.commute) ExU.realCommutables
+  , testCases "real permutivity" (PropU.permutivity WSub.commute) ExU.realNonduplicateTriples
+  , testCases "real partial permutivity" (PropU.partialPermutivity WSub.commute) ExU.realNonduplicateTriples
+  ]
+
+instance PrimPatch prim => Check (RealPatch prim) where
+  checkPatch p = return $ isNothing $ isConsistent p
+
+instance Check V3.Prim where
+  checkPatch _ = return True -- XXX
+
+commuteReals :: PrimPatch prim => (RealPatch prim :> RealPatch prim) C(x y) -> Maybe ((RealPatch prim :> RealPatch prim) C(x y))
+commuteReals = commute
+
+qc_prim :: forall prim C(x y a) model.
+           (PrimPatch prim, ArbitraryPrim prim, Show2 prim
+           , model ~ ModelOf prim, RepoModel model
+           , RepoState model ~ ApplyState (PrimOf prim)
+           , Show1 (ModelOf prim)
+           , Check prim, PrimPatchBase prim, PrimOf prim ~ prim
+           , FromPrim prim
+           , Show1 (prim C(a))
+           , Show1 ((prim :> prim) C(a))
+           , Show1 (WithState model prim C(a))
+           , Arbitrary (Sealed ((prim :> prim) C(a)))
+           , Arbitrary (Sealed ((prim :> prim :> prim) C(a)))
+           , Arbitrary (Sealed (prim C(a)))
+           , Arbitrary (Sealed (FL prim C(a)))
+           , Arbitrary (Sealed ((FL prim :> FL prim) C(a)))
+           , Arbitrary (Sealed (WithState model prim C(a)))
+           , Arbitrary (Sealed (WithState model (FL prim) C(a)))
+           , Arbitrary (Sealed2 (WithState model (prim :> prim)))
+           , Arbitrary (Sealed ((WithState model (prim :> prim)) C(a)))
+           , Arbitrary (Sealed ((WithState model (FL prim :> FL prim)) C(a)))
+           ) => prim C(x y) -> [Test]
+qc_prim _ =
+  -- The following fails because of setpref patches...
+  -- testProperty "prim inverse doesn't commute" (inverseDoesntCommute :: Prim -> Maybe Doc)
+  [ testProperty "prim join effect preserving... "
+    (unseal2 $ Prop.joinEffectPreserving join :: Sealed2 (WithState model (prim :> prim)) -> TestResult)
+  ]
+#if __GLASGOW_HASKELL__ >= 700
+    ++ concat
+  [ pair_properties            (undefined :: prim C(x y))    "arbitrary"    arbitraryThing'
+  , pair_properties            (undefined :: FL prim C(x y)) "arbitrary FL" arbitraryThing'
+  , coalesce_properties        (undefined :: prim C(x y))    "arbitrary"    arbitraryThing'
+  , nonreal_commute_properties (undefined :: prim C(x y))    "arbitrary"    arbitraryThing'
+  , nonreal_commute_properties (undefined :: FL prim C(x y)) "arbitrary FL" arbitraryThing'
+  , patch_properties           (undefined :: prim C(x a))    "arbitrary"    arbitraryThing'
+  , patch_properties           (undefined :: FL prim C(x a)) "arbitrary FL" arbitraryThing'
+  , patch_repo_properties      (undefined :: prim C(x a))    "arbitrary"    arbitraryThing'
+  , patch_repo_properties      (undefined :: FL prim C(x a)) "arbitrary FL" arbitraryThing'
+  , pair_repo_properties       (undefined :: prim C(x a))    "arbitrary"    arbitraryThing'
+  , pair_repo_properties       (undefined :: FL prim C(x a)) "arbitrary FL" arbitraryThing'
+  ]
+      where arbitraryThing' = arbitraryThing (undefined :: a) -- bind the witness for generator
+#endif
+
+qc_V2P1 :: [Test]
+qc_V2P1 =
+  [ testProperty "tree flattenings are consistent... "
+    Prop.propConsistentTreeFlattenings
+  , testProperty "with quickcheck that real patches are consistent... "
+    (unseal $ P1.patchFromTree $ fromMaybe . isConsistent)
+  -- permutivity ----------------------------------------------------------------------------
+  , testConditional "permutivity"
+    (unseal $ P1.commuteTripleFromTree notDuplicatestriple)
+    (unseal $ P1.commuteTripleFromTree $ Prop.permutivity commuteReals)
+  , testConditional "partial permutivity"
+    (unseal $ P1.commuteTripleFromTree notDuplicatestriple)
+    (unseal $ P1.commuteTripleFromTree $ Prop.partialPermutivity commuteReals)
+  , testConditional "nontrivial permutivity"
+    (unseal $ P1.commuteTripleFromTree (\t -> nontrivialTriple t && notDuplicatestriple t))
+    (unseal $ P1.commuteTripleFromTree $ (Prop.permutivity commuteReals))
+  ]
+
+qc_V2 :: forall prim C(xx yy a). (PrimPatch prim, Show1 (ModelOf prim), RepoModel (ModelOf prim),
+                                  Check (RealPatch prim), ArbitraryPrim prim, Show2 prim,
+                                  RepoState (ModelOf prim) ~ ApplyState prim)
+      => prim C(xx yy) -> [Test]
+qc_V2 _ =
+  [ testProperty "readPatch and showPatch work on RealPatch... "
+    (unseal $ patchFromTree $ (Prop.show_read :: RealPatch prim C(x y) -> TestResult))
+  , testProperty "readPatch and showPatch work on FL RealPatch... "
+    (unseal2 $ (Prop.show_read :: FL (RealPatch prim) C(x y) -> TestResult))
+  , testProperty "we can do merges using QuickCheck"
+    (isNothing . (Prop.propIsMergeable ::
+                     Sealed (WithStartState (ModelOf prim) (Tree prim))
+                     -> Maybe (Tree (RealPatch prim) C(x))))
+  ]
+#if __GLASGOW_HASKELL__ >= 700
+  ++ concat
+  [ merge_properties   (undefined :: RealPatch prim C(x y)) "tree" mergePairFromTree
+  , merge_properties   (undefined :: RealPatch prim C(x y)) "twfp" mergePairFromTWFP
+  , pair_properties    (undefined :: RealPatch prim C(x y)) "tree" commutePairFromTree
+  , pair_properties    (undefined :: RealPatch prim C(x y)) "twfp" commutePairFromTWFP
+  , patch_properties   (undefined :: RealPatch prim C(x y)) "tree" patchFromTree
+  -- , patch_repo_properties (undefined :: RealPatch prim C(x y)) "tree" arbitraryThing'
+  ]
+    where arbitraryThing' = arbitraryThing (undefined :: a)
+#endif
+
+#if __GLASGOW_HASKELL__ >= 700
+properties :: forall thing gen. (Show1 gen, Arbitrary (Sealed gen)) =>
+              TestGenerator thing gen
+           -- -> forall xx yy. thing xx yy
+           -> String -> String
+           -> forall t. Testable t => [(String, TestCondition thing, TestCheck thing t)]
+           -> [Test]
+properties gen prefix genname tests =
+  [ cond name condition check | (name, condition, check) <- tests ]
+  where cond :: forall testable. Testable testable
+             => String -> TestCondition thing -> TestCheck thing testable -> Test
+        cond t c p =
+          testConditional (prefix ++ " (" ++ genname ++ "): " ++ t) (unseal $ gen c) (unseal $ gen p)
+
+type PropList what gen = String -> TestGenerator what gen -> [Test]
+
+pair_properties :: forall p gen x y. (Show1 gen, Arbitrary (Sealed gen), Patchy p)
+                   => p x y -> PropList (p :> p) gen
+pair_properties _ genname gen =
+  properties gen "commute" genname
+  [ ("recommute"              , const True       , Prop.recommute commute             )
+  , ("nontrivial recommute"   , nontrivialCommute, Prop.recommute commute             )
+  , ("inverses commute"       , const True       , Prop.commuteInverses commute       )
+  , ("nontrivial inverses"    , nontrivialCommute, Prop.commuteInverses commute       )
+  , ("inverse composition"    , const True       , Prop.inverseComposition            )
+  ]
+
+coalesce_properties :: forall p gen x y. (Show1 gen, Arbitrary (Sealed gen), Patchy p, PrimPatch p)
+                    => p x y -> PropList (p :> p :> p) gen
+coalesce_properties _ genname gen =
+  properties gen "commute" genname
+  [ ("join commutes with commute", const True, Prop.joinCommute join) ]
+
+-- The following properties do not hold for "Real" patches (conflictors and
+-- duplicates, specifically) .
+nonreal_commute_properties :: forall p gen x y. (Show1 gen, Arbitrary (Sealed gen), Patchy p)
+                           => p x y -> PropList (p :> p) gen
+nonreal_commute_properties _ genname gen =
+  properties gen "commute" genname
+  [ ("patch & inverse commute", const True       , Prop.patchAndInverseCommute commute)
+  , ("patch & inverse commute", nontrivialCommute, Prop.patchAndInverseCommute commute)
+  ]
+
+patch_properties :: forall p gen x y. (Show1 gen, Arbitrary (Sealed gen), Patchy p)
+                 => p x y -> PropList p gen
+patch_properties _ genname gen =
+  properties gen "patch" genname
+  [ ("inverse . inverse is id"  , const True       , Prop.invertSymmetry)
+  ]
+
+patch_repo_properties :: forall p gen x y. (Show1 gen, Arbitrary (Sealed gen), Patchy p,
+                                            RepoModel (ModelOf (PrimOf p)),
+                                            RepoState (ModelOf (PrimOf p)) ~ ApplyState p)
+                      => p x y -> PropList (WithState (ModelOf (PrimOf p)) p) gen
+patch_repo_properties _ genname gen =
+  properties gen "patch/repo" genname
+  [ ("invert rollback"          , const True       , Prop.invertRollback)
+  ]
+
+pair_repo_properties :: forall p gen x y. (Show1 gen, Arbitrary (Sealed gen), Patchy p,
+                                            RepoModel (ModelOf p),
+                                            RepoState (ModelOf p) ~ ApplyState p)
+                      => p x y -> PropList (WithState (ModelOf p) (p :> p)) gen
+pair_repo_properties _ genname gen =
+  properties gen "patch/repo" genname
+  [ ("commute is effect preserving" , const True       , Prop.effectPreserving commute )
+  ]
+
+merge_properties :: forall p gen x y. (Show1 gen, Arbitrary (Sealed gen)
+                                      , Patchy p, Merge p, Show2 p, Check p)
+                 => p x y -> PropList (p :\/: p) gen
+merge_properties _ genname gen =
+  properties gen "merge" genname
+  [ ("merge either way"           , const True     , Prop.mergeEitherWay      )
+  , ("merge either way valid"     , const True     , Prop.tMergeEitherWayValid)
+  , ("nontrivial merge either way", nontrivialMerge, Prop.mergeEitherWay      )
+  , ("merge commute"              , const True     , Prop.mergeCommute        )
+  ]
+#endif
+
+qc_V1P1 :: [Test]
+qc_V1P1 =
+  [
+    testProperty "show and read work right" (unseal Prop.propReadShow)
+  ]
+  ++ Prop.checkSubcommutes Prop.subcommutesInverse "patch and inverse both commute"
+  ++ Prop.checkSubcommutes Prop.subcommutesNontrivialInverse "nontrivial commutes are correct"
+  ++ Prop.checkSubcommutes Prop.subcommutesFailure "inverses fail"
+  ++
+  [ testProperty "commuting by patch and its inverse is ok" Prop.propCommuteInverse
+  -- , testProperty "conflict resolution is valid... " Prop.propResolveConflictsValid
+  , testProperty "a patch followed by its inverse is identity"
+    Prop.propPatchAndInverseIsIdentity
+  , testProperty "'simple smart merge'" Prop.propSimpleSmartMergeGoodEnough
+  , testProperty "commutes are equivalent" Prop.propCommuteEquivalency
+  , testProperty "merges are valid" Prop.propMergeValid
+  , testProperty "inverses being valid" Prop.propInverseValid
+  , testProperty "other inverse being valid" Prop.propOtherInverseValid
+  -- The patch generator isn't smart enough to generate correct test cases for
+  -- the following: (which will be obsoleted soon, anyhow)
+  -- , testProperty "the order dependence of unravel... " Prop.propUnravelOrderIndependent
+  -- , testProperty "the unravelling of three merges... " Prop.propUnravelThreeMerge
+  -- , testProperty "the unravelling of a merge of a sequence... " Prop.propUnravelSeqMerge
+  , testProperty "the order of commutes" Prop.propCommuteEitherOrder
+  , testProperty "commute either way" Prop.propCommuteEitherWay
+  , testProperty "the double commute" Prop.propCommuteTwice
+  , testProperty "merges commute and are well behaved"
+    Prop.propMergeIsCommutableAndCorrect
+  , testProperty "merges can be swapped" Prop.propMergeIsSwapable
+  , testProperty "again that merges can be swapped (I'm paranoid) " Prop.propMergeIsSwapable
+
+  ] -- the following properties are disabled, because they routinely lead to
+    -- exponential cases, making the tests run for ever and ever; nevertheless,
+    -- we would expect them to hold
+ {- ++ merge_properties (undefined :: V1.Patch Prim C(x y)) "tree" mergePairFromTree
+    ++ merge_properties (undefined :: V1.Patch Prim C(x y)) "twfp" mergePairFromTWFP
+    ++ commute_properties (undefined :: V1.Patch Prim C(x y)) "tree" commutePairFromTree
+    ++ commute_properties (undefined :: V1.Patch Prim C(x y)) "twfp" commutePairFromTWFP -}
+
 -- | This is the big list of tests that will be run using testrunner.
-testSuite :: Test
-testSuite = testGroup "Darcs.Patch" $
-            patchUnitTests ++ patchUnitTests2 ++ patchPropertyTests ++
-            patchExampleTests ++ [Darcs.Test.Patch.Info.testSuite]
+testSuite :: [Test]
+testSuite = [ testGroup "Darcs.Patch.Prim.V1" $ qc_prim (undefined :: V1.Prim C(x y))
+            , testGroup "Darcs.Patch.V1 (using Prim.V1)" $ unit_V1P1 ++ qc_V1P1
+            , testGroup "Darcs.Patch.V2 (using Prim.V1)" $ unit_V2P1 ++ qc_V2 (undefined :: V1.Prim C(x y)) ++ qc_V2P1
+            , testGroup "Darcs.Patch.Prim.V3" $ qc_prim (undefined :: V3.Prim C(x y))
+            , testGroup "Darcs.Patch.V2 (using Prim.V3)" $ qc_V2 (undefined :: V3.Prim C(x y))
+            , Darcs.Test.Patch.Info.testSuite
+            ]
diff --git a/src/Darcs/Test/Patch/Arbitrary/Generic.hs b/src/Darcs/Test/Patch/Arbitrary/Generic.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/Arbitrary/Generic.hs
@@ -0,0 +1,231 @@
+{-# OPTIONS_GHC -fno-warn-deprecations -fno-warn-orphans #-}
+{-# LANGUAGE CPP, UndecidableInstances, ScopedTypeVariables, MultiParamTypeClasses,
+             FlexibleInstances, ViewPatterns #-}
+
+#include "gadts.h"
+module Darcs.Test.Patch.Arbitrary.Generic
+       ( Tree(..), TreeWithFlattenPos(..), G2(..), ArbitraryPrim, NullPatch(..), RepoModel(..)
+       , flattenOne, flattenTree, mapTree, sizeTree
+       , commutePairFromTree, mergePairFromTree
+       , commuteTripleFromTree, mergePairFromCommutePair
+       , commutePairFromTWFP, mergePairFromTWFP, getPairs, getTriples
+       , patchFromTree
+       , canonizeTree
+       , quickCheck
+       ) where
+
+import Control.Monad ( liftM )
+import Test.QuickCheck
+import Darcs.Test.Patch.WithState
+import Darcs.Test.Patch.RepoModel
+import Darcs.Test.Util.QuickCheck ( bSized )
+import Darcs.Witnesses.Sealed
+import Darcs.Witnesses.Eq
+import Darcs.Witnesses.Unsafe
+import Darcs.Witnesses.Ordered
+import Darcs.Patch.Merge ( Merge(..) )
+import Darcs.Patch.Patchy ( Invert(..), Commute(..) )
+import Darcs.Patch.Prim ( PrimOf, PrimPatch, PrimPatchBase, FromPrim(..), PrimConstruct( anIdentity ), move )
+import Darcs.Patch.Prim.V1 ()
+import Darcs.Patch.V2 ( RealPatch ) -- XXX this is more or less a hack
+--import Darcs.ColorPrinter ( errorDoc )
+--import Darcs.ColorPrinter ( traceDoc )
+import Darcs.Witnesses.Show
+--import Printer ( greenText, ($$) )
+
+-- | Generate a patch to a certain state.
+class ArbitraryStateIn s p where
+  arbitraryStateIn :: s C(x) -> Gen (p C(x))
+
+data Tree p C(x) where
+   NilTree :: Tree p C(x)
+   SeqTree :: p C(x y) -> Tree p C(y) -> Tree p C(x)
+   ParTree :: Tree p C(x) -> Tree p C(x) -> Tree p C(x)
+
+mapTree :: (FORALL(y z) p C(y z) -> q C(y z)) -> Tree p C(x) -> Tree q C(x)
+mapTree _ NilTree = NilTree
+mapTree f (SeqTree p t) = SeqTree (f p) (mapTree f t)
+mapTree f (ParTree t1 t2) = ParTree (mapTree f t1) (mapTree f t2)
+
+instance Show2 p => Show (Tree p C(x)) where
+   showsPrec _ NilTree = showString "NilTree"
+   showsPrec d (SeqTree a t) = showParen (d > appPrec) $ showString "SeqTree " .
+                               showsPrec2 (appPrec + 1) a . showString " " .
+                               showsPrec (appPrec + 1) t
+   showsPrec d (ParTree t1 t2) = showParen (d > appPrec) $ showString "ParTree " .
+                                 showsPrec (appPrec + 1) t1 . showString " " .
+                                 showsPrec (appPrec + 1) t2
+
+instance Show2 p => Show1 (Tree p) where
+    showDict1 = ShowDictClass
+
+instance Show2 p => Show1 (TreeWithFlattenPos p) where
+    showDict1 = ShowDictClass
+
+sizeTree :: Tree p C(x) -> Int
+sizeTree NilTree = 0
+sizeTree (SeqTree _ t) = 1 + sizeTree t
+sizeTree (ParTree t1 t2) = 1 + sizeTree t1 + sizeTree t2
+
+-- newtype G1 l p C(x) = G1 { _unG1 :: l (p C(x)) }
+newtype G2 l p C(x y) = G2 { unG2 :: l (p C(x y)) }
+
+flattenTree :: (Merge p) => Tree p C(z) -> Sealed (G2 [] (FL p) C(z))
+flattenTree NilTree = seal $ G2 $ return NilFL
+flattenTree (SeqTree p t) = mapSeal (G2 . map (p :>:) . unG2) $ flattenTree t
+flattenTree (ParTree (flattenTree -> Sealed gpss1) (flattenTree -> Sealed gpss2))
+                            = seal $ G2 $
+                              do ps1 <- unG2 gpss1
+                                 ps2 <- unG2 gpss2
+                                 ps2' :/\: ps1' <- return $ merge (ps1 :\/: ps2)
+                                 -- We can't prove that the existential type in the result
+                                 -- of merge will be the same for each pair of
+                                 -- ps1 and ps2.
+                                 map unsafeCoerceP [ps1 +>+ ps2', ps2 +>+ ps1']
+
+instance ArbitraryState s p => ArbitraryStateIn s (Tree p) where
+  -- Don't generate trees deeper than 6 with default QuickCheck size (0..99).
+  -- Note if we don't put a non-zero lower bound the first generated trees will always have depth 0.
+  arbitraryStateIn rm = bSized 3 0.035 9 $ \depth -> arbitraryTree rm depth
+
+-- | Generate a tree of patches, bounded by the depth @maxDepth@.
+arbitraryTree :: ArbitraryState s p => s C(x) -> Int -> Gen (Tree p C(x))
+arbitraryTree rm depth
+    | depth == 0 = return NilTree
+                      -- Note a probability of N for NilTree would imply ~(100*N)% of empty trees.
+                      -- For the purpose of this module empty trees are useless, but even when
+                      -- NilTree case is omitted there is still a small percentage of empty trees
+                      -- due to the generation of null-patches (empty-hunks) and the use of canonizeTree.
+    | otherwise  = frequency [(1, do Sealed (WithEndState p rm') <- arbitraryState rm
+                                     t <- arbitraryTree rm' (depth - 1)
+                                     return (SeqTree p t))
+                             ,(3, do t1 <- arbitraryTree rm (depth - 1)
+                                     t2 <- arbitraryTree rm (depth - 1)
+                                     return (ParTree t1 t2))]
+
+
+class NullPatch p where
+  nullPatch :: p C(x y) -> EqCheck C(x y)
+
+class (ArbitraryState (ModelOf prim) prim, NullPatch prim, PrimPatch prim, RepoModel (ModelOf prim)) => ArbitraryPrim prim
+
+-- canonize a tree, removing any dead branches
+canonizeTree :: NullPatch p => Tree p C(x) -> Tree p C(x)
+canonizeTree NilTree = NilTree
+canonizeTree (ParTree t1 t2)
+    | NilTree <- canonizeTree t1 = canonizeTree t2
+    | NilTree <- canonizeTree t2 = canonizeTree t1
+    | otherwise = ParTree (canonizeTree t1) (canonizeTree t2)
+canonizeTree (SeqTree p t) | IsEq <- nullPatch p = canonizeTree t
+                           | otherwise = SeqTree p (canonizeTree t)
+
+
+instance (RepoModel model, ArbitraryPrim prim, model ~ ModelOf prim,
+          ArbitraryState model prim) => Arbitrary (Sealed (WithStartState model (Tree prim))) where
+  arbitrary = do repo <- aSmallRepo
+                 Sealed (WithStartState rm tree) <-
+                     liftM (seal . WithStartState repo) (arbitraryStateIn repo)
+                 return $ Sealed $ WithStartState rm (canonizeTree tree)
+
+flattenOne :: (FromPrim p, Merge p) => Tree (PrimOf p) C(x) -> Sealed (FL p C(x))
+flattenOne NilTree = seal NilFL
+flattenOne (SeqTree p (flattenOne -> Sealed ps)) = seal (fromPrim p :>: ps)
+flattenOne (ParTree (flattenOne -> Sealed ps1) (flattenOne -> Sealed ps2)) =
+    --traceDoc (greenText "flattening two parallel series: ps1" $$ showPatch ps1 $$
+    --          greenText "ps2" $$ showPatch ps2) $
+    case merge (ps1 :\/: ps2) of
+      ps2' :/\: _ -> seal (ps1 +>+ ps2')
+
+data TreeWithFlattenPos p C(x) = TWFP Int (Tree p C(x))
+
+commutePairFromTWFP :: (FromPrim p, Merge p, PrimPatchBase p)
+                    => (FORALL (y z) (p :> p) C(y z) -> t)
+                    -> (WithStartState model (TreeWithFlattenPos (PrimOf p)) C(x) -> t)
+commutePairFromTWFP handlePair (WithStartState _ (TWFP n t))
+    = unseal2 handlePair $
+      let xs = unseal getPairs (flattenOne t)
+      in if length xs > n && n >= 0 then xs!!n else seal2 (fromPrim anIdentity :> fromPrim anIdentity)
+
+commutePairFromTree :: (FromPrim p, Merge p, PrimPatchBase p)
+                    => (FORALL (y z) (p :> p) C(y z) -> t)
+                    -> (WithStartState model (Tree (PrimOf p)) C(x) -> t)
+commutePairFromTree handlePair (WithStartState _ t)
+   = unseal2 handlePair $
+     case flattenOne t of
+       Sealed ps ->
+         let xs = --traceDoc (greenText "I'm flattening one to get:" $$ showPatch ps) $
+                 getPairs ps
+         in if null xs then seal2 (fromPrim anIdentity :> fromPrim anIdentity) else last xs
+
+commuteTripleFromTree :: (FromPrim p, Merge p, PrimPatchBase p)
+                      => (FORALL (y z) (p :> p :> p) C(y z) -> t)
+                      -> (WithStartState model (Tree (PrimOf p)) C(x) -> t)
+commuteTripleFromTree handle (WithStartState _ t)
+   = unseal2 handle $
+     case flattenOne t of
+       Sealed ps ->
+         let xs = --traceDoc (greenText "I'm flattening one to get:" $$ showPatch ps) $
+                  getTriples ps
+         in if null xs
+            then seal2 (fromPrim anIdentity :> fromPrim anIdentity :> fromPrim anIdentity)
+            else last xs
+
+mergePairFromCommutePair :: (Commute p, Invert p)
+                         => (FORALL (y z) (p :\/: p) C(y z) -> t)
+                         -> (FORALL (y z) (p :>   p) C(y z) -> t)
+mergePairFromCommutePair handlePair (a :> b)
+ = case commute (a :> b) of
+     Just (b' :> _) -> handlePair (a :\/: b')
+     Nothing -> handlePair (b :\/: b)
+
+-- impredicativity problems mean we can't use (.) in the definitions below
+
+mergePairFromTWFP :: (FromPrim p, Merge p, Invert p, PrimPatchBase p)
+                  => (FORALL (y z) (p :\/: p) C(y z) -> t)
+                  -> (WithStartState model (TreeWithFlattenPos (PrimOf p)) C(x) -> t)
+mergePairFromTWFP x = commutePairFromTWFP (mergePairFromCommutePair x)
+
+mergePairFromTree :: (FromPrim p, Merge p, Invert p, PrimPatchBase p)
+                  => (FORALL (y z) (p :\/: p) C(y z) -> t)
+                  -> (WithStartState model (Tree (PrimOf p)) C(x) -> t)
+mergePairFromTree x = commutePairFromTree (mergePairFromCommutePair x)
+
+patchFromCommutePair :: (Commute p, Invert p)
+                     => (FORALL (y z) p C(y z) -> t)
+                     -> (FORALL (y z) (p :> p) C(y z) -> t)
+patchFromCommutePair handle (_ :> b) = handle b
+
+patchFromTree :: (FromPrim p, Merge p, Invert p, PrimPatchBase p)
+              => (FORALL (y z) p C(y z) -> t)
+              -> (WithStartState model (Tree (PrimOf p)) C(x) -> t)
+patchFromTree x = commutePairFromTree (patchFromCommutePair x)
+
+
+instance Show2 p => Show (TreeWithFlattenPos p C(x)) where
+   showsPrec d (TWFP n t) = showParen (d > appPrec) $ showString "TWFP " .
+                            showsPrec (appPrec + 1) n . showString " " .
+                            showsPrec1 (appPrec + 1) t
+
+getPairs :: FL p C(x y) -> [Sealed2 (p :> p)]
+getPairs NilFL = []
+getPairs (_:>:NilFL) = []
+getPairs (a:>:b:>:c) = seal2 (a:>b) : getPairs (b:>:c)
+
+getTriples :: FL p C(x y) -> [Sealed2 (p :> p :> p)]
+getTriples NilFL = []
+getTriples (_:>:NilFL) = []
+getTriples (_:>:_:>:NilFL) = []
+getTriples (a:>:b:>:c:>:d) = seal2 (a:>b:>c) : getTriples (b:>:c:>:d)
+
+instance (ArbitraryPrim prim, RepoModel (ModelOf prim), model ~ ModelOf prim,
+          ArbitraryState model prim)
+         => Arbitrary (Sealed (WithStartState model (TreeWithFlattenPos prim))) where
+   arbitrary = do Sealed (WithStartState rm t) <- arbitrary
+                  let num = unseal (length . getPairs) (flattenOneRP t)
+                  if num == 0 then return $ Sealed $ WithStartState rm $ TWFP 0 NilTree
+                    else do n <- choose (0, num - 1)
+                            return $ Sealed $ WithStartState rm $ TWFP n t
+                    where -- just used to get the length. In principle this should be independent of the patch type.
+                          flattenOneRP :: Tree prim C(x) -> Sealed (FL (RealPatch prim) C(x))
+                          flattenOneRP = flattenOne
+
diff --git a/src/Darcs/Test/Patch/Arbitrary/PatchV1.hs b/src/Darcs/Test/Patch/Arbitrary/PatchV1.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/Arbitrary/PatchV1.hs
@@ -0,0 +1,301 @@
+-- Copyright (C) 2002-2003,2007 David Roundy
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 2, or (at your option)
+-- any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program; see the file COPYING.  If not, write to
+-- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+-- Boston, MA 02110-1301, USA.
+
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE CPP, FlexibleInstances, TypeSynonymInstances #-}
+
+#include "gadts.h"
+
+module Darcs.Test.Patch.Arbitrary.PatchV1 () where
+
+import Prelude hiding ( pi )
+import System.IO.Unsafe ( unsafePerformIO )
+import Test.QuickCheck
+import Control.Applicative
+import Control.Monad ( liftM, liftM2, liftM3, liftM4, replicateM )
+
+import Darcs.Patch.Info ( PatchInfo, patchinfo )
+import Darcs.Test.Patch.Check ( PatchCheck,
+                                checkMove, removeDir, createDir,
+                                isValid, insertLine, fileEmpty, fileExists,
+                                deleteLine, modifyFile, createFile, removeFile,
+                                doCheck, doVerboseCheck, FileContents(..)
+                              )
+import Darcs.Patch.RegChars ( regChars )
+import ByteStringUtils ( linesPS )
+import qualified Data.ByteString as B ( ByteString, null, concat )
+import qualified Data.ByteString.Char8 as BC ( break, pack )
+import Darcs.Patch.FileName ( fn2fp )
+import qualified Data.Map as M ( mapMaybe )
+
+import Darcs.Patch ( addfile, adddir, move,
+                     hunk, tokreplace, binary,
+                     changepref, invert, merge,
+                     effect )
+import Darcs.Patch.Invert ( Invert )
+import Darcs.Patch.V1 ()
+import qualified Darcs.Patch.V1.Core as V1 ( Patch(..) )
+import Darcs.Patch.V1.Core ( isMerger )
+import Darcs.Patch.Prim.V1 ()
+import Darcs.Patch.Prim.V1.Core ( Prim(..), DirPatchType(..), FilePatchType(..) )
+import Darcs.Witnesses.Ordered
+import Darcs.Witnesses.Sealed ( Sealed(Sealed), unseal, mapSeal, Sealed2(..) )
+import Darcs.Witnesses.Unsafe
+
+-- This definitely feels a bit weird to be importing Properties here, and
+-- probably means we want to move this elsewhere, but Darcs.Test.Patch.Check is
+-- already taken with something apparently only semi-related
+import Darcs.Test.Patch.Properties.Check( checkAPatch )
+
+#include "impossible.h"
+
+type Patch = V1.Patch Prim
+
+class ArbitraryP p where
+    arbitraryP :: Gen (Sealed (p C(x)))
+
+{-
+TODO: there is a lot of overlap in testing between between this module
+and Darcs.Test.Patch.QuickCheck
+
+This module tests Prim and V1 patches, and Darcs.Test.Patch.QuickCheck
+tests Prim and V2 patches
+
+This module's generator covers a wider set of patch types, but is less
+likely to generate conflicts than Darcs.Test.Patch.QuickCheck.
+
+Until this is cleaned up, we take some care that the Arbitrary instances
+do not overlap and are only used for tests from the respective
+modules.
+
+(There are also tests in other modules that probably depend on the
+Arbitrary instances in this module.)
+-}
+
+instance Arbitrary (Sealed (Prim C(x))) where
+    arbitrary = arbitraryP
+
+instance Arbitrary (Sealed (FL Patch C(x))) where
+    arbitrary = arbitraryP
+
+-- instance Arbitrary (Sealed2 (Prim :> Prim)) where
+    -- arbitrary = unseal Sealed2 <$> arbitraryP
+
+instance Arbitrary (Sealed2 (FL Patch)) where
+    arbitrary = unseal Sealed2 <$> arbitraryP
+
+instance Arbitrary (Sealed2 (FL Patch :\/: FL Patch)) where
+    arbitrary = unseal Sealed2 <$> arbitraryP
+
+instance Arbitrary (Sealed2 (FL Patch :> FL Patch)) where
+    arbitrary = unseal Sealed2 <$> arbitraryP
+
+instance Arbitrary (Sealed2 (FL Patch :> FL Patch :> FL Patch)) where
+    arbitrary = unseal Sealed2 <$> arbitraryP
+
+
+instance (ArbitraryP p1, ArbitraryP p2) => ArbitraryP (p1 :> p2) where
+    arbitraryP = do Sealed p1 <- arbitraryP
+                    Sealed p2 <- arbitraryP
+                    return (Sealed (p1 :> p2))
+
+instance (ArbitraryP p1, ArbitraryP p2) => ArbitraryP (p1 :\/: p2) where
+    arbitraryP = do Sealed p1 <- arbitraryP
+                    Sealed p2 <- arbitraryP
+                    return (Sealed (unsafeCoercePEnd p1 :\/: p2))
+
+instance ArbitraryP (FL Patch) where
+    arbitraryP = sized arbpatch
+
+instance ArbitraryP Prim where
+    arbitraryP = onepatchgen
+
+hunkgen :: Gen (Sealed (Prim C(x)))
+hunkgen = do
+  i <- frequency [(1,choose (0,5)),(1,choose (0,35)),
+                  (2,return 0),(3,return 1),(2,return 2),(1,return 3)]
+  j <- frequency [(1,choose (0,5)),(1,choose (0,35)),
+                  (2,return 0),(3,return 1),(2,return 2),(1,return 3)]
+  if i == 0 && j == 0 then hunkgen
+    else Sealed <$>
+            liftM4 hunk filepathgen linenumgen
+                (replicateM i filelinegen)
+                (replicateM j filelinegen)
+
+tokreplacegen :: Gen (Sealed (Prim C(x)))
+tokreplacegen = do
+  f <- filepathgen
+  o <- tokengen
+  n <- tokengen
+  if o == n
+     then return $ Sealed $ tokreplace f "A-Za-z" "old" "new"
+     else return $ Sealed $ tokreplace f "A-Za-z_" o n
+
+twofilegen :: (FORALL(y) FilePath -> FilePath -> Prim C(x y)) -> Gen (Sealed (Prim C(x)))
+twofilegen p = do
+  n1 <- filepathgen
+  n2 <- filepathgen
+  if n1 /= n2 && checkAPatch (p n1 n2)
+     then return $ Sealed $ p n1 n2
+     else twofilegen p
+
+chprefgen :: Gen (Sealed (Prim C(x)))
+chprefgen = do
+  f <- oneof [return "color", return "movie"]
+  o <- tokengen
+  n <- tokengen
+  if o == n then return $ Sealed $ changepref f "old" "new"
+            else return $ Sealed $ changepref f o n
+
+simplepatchgen :: Gen (Sealed (Prim C(x)))
+simplepatchgen = frequency [(1,liftM (Sealed . addfile) filepathgen),
+                            (1,liftM (Sealed . adddir) filepathgen),
+                            (1,liftM3 (\x y z -> Sealed (binary x y z)) filepathgen arbitrary arbitrary),
+                            (1,twofilegen move),
+                            (1,tokreplacegen),
+                            (1,chprefgen),
+                            (7,hunkgen)
+                           ]
+
+onepatchgen :: Gen (Sealed (Prim C(x)))
+onepatchgen = oneof [simplepatchgen, mapSeal (invert . unsafeCoerceP) `fmap` simplepatchgen]
+
+norecursgen :: Int -> Gen (Sealed (FL Patch C(x)))
+norecursgen 0 = mapSeal (\p -> V1.PP p :>: NilFL) `fmap` onepatchgen
+norecursgen n = oneof [mapSeal (\p -> V1.PP p :>: NilFL) `fmap` onepatchgen,flatcompgen n]
+
+arbpatch :: Int -> Gen (Sealed (FL Patch C(x)))
+arbpatch 0 = mapSeal (\p -> V1.PP p :>: NilFL) `fmap` onepatchgen
+arbpatch n = frequency [(3,mapSeal (\p -> V1.PP p :>: NilFL) `fmap` onepatchgen),
+                        (2,flatcompgen n),
+                        (0,rawMergeGen n),
+                        (0,mergegen n),
+                        (1,mapSeal (\p -> V1.PP p :>: NilFL) `fmap` onepatchgen)
+                       ]
+
+-- | Generate an arbitrary list of at least one element
+unempty :: Arbitrary a => Gen [a]
+unempty = do
+  a <- arbitrary
+  as <- arbitrary
+  return (a:as)
+
+rawMergeGen :: Int -> Gen (Sealed (FL Patch C(x)))
+rawMergeGen n =   do Sealed p1 <- arbpatch len
+                     Sealed p2 <- arbpatch len
+                     if checkAPatch (invert p1:>:p2:>:NilFL) &&
+                        checkAPatch (invert p2:>:p1:>:NilFL)
+                        then case merge (p2 :\/: p1) of
+                             _ :/\: p2' -> return (Sealed (unsafeCoercePStart p2'))
+                        else rawMergeGen n
+    where len = if n < 15 then n`div`3 else 3
+
+mergegen :: Int -> Gen (Sealed (FL Patch C(x)))
+mergegen n = do
+  Sealed p1 <- norecursgen len
+  Sealed p2 <- norecursgen len
+  if checkAPatch (invert p1:>:p2:>:NilFL) &&
+         checkAPatch (invert p2:>:p1:>:NilFL)
+     then case merge (p2:\/:p1) of
+          _ :/\: p2' ->
+              if checkAPatch (p1+>+p2')
+              then return $ Sealed $ p1+>+p2'
+              else impossible
+     else mergegen n
+  where len = if n < 15 then n`div`3 else 3
+
+arbpi :: Gen PatchInfo
+arbpi = do n <- unempty
+           a <- unempty
+           l <- unempty
+           d <- unempty
+           return $ unsafePerformIO $ patchinfo n d a l
+
+instance Arbitrary PatchInfo where
+    arbitrary = arbpi
+
+instance Arbitrary B.ByteString where
+    arbitrary = liftM BC.pack arbitrary
+
+flatlistgen :: Int -> Gen (Sealed (FL Patch C(x)))
+flatlistgen 0 = return $ Sealed NilFL
+flatlistgen n = do Sealed x <- onepatchgen
+                   Sealed xs <- flatlistgen (n-1)
+                   return (Sealed (V1.PP x :>: xs))
+
+flatcompgen :: Int -> Gen (Sealed (FL Patch C(x)))
+flatcompgen n = do
+  Sealed ps <- flatlistgen n
+  let myp = regularizePatches $ ps
+  if checkAPatch myp
+     then return $ Sealed myp
+     else flatcompgen n
+
+-- resize to size 25, that means we'll get line numbers no greater
+-- than 1025 using QuickCheck 2.1
+linenumgen :: Gen Int
+linenumgen = frequency [(1,return 1), (1,return 2), (1,return 3),
+                    (3,liftM (\n->1+abs n) (resize 25 arbitrary)) ]
+
+tokengen :: Gen String
+tokengen = oneof [return "hello", return "world", return "this",
+                  return "is", return "a", return "silly",
+                  return "token", return "test"]
+
+toklinegen :: Gen String
+toklinegen = liftM unwords $ replicateM 3 tokengen
+
+filelinegen :: Gen B.ByteString
+filelinegen = liftM BC.pack $
+              frequency [(1,map fromSafeChar `fmap` arbitrary),(5,toklinegen),
+                         (1,return ""), (1,return "{"), (1,return "}") ]
+
+filepathgen :: Gen String
+filepathgen = liftM fixpath badfpgen
+
+fixpath :: String -> String
+fixpath "" = "test"
+fixpath p = fpth p
+
+fpth :: String -> String
+fpth ('/':'/':cs) = fpth ('/':cs)
+fpth (c:cs) = c : fpth cs
+fpth [] = []
+
+newtype SafeChar = SS Char
+instance Arbitrary SafeChar where
+    arbitrary = oneof $ map (return . SS) (['a'..'z']++['A'..'Z']++['1'..'9']++"0")
+
+fromSafeChar :: SafeChar -> Char
+fromSafeChar (SS s) = s
+
+badfpgen :: Gen String
+badfpgen =  frequency [(1,return "test"), (1,return "hello"), (1,return "world"),
+                       (1,map fromSafeChar `fmap` arbitrary),
+                       (1,liftM2 (\a b-> a++"/"++b) filepathgen filepathgen) ]
+
+regularizePatches :: FL Patch C(x y) -> FL Patch C(x y)
+regularizePatches patches = rpint (unsafeCoerceP NilFL) patches
+    where -- this reverses the list, which seems odd and causes
+          -- the witness unsafety
+          rpint :: FL Patch C(x y) -> FL Patch C(a b) -> FL Patch C(x y)
+          rpint ok_ps NilFL = ok_ps
+          rpint ok_ps (p:>:ps) =
+            if checkAPatch (unsafeCoerceP p:>:ok_ps)
+            then rpint (unsafeCoerceP p:>:ok_ps) ps
+            else rpint ok_ps ps
+
diff --git a/src/Darcs/Test/Patch/Arbitrary/PrimV1.hs b/src/Darcs/Test/Patch/Arbitrary/PrimV1.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/Arbitrary/PrimV1.hs
@@ -0,0 +1,394 @@
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Darcs.Test.Patch.Arbitrary.PrimV1 where
+
+import qualified Darcs.Test.Patch.Arbitrary.Generic as T
+     ( commuteTripleFromTree, commutePairFromTree, commutePairFromTWFP
+     , mergePairFromTree, mergePairFromTWFP
+     , patchFromTree )
+import Darcs.Test.Patch.Arbitrary.Generic
+import Darcs.Test.Patch.RepoModel
+
+import Control.Monad ( liftM )
+import Test.QuickCheck
+import Darcs.Test.Patch.WithState
+import Darcs.Witnesses.Sealed
+import Darcs.Witnesses.Eq
+import Darcs.Witnesses.Unsafe
+import Darcs.Witnesses.Ordered
+-- import Darcs.Witnesses.Show
+import Darcs.Patch.Prim.V1 ()
+import Darcs.Patch.Prim.V1.Core ( FilePatchType( Hunk, TokReplace ), Prim( FP ), isIdentity )
+import Darcs.Patch.RepoPatch ( RepoPatch )
+import Darcs.Patch.FileHunk( IsHunk( isHunk ), FileHunk(..) )
+
+import Darcs.Test.Patch.V1Model
+import Darcs.Test.Util.QuickCheck ( alpha, notIn, maybeOf )
+
+import Darcs.Commands.Replace ( defaultToks )
+import Darcs.Patch.Prim
+
+import Control.Applicative ( (<$>) )
+import qualified Data.ByteString.Char8 as BC
+import Data.Maybe ( isJust )
+
+#include "gadts.h"
+#include "impossible.h"
+
+patchFromTree :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) p C(y z) -> t) -> WithStartState V1Model (Tree Prim) C(x) -> t
+patchFromTree = T.patchFromTree
+
+mergePairFromTree :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :\/: p) C(y z) -> t) -> WithStartState V1Model (Tree Prim) C(x) -> t
+mergePairFromTree = T.mergePairFromTree
+
+mergePairFromTWFP :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :\/: p) C(y z) -> t) -> WithStartState V1Model (TreeWithFlattenPos Prim) C(x) -> t
+mergePairFromTWFP = T.mergePairFromTWFP
+
+commutePairFromTWFP :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :> p) C(y z) -> t) -> WithStartState V1Model (TreeWithFlattenPos Prim) C(x) -> t
+commutePairFromTWFP = T.commutePairFromTWFP
+
+commutePairFromTree :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :> p) C(y z) -> t) -> WithStartState V1Model (Tree Prim) C(x) -> t
+commutePairFromTree = T.commutePairFromTree
+
+commuteTripleFromTree :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :> p :> p) C(y z) -> t) -> WithStartState V1Model (Tree Prim) C(x) -> t
+commuteTripleFromTree = T.commuteTripleFromTree
+
+nonEmptyHunk :: (IsHunk p) => p C(x y) -> Bool
+nonEmptyHunk p
+  | Just (FileHunk _ _ [] []) <- isHunk p = False
+  | otherwise                             = True
+
+nonEmptyHunksPair :: (IsHunk p) => (p :> p) C(x y) -> Bool
+nonEmptyHunksPair (p1 :> p2) = nonEmptyHunk p1 && nonEmptyHunk p2
+
+nonEmptyHunksTriple :: (IsHunk p) => (p :> p :> p) C(x y) -> Bool
+nonEmptyHunksTriple (p1 :> p2 :> p3) = nonEmptyHunk p1 && nonEmptyHunk p2 && nonEmptyHunk p3
+
+nonEmptyHunksFLPair :: (IsHunk p) => (FL p :> FL p) C(x y) -> Bool
+nonEmptyHunksFLPair (ps :> qs) = allFL nonEmptyHunk ps && allFL nonEmptyHunk qs
+
+type instance ModelOf Prim = V1Model
+instance ArbitraryPrim Prim
+
+instance NullPatch Prim where
+  nullPatch (FP _ fp) = nullPatch fp
+  nullPatch p | IsEq <- isIdentity p = IsEq
+  nullPatch _ = NotEq
+
+instance NullPatch FilePatchType where
+  nullPatch (Hunk _ [] []) = unsafeCoerceP IsEq -- is this safe?
+  nullPatch _ = NotEq
+
+instance Arbitrary (Sealed2 (FL (WithState V1Model Prim))) where
+  arbitrary = do repo <- ourSmallRepo
+                 liftM (unseal (seal2 . wesPatch)) $ arbitraryState repo
+
+-- instance Show1 (TreeWithFlattenPos Prim) where
+--   showDict1 = ShowDictClass
+
+-- WithState and propFail are handy for debugging arbitrary code
+propFail :: Int -> Tree Prim C(x) -> Bool
+propFail n xs = sizeTree xs < n
+
+----------------------------------------------------------------------
+-- * QuickCheck generators
+
+----------------------------------------------------------------------
+-- ** FilePatchType generators
+
+aHunk :: FORALL(x y) Content -> Gen (FilePatchType C(x y))
+aHunk content
+ = sized $ \n ->
+     do pos <- choose (1, contentLen+1)
+        let prefixLen = pos-1
+            restLen   = contentLen-prefixLen
+        oldLen <- frequency
+                      [ (75, choose (0, min restLen n))
+                        -- produces small hunks common in real editing
+                      , (25, choose (0, min 10 restLen))
+                      ]
+        -- newLen choice aims to cover all possibilities, that is,
+        -- remove less/the same/more than added and empty the file.
+        newLen <- frequency
+                      [ ( 54
+                        , choose (1,min 1 n)
+                        )
+                      , ( if oldLen /= 0 then 42 else 0
+                        , choose (1,min 1 oldLen)
+                        )
+                      , ( if oldLen /= 0 then 2 else 0
+                        , return oldLen
+                        )
+                      , ( if oldLen /= 0 then 2 else 0
+                        , return 0
+                        )
+                      ]
+        new <- vectorOf newLen aLine
+        let old = take oldLen $ drop prefixLen $ content
+        return $ Hunk pos old new
+  where
+      contentLen = length content
+
+aTokReplace :: FORALL(x y) Content -> Gen (FilePatchType C(x y))
+aTokReplace []
+  = do w <- vectorOf 1 alpha
+       w' <- vectorOf 1 alpha
+       return $ TokReplace defaultToks w w'
+aTokReplace content
+  = do let fileWords = concatMap BC.words content
+       wB <- elements fileWords
+       w' <- alphaBS `notIn` fileWords
+       return $ TokReplace defaultToks (BC.unpack wB) (BC.unpack w')
+  where
+      alphaBS = do x <- alpha; return $ BC.pack [x]
+
+----------------------------------------------------------------------
+-- ** Prim generators
+
+aHunkP :: FORALL(x y) (AnchoredPath,File) -> Gen (Prim C(x y))
+aHunkP (path,file)
+  = do Hunk pos old new <- aHunk content
+       return $ hunk (ap2fp path) pos old new
+  where
+      content = fileContent file
+
+aTokReplaceP :: FORALL (x y) (AnchoredPath,File) -> Gen (Prim C(x y))
+aTokReplaceP (path,file)
+  = do TokReplace tokchars old new <- aTokReplace content
+       return $ tokreplace (ap2fp path) tokchars old new
+  where
+      content = fileContent file
+
+anAddFileP :: FORALL (x y) (AnchoredPath,Dir) -> Gen (Prim C(x y))
+anAddFileP (path,dir)
+  = do newFilename <- aFilename `notIn` existing
+       let newPath = path `appendPath` newFilename
+       return $ addfile (ap2fp newPath)
+  where
+      existing = map fst $ filterFiles $ dirContent dir
+
+aRmFileP :: FORALL (x y) AnchoredPath   -- ^ Path of an empty file
+                          -> Prim C(x y)
+aRmFileP path = rmfile (ap2fp path)
+
+anAddDirP :: FORALL (x y) (AnchoredPath,Dir) -> Gen (Prim C(x y))
+anAddDirP (path,dir)
+  = do newDirname <- aDirname `notIn` existing
+       let newPath = path `appendPath` newDirname
+       return $ adddir (ap2fp newPath)
+  where
+      existing = map fst $ filterDirs $ dirContent dir
+
+aRmDirP :: FORALL (x y) AnchoredPath    -- ^ Path of an empty directory
+                        -> Prim C(x y)
+aRmDirP path = rmdir (ap2fp path)
+
+aMoveP :: FORALL (x y) Gen Name -> AnchoredPath -> (AnchoredPath,Dir) -> Gen (Prim C(x y))
+aMoveP nameGen oldPath (dirPath,dir)
+  = do newName <- nameGen `notIn` existing
+       let newPath = dirPath `appendPath` newName
+       return $ move (ap2fp oldPath) (ap2fp newPath)
+  where
+      existing = map fst $ dirContent dir
+
+-- | Generates any type of 'Prim' patch, except binary and setpref patches.
+aPrim :: FORALL(x y) V1Model C(x) -> Gen (WithEndState V1Model (Prim C(x)) C(y))
+aPrim repo
+  = do mbFile <- maybeOf repoFiles
+       mbEmptyFile <- maybeOf $ filter (isEmpty . snd) repoFiles
+       dir  <- elements (rootDir:repoDirs)
+       mbOldDir <- maybeOf repoDirs
+       mbEmptyDir <- maybeOf $ filter (isEmpty . snd) repoDirs
+       patch <- frequency
+                  [ ( if isJust mbFile then 12 else 0
+                    , aHunkP $ fromJust mbFile
+                    )
+                  , ( if isJust mbFile then 6 else 0
+                    , aTokReplaceP $ fromJust mbFile
+                    )
+                  , ( 2
+                    , anAddFileP dir
+                    )
+                  , ( if isJust mbEmptyFile then 12 else 0
+                    , return $ aRmFileP $ fst $ fromJust mbEmptyFile
+                    )
+                  , ( 2
+                    , anAddDirP dir
+                    )
+                  , ( if isJust mbEmptyDir then 10 else 0
+                    , return $ aRmDirP $ fst $ fromJust mbEmptyDir
+                    )
+                  , ( if isJust mbFile then 3 else 0
+                    , aMoveP aFilename (fst $ fromJust mbFile) dir
+                    )
+                  , let oldPath = fst $ fromJust mbOldDir in
+                    ( if isJust mbOldDir
+                         && not (oldPath `isPrefix` fst dir)
+                        then 4 else 0
+                    , aMoveP aDirname oldPath dir
+                    )
+                  ]
+       let repo' = unFail $ repoApply repo patch
+       return $ WithEndState patch repo'
+  where
+      repoItems = list repo
+      repoFiles = filterFiles repoItems
+      repoDirs  = filterDirs repoItems
+      rootDir   = (anchoredRoot,root repo)
+
+{- [COVERAGE OF aPrim]
+
+  PLEASE,
+  if you change something that may affect the coverage of aPrim then
+      a) recalculate it, or if that is not possible;
+      b) indicate the need to do it.
+
+  Patch type
+  ----------
+  42% hunk
+  22% tokreplace
+  14% move
+   6% rmdir
+   6% addfile
+   6% adddir
+   4% rmfile
+-}
+
+----------------------------------------------------------------------
+-- *** Pairs of primitive patches
+
+-- Try to generate commutable pairs of hunks
+hunkPairP :: FORALL(x y) (AnchoredPath,File) -> Gen ((Prim :> Prim) C(x y))
+hunkPairP (path,file)
+  = do h1@(Hunk l1 old1 new1) <- aHunk content
+       (delta, content') <- selectChunk h1 content
+       Hunk l2' old2 new2 <- aHunk content'
+       let l2 = l2'+delta
+       return (hunk fpPath l1 old1 new1 :> hunk fpPath l2 old2 new2)
+  where
+      content = fileContent file
+      fpPath = ap2fp path
+      selectChunk (Hunk l old new) content_
+        = elements [prefix, suffix]
+        where
+            start = l - 1
+            prefix = (0, take start content_)
+            suffix = (start + length new, drop (start + length old) content_)
+      selectChunk _ _ = impossible
+
+aPrimPair :: FORALL(x y) V1Model C(x) -> Gen (WithEndState V1Model ((Prim :> Prim) C(x)) C(y))
+aPrimPair repo
+  = do mbFile <- maybeOf repoFiles
+       frequency
+          [ ( if isJust mbFile then 1 else 0
+            , do p1 :> p2 <- hunkPairP $ fromJust mbFile
+                 let repo'  = unFail $ repoApply repo p1
+                     repo'' = unFail $ repoApply repo' p2
+                 return $ WithEndState (p1 :> p2) repo''
+            )
+          , ( 1
+            , do Sealed wesP <- arbitraryState repo
+                 return $ unsafeCoerceP1 wesP
+            )
+          ]
+  where
+      repoItems = list repo
+      repoFiles = filterFiles repoItems
+
+{- [COVERAGE OF aPrimPair]
+
+  PLEASE,
+  if you change something that may affect the coverage of aPrimPair then
+      a) recalculate it, or if that is not possible;
+      b) indicate the need to do it.
+
+  Rate of ommutable pairs
+  -----------------------
+  67% commutable
+
+  Commutable coverage (for 1000 tests)
+  -------------------
+  21% hunks-B
+  20% hunks-A
+  14% file:>dir
+  12% file:>move
+   8% trivial-FP
+   8% hunk:>tok
+   4% hunks-D
+   3% tok:>tok
+   2% hunks-C
+   1% move:>move
+   1% dir:>move
+   1% dir:>dir
+   0% emptyhunk:>file
+-}
+
+----------------------------------------------------------------------
+-- Arbitrary instances
+
+ourSmallRepo :: Gen (V1Model C(x))
+ourSmallRepo = aSmallRepo
+
+instance ArbitraryState V1Model Prim where
+  arbitraryState s = seal <$> aPrim s
+
+
+instance Arbitrary (Sealed2 Prim) where
+  arbitrary = makeS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed2 (Prim :> Prim)) where
+  arbitrary = do repo <- ourSmallRepo
+                 WithEndState pp _ <- aPrimPair repo
+                 return $ seal2 pp
+
+instance Arbitrary (Sealed ((Prim :> Prim) C(a))) where
+  arbitrary = do repo <- ourSmallRepo
+                 WithEndState pp _ <- aPrimPair repo
+                 return $ seal pp
+
+instance Arbitrary (Sealed2 (Prim :> Prim :> Prim)) where
+  arbitrary = makeS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed ((Prim :> Prim :> Prim) a)) where
+  arbitrary = makeSGen ourSmallRepo
+
+instance Arbitrary (Sealed2 (FL Prim)) where
+  arbitrary = makeS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed ((FL Prim) C(a))) where
+  arbitrary = makeSGen ourSmallRepo
+
+instance Arbitrary (Sealed2 (FL Prim :> FL Prim)) where
+  arbitrary = makeS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed ((FL Prim :> FL Prim) C(a))) where
+  arbitrary = makeSGen ourSmallRepo
+
+instance Arbitrary (Sealed2 (WithState V1Model Prim)) where
+  arbitrary = makeWS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed (WithState V1Model Prim C(a))) where
+  arbitrary = makeWSGen ourSmallRepo
+
+instance Arbitrary (Sealed (WithState V1Model (FL Prim) C(a))) where
+  arbitrary = makeWSGen ourSmallRepo
+
+instance Arbitrary (Sealed2 (WithState V1Model (Prim :> Prim))) where
+  arbitrary = do repo <- ourSmallRepo
+                 WithEndState pp repo' <- aPrimPair repo
+                 return $ seal2 $ WithState repo pp repo'
+
+instance Arbitrary (Sealed (WithState V1Model (Prim :> Prim) a)) where
+  arbitrary = do repo <- ourSmallRepo
+                 WithEndState pp repo' <- aPrimPair repo
+                 return $ seal $ WithState repo pp repo'
+
+
+instance Arbitrary (Sealed2 (WithState V1Model (FL Prim))) where
+  arbitrary = makeWS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed2 (WithState V1Model (FL Prim :> FL Prim))) where
+  arbitrary = makeWS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed (WithState V1Model (FL Prim :> FL Prim) a)) where
+  arbitrary = makeWSGen ourSmallRepo
diff --git a/src/Darcs/Test/Patch/Arbitrary/PrimV3.hs b/src/Darcs/Test/Patch/Arbitrary/PrimV3.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/Arbitrary/PrimV3.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE MultiParamTypeClasses, OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Darcs.Test.Patch.Arbitrary.PrimV3 where
+
+import qualified Darcs.Test.Patch.Arbitrary.Generic as T
+     ( commuteTripleFromTree, commutePairFromTree, commutePairFromTWFP
+     , mergePairFromTree, mergePairFromTWFP
+     , patchFromTree )
+import Darcs.Test.Patch.Arbitrary.Generic
+import Darcs.Test.Patch.RepoModel
+
+import Control.Monad ( liftM )
+import Test.QuickCheck
+import Darcs.Test.Patch.WithState
+import Darcs.Witnesses.Sealed
+import Darcs.Witnesses.Eq
+import Darcs.Witnesses.Unsafe
+import Darcs.Witnesses.Ordered
+-- import Darcs.Witnesses.Show
+import Darcs.Patch.Prim.V3 ()
+import Darcs.Patch.Prim.V3.Core ( Prim(..), Location, Hunk(..), UUID(..) )
+import Darcs.Patch.RepoPatch ( RepoPatch )
+
+import Darcs.Test.Patch.V3Model
+import Darcs.Test.Util.QuickCheck ( alpha, notIn, maybeOf )
+
+import Darcs.Commands.Replace ( defaultToks )
+import Darcs.Patch.Prim
+
+import Control.Applicative ( (<$>) )
+import qualified Data.ByteString.Char8 as BC
+import qualified Data.ByteString as BS
+import Data.Maybe ( isJust )
+import qualified Data.Map as M
+import Storage.Hashed.Hash( Hash(..) )
+
+#include "gadts.h"
+#include "impossible.h"
+
+patchFromTree :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) p C(y z) -> t) -> WithStartState V3Model (Tree Prim) C(x) -> t
+patchFromTree = T.patchFromTree
+
+mergePairFromTree :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :\/: p) C(y z) -> t) -> WithStartState V3Model (Tree Prim) C(x) -> t
+mergePairFromTree = T.mergePairFromTree
+
+mergePairFromTWFP :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :\/: p) C(y z) -> t) -> WithStartState V3Model (TreeWithFlattenPos Prim) C(x) -> t
+mergePairFromTWFP = T.mergePairFromTWFP
+
+commutePairFromTWFP :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :> p) C(y z) -> t) -> WithStartState V3Model (TreeWithFlattenPos Prim) C(x) -> t
+commutePairFromTWFP = T.commutePairFromTWFP
+
+commutePairFromTree :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :> p) C(y z) -> t) -> WithStartState V3Model (Tree Prim) C(x) -> t
+commutePairFromTree = T.commutePairFromTree
+
+commuteTripleFromTree :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :> p :> p) C(y z) -> t) -> WithStartState V3Model (Tree Prim) C(x) -> t
+commuteTripleFromTree = T.commuteTripleFromTree
+
+type instance ModelOf Prim = V3Model
+instance ArbitraryPrim Prim
+
+hunkIdentity (Hunk _ old new) | old == new = unsafeCoerceP IsEq
+hunkIdentity _ = NotEq
+
+instance NullPatch Prim where
+  nullPatch (BinaryHunk _ x) = hunkIdentity x
+  nullPatch (TextHunk _ x) = hunkIdentity x
+  nullPatch _ = NotEq
+
+instance Arbitrary (Sealed2 (FL (WithState V3Model Prim))) where
+  arbitrary = do repo <- ourSmallRepo
+                 liftM (unseal (seal2 . wesPatch)) $ arbitraryState repo
+
+-- instance Show1 (TreeWithFlattenPos Prim) where
+--   showDict1 = ShowDictClass
+
+-- WithState and propFail are handy for debugging arbitrary code
+propFail :: Int -> Tree Prim C(x) -> Bool
+propFail n xs = sizeTree xs < n
+
+----------------------------------------------------------------------
+-- * QuickCheck generators
+
+aHunk :: FORALL(x y) BS.ByteString -> Gen (Hunk C(x y))
+aHunk content
+ = sized $ \n ->
+     do pos <- choose (0, BS.length content)
+        let prefixLen = pos
+            restLen   = BS.length content - prefixLen
+        oldLen <- frequency
+                      [ (75, choose (0, min restLen n))
+                      , (25, choose (0, min 10 restLen))
+                      ]
+        let nonempty x = if oldLen /= 0 then x else 0
+        newLen <- frequency
+                      [ ( 54, choose (1,min 1 n) )
+                      , ( nonempty 42, choose (1,min 1 oldLen) )
+                      , ( nonempty 2, return oldLen )
+                      , ( nonempty 2, return 0 )
+                      ]
+        new <- BS.concat <$> vectorOf newLen aLine
+        let old = BS.take oldLen $ BS.drop prefixLen $ content
+        return $ Hunk pos old new
+
+aTextHunk :: FORALL (x y) (UUID, Object Fail) -> Gen (Prim C(x y))
+aTextHunk (uuid, (Blob text _)) =
+  do hunk <- aHunk (unFail text)
+     return $ TextHunk uuid hunk
+
+aManifest :: FORALL (x y) UUID -> Location -> Object Fail -> Gen (Prim C(x y))
+aManifest uuid loc (Directory dir) =
+  do newFilename <- aFilename `notIn` (M.keys dir)
+     return $ Manifest uuid loc
+
+aDemanifest :: FORALL (x y) UUID -> Location -> Gen (Prim C(x y))
+aDemanifest uuid loc = return $ Demanifest uuid loc
+
+-- | Generates any type of 'Prim' patch, except binary and setpref patches.
+aPrim :: FORALL(x y) V3Model C(x) -> Gen (WithEndState V3Model (Prim C(x)) C(y))
+aPrim repo
+  = do mbFile <- maybeOf repoFiles
+       mbDir <- maybeOf repoDirs
+       mbExisting <- maybeOf $ repoObjects repo
+       mbManifested <- maybeOf manifested
+       fresh <- anUUID
+       filename <- aFilename
+       dir  <- elements (rootDir:repoDirs)
+       mbOtherDir <- maybeOf repoDirs
+       let whenfile x = if isJust mbFile then x else 0
+           whendir x = if isJust mbDir then x else 0
+           whenexisting x = if isJust mbExisting then x else 0
+           whenmanifested x = if isJust mbManifested then x else 0
+       patch <- frequency
+                  [ ( whenfile 12, aTextHunk $ fromJust mbFile )
+                  , ( 2, aTextHunk (fresh, Blob (return "") NoHash) ) -- create an empty thing
+                  , ( whenexisting (whendir 2), -- manifest an existing object
+                      aManifest (fst $ fromJust mbExisting)
+                                (fst $ fromJust mbDir, filename)
+                                (snd $ fromJust mbDir))
+                  , ( whenmanifested 2, uncurry aDemanifest $ fromJust mbManifested )
+                    -- TODO: demanifest
+                  ]
+       let repo' = unFail $ repoApply repo patch
+       return $ WithEndState patch repo'
+  where
+      manifested = [ (id, (dirid, name)) | (dirid, Directory dir) <- repoDirs
+                                         , (name, id) <- M.toList dir ]
+      repoFiles = [ (id, Blob x y) | (id, Blob x y) <- repoObjects repo ]
+      repoDirs  = [ (id, Directory x) | (id, Directory x) <- repoObjects repo ]
+      rootDir   = (UUID "ROOT", root repo)
+
+----------------------------------------------------------------------
+-- *** Pairs of primitive patches
+
+-- Try to generate commutable pairs of hunks
+hunkPair :: FORALL(x y) (UUID, Object Fail) -> Gen ((Prim :> Prim) C(x y))
+hunkPair (uuid, (Blob file _)) =
+  do h1@(Hunk l1 old1 new1) <- aHunk (unFail file)
+     (delta, content') <- selectChunk h1 (unFail file)
+     Hunk l2' old2 new2 <- aHunk content'
+     let l2 = l2'+delta
+     return (TextHunk uuid (Hunk l1 old1 new1) :> TextHunk uuid (Hunk l2 old2 new2))
+  where
+     selectChunk (Hunk l old new) content = elements [prefix, suffix]
+       where start = l - 1
+             prefix = (0, BS.take start content)
+             suffix = (start + BS.length new, BS.drop (start + BS.length old) content)
+     selectChunk _ _ = impossible
+
+aPrimPair :: FORALL(x y) V3Model C(x) -> Gen (WithEndState V3Model ((Prim :> Prim) C(x)) C(y))
+aPrimPair repo
+  = do mbFile <- maybeOf repoFiles
+       frequency
+          [ ( if isJust mbFile then 1 else 0
+            , do p1 :> p2 <- hunkPair $ fromJust mbFile
+                 let repo'  = unFail $ repoApply repo  p1
+                     repo'' = unFail $ repoApply repo' p2
+                 return $ WithEndState (p1 :> p2) repo''
+            )
+          , ( 1
+            , do Sealed wesP <- arbitraryState repo
+                 return $ unsafeCoerceP1 wesP
+            )
+          ]
+  where
+      repoFiles = [ (id, Blob x y) | (id, Blob x y) <- repoObjects repo ]
+
+----------------------------------------------------------------------
+-- Arbitrary instances
+
+ourSmallRepo :: Gen (V3Model C(x))
+ourSmallRepo = aSmallRepo
+
+instance ArbitraryState V3Model Prim where
+  arbitraryState s = seal <$> aPrim s
+
+
+instance Arbitrary (Sealed2 Prim) where
+  arbitrary = makeS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed (Prim x)) where
+  arbitrary = makeSGen ourSmallRepo
+
+instance Arbitrary (Sealed2 (Prim :> Prim)) where
+  arbitrary = do repo <- ourSmallRepo
+                 WithEndState pp _ <- aPrimPair repo
+                 return $ seal2 pp
+
+instance Arbitrary (Sealed ((Prim :> Prim) C(a))) where
+  arbitrary = do repo <- ourSmallRepo
+                 WithEndState pp _ <- aPrimPair repo
+                 return $ seal pp
+
+instance Arbitrary (Sealed2 (Prim :> Prim :> Prim)) where
+  arbitrary = makeS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed ((Prim :> Prim :> Prim) a)) where
+  arbitrary = makeSGen ourSmallRepo
+
+instance Arbitrary (Sealed2 (FL Prim)) where
+  arbitrary = makeS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed ((FL Prim) C(a))) where
+  arbitrary = makeSGen ourSmallRepo
+
+instance Arbitrary (Sealed2 (FL Prim :> FL Prim)) where
+  arbitrary = makeS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed ((FL Prim :> FL Prim) C(a))) where
+  arbitrary = makeSGen ourSmallRepo
+
+instance Arbitrary (Sealed2 (WithState V3Model Prim)) where
+  arbitrary = makeWS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed (WithState V3Model Prim C(a))) where
+  arbitrary = makeWSGen ourSmallRepo
+
+instance Arbitrary (Sealed (WithState V3Model (FL Prim) C(a))) where
+  arbitrary = makeWSGen ourSmallRepo
+
+instance Arbitrary (Sealed2 (WithState V3Model (Prim :> Prim))) where
+  arbitrary = do repo <- ourSmallRepo
+                 WithEndState pp repo' <- aPrimPair repo
+                 return $ seal2 $ WithState repo pp repo'
+
+instance Arbitrary (Sealed (WithState V3Model (Prim :> Prim) a)) where
+  arbitrary = do repo <- ourSmallRepo
+                 WithEndState pp repo' <- aPrimPair repo
+                 return $ seal $ WithState repo pp repo'
+
+
+instance Arbitrary (Sealed2 (WithState V3Model (FL Prim))) where
+  arbitrary = makeWS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed2 (WithState V3Model (FL Prim :> FL Prim))) where
+  arbitrary = makeWS2Gen ourSmallRepo
+
+instance Arbitrary (Sealed (WithState V3Model (FL Prim :> FL Prim) a)) where
+  arbitrary = makeWSGen ourSmallRepo
diff --git a/src/Darcs/Test/Patch/Arbitrary/Real.hs b/src/Darcs/Test/Patch/Arbitrary/Real.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/Arbitrary/Real.hs
@@ -0,0 +1,67 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE UndecidableInstances #-}
+module Darcs.Test.Patch.Arbitrary.Real where
+import Darcs.Test.Patch.Arbitrary.Generic
+import Darcs.Test.Patch.Arbitrary.PrimV1 ()
+import Darcs.Test.Patch.RepoModel
+
+import Darcs.Witnesses.Ordered
+import Darcs.Patch.Merge ( Merge(..) )
+import Darcs.Patch.Patchy ( Patchy, Commute(..) )
+import Darcs.Patch.Prim ( PrimPatch, anIdentity )
+import Darcs.Patch.V2 ( RealPatch )
+import Darcs.Patch.V2.Real ( isDuplicate )
+
+import Test.QuickCheck
+import Darcs.Test.Patch.WithState
+import Darcs.Witnesses.Sealed
+import Darcs.Witnesses.Eq
+import Darcs.Patch.Prim ( FromPrim(..) )
+
+#include "gadts.h"
+
+nontrivialReals :: PrimPatch prim => (RealPatch prim :> RealPatch prim) C(x y) -> Bool
+nontrivialReals = nontrivialCommute
+
+nontrivialCommute :: Patchy p => (p :> p) C(x y) -> Bool
+nontrivialCommute (x :> y) = case commute (x :> y) of
+                              Just (y' :> x') -> not (y' `unsafeCompare` y) ||
+                                                 not (x' `unsafeCompare` x)
+                              Nothing -> False
+
+nontrivialMergeReals :: PrimPatch prim => (RealPatch prim :\/: RealPatch prim) C(x y) -> Bool
+nontrivialMergeReals = nontrivialMerge
+
+nontrivialMerge :: (Patchy p, Merge p) => (p :\/: p) C(x y) -> Bool
+nontrivialMerge (x :\/: y) = case merge (x :\/: y) of
+                              y' :/\: x' -> not (y' `unsafeCompare` y) ||
+                                            not (x' `unsafeCompare` x)
+
+instance (RepoModel (ModelOf prim), ArbitraryPrim prim)
+         => Arbitrary (Sealed2 (FL (RealPatch prim))) where
+    arbitrary = do Sealed (WithStartState _ tree) <- arbitrary :: Gen (Sealed (WithStartState (ModelOf prim) (Tree prim)))
+                   return $ unseal seal2 (flattenOne tree)
+
+instance (RepoModel (ModelOf prim), ArbitraryPrim prim)
+         => Arbitrary (Sealed2 (RealPatch prim)) where
+    arbitrary = do Sealed (WithStartState _ tree) <- arbitrary :: Gen (Sealed (WithStartState (ModelOf prim) (Tree prim)))
+                   case mapFL seal2 `unseal` flattenOne tree of
+                     [] -> return $ seal2 $ fromPrim anIdentity
+                     ps -> elements ps
+
+notDuplicatestriple :: (RealPatch prim :> RealPatch prim :> RealPatch prim) C(x y) -> Bool
+notDuplicatestriple (a :> b :> c) = not (isDuplicate a || isDuplicate b || isDuplicate c)
+
+nontrivialTriple :: PrimPatch prim => (RealPatch prim :> RealPatch prim :> RealPatch prim) C(x y) -> Bool
+nontrivialTriple (a :> b :> c) =
+    case commute (a :> b) of
+    Nothing -> False
+    Just (b' :> a') ->
+      case commute (a' :> c) of
+      Nothing -> False
+      Just (c'' :> a'') ->
+        case commute (b :> c) of
+        Nothing -> False
+        Just (c' :> b'') -> (not (a `unsafeCompare` a') || not (b `unsafeCompare` b')) &&
+                            (not (c' `unsafeCompare` c) || not (b'' `unsafeCompare` b)) &&
+                            (not (c'' `unsafeCompare` c) || not (a'' `unsafeCompare` a'))
diff --git a/src/Darcs/Test/Patch/Check.hs b/src/Darcs/Test/Patch/Check.hs
--- a/src/Darcs/Test/Patch/Check.hs
+++ b/src/Darcs/Test/Patch/Check.hs
@@ -32,6 +32,8 @@
 import qualified Data.Map as M ( mapKeys, delete, insert, empty, lookup, null )
 import System.FilePath ( joinPath, splitDirectories )
 
+#include "impossible.h"
+
 -- | File contents are represented by a map from line numbers to line contents.
 --   If for a certain line number, the line contents are Nothing, that means
 --   that we are sure that that line exists, but we don't know its contents.
@@ -189,7 +191,7 @@
 --   is consistent, False if it is not.
 doSwap :: String -> String -> PatchCheck Bool
 doSwap f f' = handleInconsistent False $ do
-    modify (\(P ks nots) -> P (map sw ks) (map sw nots))
+    modify map_sw
     return True
   where sw (FileEx a) | f  `is_soe` a = FileEx $ movedirfilename f f' a
                       | f' `is_soe` a = FileEx $ movedirfilename f' f a
@@ -202,6 +204,8 @@
         sw p = p
         is_soe d1 d2 = -- is_superdir_or_equal
             d1 == d2 || (d1 ++ "/") `isPrefixOf` d2
+        map_sw (P ks nots) = P (map sw ks) (map sw nots)
+        map_sw _ = impossible
 
 -- | Assert a property about the repository. If the property is already present
 -- in the repo state, nothing changes, and the function returns True. If it is
@@ -241,16 +245,20 @@
 -- Returns False if the repo is inconsistent, True otherwise.
 changeToTrue :: Prop -> PatchCheck Bool
 changeToTrue p = handleInconsistent False $ do
-    modify (\(P ks nots) -> P (p:ks) (filter (p /=) nots))
+    modify filter_nots
     return True
+      where filter_nots (P ks nots) = P (p:ks) (filter (p /=) nots)
+            filter_nots _ = impossible
 
 -- | Remove a property from the list of properties that hold for this repo (if
 -- it's in there), and add it to the list of properties that do not hold.
 -- Returns False if the repo is inconsistent, True otherwise.
 changeToFalse :: Prop -> PatchCheck Bool
 changeToFalse p = handleInconsistent False $ do
-    modify (\(P ks nots) -> P (filter (p /=) ks) (p:nots))
+    modify filter_ks
     return True
+    where filter_ks (P ks nots) = P (filter (p /=) ks) (p:nots)
+          filter_ks _ = impossible
 
 assertFileExists :: String -> PatchCheck Bool
 assertFileExists f =   do _ <- assertNot $ NotEx f
diff --git a/src/Darcs/Test/Patch/Examples.hs b/src/Darcs/Test/Patch/Examples.hs
deleted file mode 100644
--- a/src/Darcs/Test/Patch/Examples.hs
+++ /dev/null
@@ -1,604 +0,0 @@
---  Copyright (C) 2002-2005,2007 David Roundy
---
---  This program is free software; you can redistribute it and/or modify
---  it under the terms of the GNU General Public License as published by
---  the Free Software Foundation; either version 2, or (at your option)
---  any later version.
---
---  This program is distributed in the hope that it will be useful,
---  but WITHOUT ANY WARRANTY; without even the implied warranty of
---  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
---  GNU General Public License for more details.
---
---  You should have received a copy of the GNU General Public License
---  along with this program; see the file COPYING.  If not, write to
---  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
---  Boston, MA 02110-1301, USA.
-
-{-# OPTIONS_GHC -fno-warn-orphans -fno-warn-deprecations #-}
-{-# LANGUAGE CPP #-}
-
-module Darcs.Test.Patch.Examples ( testInfo, patchExampleTests ) where
-
-import System.IO.Unsafe ( unsafePerformIO )
-import qualified Data.ByteString.Char8 as BC ( pack )
-import qualified Data.ByteString as B ( empty )
-import Darcs.Patch
-     ( Patchy, commute, invert, merge, effect
-     , Named, namepatch
-     , readPatch, showPatch
-     , fromPrim, canonize, sortCoalesceFL
-     , adddir, addfile, hunk, binary, rmdir, rmfile, tokreplace )
-import Darcs.Patch.Prim ( PrimOf, FromPrim )
-import Darcs.Patch.Prim.V1 ( Prim )
-import qualified Darcs.Patch.V1 as V1 ( Patch )
-import Darcs.Test.Patch.Test
-    ( checkAPatch )
-import Darcs.Test.Patch.Utils ( testStringList )
-import Printer ( renderPS )
-import Darcs.Witnesses.Eq
-import Darcs.Witnesses.Ordered
-import Darcs.Witnesses.Show
-import Darcs.Witnesses.Sealed ( Sealed(Sealed), unsafeUnseal )
-import Darcs.Witnesses.Unsafe ( unsafeCoerceP, unsafeCoercePEnd )
-import Test.Framework ( Test )
-
-#include "gadts.h"
-#include "impossible.h"
-
-type Patch = V1.Patch Prim
-
-testInfo :: String
-testInfo = unlines
-  [ "There are a total of "++ show (length primitiveTestPatches) ++" primitive patches."
-  , "There are a total of "++ show (length testPatches) ++" patches."
-  ]
-
-patchExampleTests :: [Test]
-patchExampleTests =
-        [
-         testStringList "Checking known commutes" commuteTests,
-         testStringList "Checking known merges" mergeTests,
-         testStringList "Checking known canons" canonizationTests,
-         testStringList "Checking merge swaps" mergeSwapTests,
-         testStringList "Checking that the patch validation works" testCheck,
-         testStringList "Checking commute/recommute" commuteRecommuteTests,
-         testStringList "Checking merge properties" genericMergeTests,
-         testStringList "Checking primitive patch IO functions" primitiveShowReadTests,
-         testStringList "Checking IO functions" showReadTests,
-         testStringList "Checking primitive commute/recommute" primitiveCommuteRecommuteTests
-        ]
-
--- The unit tester function is really just a glorified map for functions that
--- return lists, in which the lists get concatenated (where map would end up
--- with a list of lists).
-
-quickmerge :: (FL Patch :\/: FL Patch) C(x y) -> FL Patch C(y z)
-quickmerge (p1:\/:p2) = case merge (p1:\/:p2) of
-                        _ :/\: p1' -> unsafeCoercePEnd p1'
-
-type PatchUnitTest p = FORALL(x y) p C(x y) -> [String]
-type ParallelPatchUnitTest = FORALL(x y z) FL Patch C(x y) -> FL Patch C(x z) -> [String]
-type SerialPatchUnitTest = FORALL(x y z) FL Patch C(y z) -> FL Patch C(x y) -> [String]
-
-parallelPairUnitTester :: ParallelPatchUnitTest -> [(FL Patch:\/:FL Patch) C(x y)] -> [String]
-parallelPairUnitTester _ []        = []
-parallelPairUnitTester thetest ((p1:\/:p2):ps)
-    = (thetest p1 p2)++(parallelPairUnitTester thetest ps)
-
-pairUnitTester :: SerialPatchUnitTest -> [(FL Patch:<FL Patch) C(x y)] -> [String]
-pairUnitTester _ []        = []
-pairUnitTester thetest ((p1:<p2):ps)
-    = (thetest p1 p2)++(pairUnitTester thetest ps)
-
-
--- ----------------------------------------------------------------------
--- * Show/Read tests
--- ----------------------------------------------------------------------
-
--- | This test involves calling 'show' to print a string describing a patch,
---   and then using readPatch to read it back in, and making sure the patch we
---   read in is the same as the original.  Useful for making sure that I don't
---   have any stupid IO bugs.
-showReadTests :: [String]
-showReadTests = concatMap (tShowRead eqFLUnsafe) testPatches ++
-                  concatMap (tShowRead unsafeCompare) testPatchesNamed
-
-primitiveShowReadTests :: [String]
-primitiveShowReadTests = concatMap (tShowRead eqFLUnsafe) primitiveTestPatches
-
-tShowRead :: (Show2 p, Patchy p) => (FORALL(x y w z) p C(x y) -> p C(w z) -> Bool) -> PatchUnitTest p
-tShowRead eq p =
-    case readPatch $ renderPS $ showPatch p of
-    Just (Sealed p') -> if p' `eq` p then []
-                        else ["Failed to read shown:  "++(show2 p)++"\n"]
-    Nothing -> ["Failed to read at all:  "++(show2 p)++"\n"]
-
--- ----------------------------------------------------------------------
--- * Canonization tests
--- ----------------------------------------------------------------------
-
--- | This is a set of known correct canonizations, to make sure that I'm
---   canonizing as I ought.
-canonizationTests :: [String]
-canonizationTests = concatMap checkKnownCanon knownCanons
-checkKnownCanon :: FORALL(x y) (FL Patch C(x y), FL Patch C(x y)) -> [String]
-checkKnownCanon (p1,p2) =
-    if isIsEq $ eqFL (mapFL_FL fromPrim $ concatFL $ mapFL_FL canonize $ sortCoalesceFL $ effect p1) p2
-    then []
-    else ["Canonization failed:\n"++show p1++"canonized is\n"
-          ++show (mapFL_FL fromPrim $ concatFL $ mapFL_FL canonize $ sortCoalesceFL $ effect p1 :: FL Patch C(x y))
-          ++"which is not\n"++show p2]
-knownCanons :: [(FL Patch C(x y),FL Patch C(x y))]
-knownCanons =
-    [(quickhunk 1 "abcde" "ab" :>: NilFL, quickhunk 3 "cde"   "" :>: NilFL),
-     (quickhunk 1 "abcde" "bd" :>: NilFL,
-      quickhunk 1 "a" "" :>:
-      quickhunk 2 "c" "" :>:
-      quickhunk 3 "e" "" :>: NilFL),
-     (quickhunk 4 "a" "b" :>:
-      quickhunk 1 "c" "d" :>: NilFL,
-      quickhunk 1 "c" "d" :>:
-      quickhunk 4 "a" "b" :>: NilFL),
-     (quickhunk 1 "a" "" :>:
-      quickhunk 1 "" "b" :>: NilFL,
-      quickhunk 1 "a" "b" :>: NilFL),
-     (quickhunk 1 "ab" "c" :>:
-      quickhunk 1 "cd" "e" :>: NilFL,
-      quickhunk 1 "abd" "e" :>: NilFL),
-     (quickhunk 1 "abcde" "cde" :>: NilFL, quickhunk 1 "ab" "" :>: NilFL),
-     (quickhunk 1 "abcde" "acde" :>: NilFL, quickhunk 2 "b" "" :>: NilFL)]
-
-quickhunk :: (FromPrim p, PrimOf p ~ Prim) => Int -> String -> String -> p C(x y)
-quickhunk l o n = fromPrim $ hunk "test" l (map (\c -> BC.pack [c]) o)
-                                             (map (\c -> BC.pack [c]) n)
-
--- ----------------------------------------------------------------------
--- * Merge/unmgerge tests
--- ----------------------------------------------------------------------
-
--- | It should always be true that if two patches can be unmerged, then merging
---   the resulting patches should give them back again.
-genericMergeTests :: [String]
-genericMergeTests =
-  case take 400 [(p1:\/:p2)|
-                 i <- [0..(length testPatches)-1],
-                 p1<-[testPatches!!i],
-                 p2<-drop i testPatches,
-                 checkAPatch (invert p2 :>: p1 :>: NilFL)] of
-  merge_pairs -> (parallelPairUnitTester tMergeEitherWayValid merge_pairs) ++
-                 (parallelPairUnitTester tMergeSwapMerge merge_pairs)
-tMergeEitherWayValid   :: ParallelPatchUnitTest
-tMergeEitherWayValid p1 p2 =
-  case p2 :>: quickmerge (p1:\/: p2) :>: NilFL of
-  combo2 ->
-    case p1 :>: quickmerge (p2:\/: p1) :>: NilFL of
-    combo1 ->
-      if not $ checkAPatch combo1
-      then ["oh my combo1 invalid:\n"++show p1++"and...\n"++show p2++show combo1]
-      else
-        if checkAPatch (invert combo1 :>: combo2 :>: NilFL)
-        then []
-        else ["merge both ways invalid:\n"++show p1++"and...\n"++show p2++
-              show combo1++
-              show combo2]
-tMergeSwapMerge   :: ParallelPatchUnitTest
-tMergeSwapMerge p1 p2 =
-  if merge (p2 :\/: p1) `eqSwapped` merge (p1 :\/: p2)
-  then []
-  else ["Failed to swap merges:\n"++show p1++"and...\n"++show p2
-        ++"merged:\n"++show (merge (p1:\/:p2))++"\n"
-        ++"merged swapped:\n"++show (merge (p2:\/: p1))++"\n"]
-    where eqSwapped :: (FL Patch :/\: FL Patch) C(x y) -> (FL Patch :/\: FL Patch) C(y x) -> Bool
-          eqSwapped (x1 :/\: y1) (y2 :/\: x2) | IsEq <- eqFL x1 x2, IsEq <- eqFL y1 y2 = True
-          eqSwapped _ _ = False
-
-instance Show2 p => Show ((p :/\: p) C(x y)) where
-   show (x :/\: y) = show2 x ++ " :/\\: " ++ show2 y
-instance MyEq p => Eq ((p :/\: p) C(x y)) where
-   (x :/\: y) == (x' :/\: y') = isIsEq (x =\/= x') && isIsEq (y =\/= y')
-
--- ----------------------------------------------------------------------
--- * Commute/recommute tests
--- ----------------------------------------------------------------------
-
--- | Here we test to see if commuting patch A and patch B and then commuting
--- the result gives us patch A and patch B again.  The set of patches (A,B)
--- is chosen from the set of all pairs of test patches by selecting those which
--- commute with one another.
-commuteRecommuteTests :: [String]
-commuteRecommuteTests =
-  case take 200 [(p2:<p1)|
-                 p1<-testPatches,
-                 p2<-filter (\p->checkAPatch (p1:>:p:>:NilFL)) testPatches,
-                 commute (p1:>p2) /= Nothing] of
-  commute_pairs -> pairUnitTester tCommuteRecommute commute_pairs
-primitiveCommuteRecommuteTests :: [String]
-primitiveCommuteRecommuteTests =
-  pairUnitTester tCommuteRecommute
-    [(p1:<p2)|
-     p1<-primitiveTestPatches,
-     p2<-primitiveTestPatches,
-     commute (p2:>p1) /= Nothing,
-     checkAPatch (p2:>:p1:>:NilFL)]
-tCommuteRecommute   :: SerialPatchUnitTest
-tCommuteRecommute p1 p2 =
-    if (commute (p2:>p1) >>= commute) == Just (p2:>p1)
-       then []
-       else ["Failed to recommute:\n"++(show p2)++(show p1)++
-            "we saw it as:\n"++show (commute (p2:>p1))++
-             "\nAnd recommute was:\n"++show (commute (p2:>p1) >>= commute)
-             ++ "\n"]
-
--- ----------------------------------------------------------------------
--- * Commute tests
--- ----------------------------------------------------------------------
-
--- | Here we provide a set of known interesting commutes.
-commuteTests :: [String]
-commuteTests =
-    concatMap checkKnownCommute knownCommutes++
-    concatMap checkCantCommute knownCantCommute
-checkKnownCommute :: ((FL Patch:< FL Patch) C(x y), (FL Patch:< FL Patch) C(x y)) -> [String]
-checkKnownCommute (p1:<p2,p2':<p1') =
-   case commute (p2:>p1) of
-   Just (p1a:>p2a) ->
-       if (p2a:< p1a) == (p2':< p1')
-       then []
-       else ["Commute gave wrong value!\n"++show p1++"\n"++show p2
-             ++"should be\n"++show p2'++"\n"++show p1'
-             ++"but is\n"++show p2a++"\n"++show p1a]
-   Nothing -> ["Commute failed!\n"++show p1++"\n"++show p2]
-   ++
-   case commute (p1':>p2') of
-   Just (p2a:>p1a) ->
-       if (p1a:< p2a) == (p1:< p2)
-       then []
-       else ["Commute gave wrong value!\n"++show p2a++"\n"++show p1a
-             ++"should have been\n"++show p2'++"\n"++show p1']
-   Nothing -> ["Commute failed!\n"++show p2'++"\n"++show p1']
-knownCommutes :: [((FL Patch:<FL Patch) C(x y),(FL Patch:<FL Patch) C(x y))]
-knownCommutes = [
-                  (testhunk 1 [] ["A"]:<
-                   testhunk 2 [] ["B"],
-                   testhunk 3 [] ["B"]:<
-                   testhunk 1 [] ["A"]),
-                  (fromPrim (tokreplace "test" "A-Za-z_" "old" "new"):<
-                   testhunk 2
-                   ["hello world all that is old is good old_"]
-                   ["I don't like old things"],
-                   testhunk 2
-                   ["hello world all that is new is good old_"]
-                   ["I don't like new things"]:<
-                   fromPrim (tokreplace "test" "A-Za-z_" "old" "new")),
-                  (testhunk 1 ["A"] ["B"]:<
-                   testhunk 2 ["C"] ["D"],
-                   testhunk 2 ["C"] ["D"]:<
-                   testhunk 1 ["A"] ["B"]),
-                  (fromPrim (rmfile "NwNSO"):<
-                   (quickmerge (fromPrim (addfile "hello"):\/:fromPrim (addfile "hello"))),
-                   (quickmerge (fromPrim (addfile "hello"):\/:fromPrim (addfile "hello"))):<
-                   fromPrim (rmfile "NwNSO")),
-
-                  (quickmerge (testhunk 3 ["o"] ["n"]:\/:
-                               testhunk 3 ["o"] ["v"]):<
-                   testhunk 1 [] ["a"],
-                   testhunk 1 [] ["a"]:<
-                   quickmerge (testhunk 2 ["o"] ["n"]:\/:
-                               testhunk 2 ["o"] ["v"])),
-
-                  (testhunk 1 ["A"] []:<
-                   testhunk 3 ["B"] [],
-                   testhunk 2 ["B"] []:<
-                   testhunk 1 ["A"] []),
-
-                  (testhunk 1 ["A"] ["B"]:<
-                   testhunk 2 ["B"] ["C"],
-                   testhunk 2 ["B"] ["C"]:<
-                   testhunk 1 ["A"] ["B"]),
-
-                  (testhunk 1 ["A"] ["B"]:<
-                   testhunk 3 ["B"] ["C"],
-                   testhunk 3 ["B"] ["C"]:<
-                   testhunk 1 ["A"] ["B"]),
-
-                  (testhunk 1 ["A"] ["B","C"]:<
-                   testhunk 2 ["B"] ["C","D"],
-                   testhunk 3 ["B"] ["C","D"]:<
-                   testhunk 1 ["A"] ["B","C"])]
-  where testhunk l o n = fromPrim $ hunk "test" l (map BC.pack o) (map BC.pack n)
-
-checkCantCommute :: (FL Patch:< FL Patch) C(x y) -> [String]
-checkCantCommute (p1:<p2) =
-    case commute (p2:>p1) of
-    Nothing -> []
-    _ -> [show p1 ++ "\n\n" ++ show p2 ++
-          "\nArgh, these guys shouldn't commute!\n"]
-knownCantCommute :: [(FL Patch:< FL Patch) C(x y)]
-knownCantCommute = [
-                      (testhunk 2 ["o"] ["n"]:<
-                       testhunk 1 [] ["A"]),
-                      (testhunk 1 [] ["A"]:<
-                       testhunk 1 ["o"] ["n"]),
-                      (quickmerge (testhunk 2 ["o"] ["n"]:\/:
-                                   testhunk 2 ["o"] ["v"]):<
-                       testhunk 1 [] ["a"]),
-                      (fromPrim (hunk "test" 1 ([BC.pack "a"]) ([BC.pack "b"])):<
-                       fromPrim (addfile "test"))]
-  where testhunk l o n = fromPrim $ hunk "test" l (map BC.pack o) (map BC.pack n)
-
--- ----------------------------------------------------------------------
--- * Merge tests
--- ----------------------------------------------------------------------
-
--- | Here we provide a set of known interesting merges.
-mergeTests :: [String]
-mergeTests =
-    concatMap checkKnownMergeEquiv knownMergeEquivs++
-    concatMap checkKnownMerge knownMerges
-checkKnownMerge :: ((FL Patch:\/: FL Patch) C(x y), FL Patch C(y z)) -> [String]
-checkKnownMerge (p1:\/:p2,p1') =
-   case merge (p1:\/:p2) of
-   _ :/\: p1a ->
-       if isIsEq (p1a `eqFL` p1')
-       then []
-       else ["Merge gave wrong value!\n"++show p1++show p2
-             ++"I expected\n"++show p1'
-             ++"but found instead\n"++show p1a]
-knownMerges :: [((FL Patch:\/:FL Patch) C(x y),FL Patch C(y z))]
-knownMerges = [
-                (testhunk 2 [BC.pack "c"] [BC.pack "d",BC.pack "e"]:\/:
-                 testhunk 1 [BC.pack "x"] [BC.pack "a",BC.pack "b"],
-                 testhunk 3 [BC.pack "c"] [BC.pack "d",BC.pack "e"]),
-                (testhunk 1 [BC.pack "x"] [BC.pack "a",BC.pack "b"]:\/:
-                 testhunk 2 [BC.pack "c"] [BC.pack "d",BC.pack "e"],
-                 testhunk 1 [BC.pack "x"] [BC.pack "a",BC.pack "b"]),
-                (testhunk 3 [BC.pack "A"] []:\/:
-                 testhunk 1 [BC.pack "B"] [],
-                 testhunk 2 [BC.pack "A"] []),
-                (fromPrim (rmdir "./test/world"):\/:
-                 fromPrim (hunk "./world" 3 [BC.pack "A"] []),
-                 fromPrim (rmdir "./test/world")),
-
-                ((quickhunk 1 "a" "bc" :>:
-                  quickhunk 6 "d" "ef" :>: NilFL):\/:
-                 (quickhunk 3 "a" "bc" :>:
-                  quickhunk 8 "d" "ef" :>: NilFL),
-                 (quickhunk 1 "a" "bc" :>:
-                  quickhunk 7 "d" "ef" :>: NilFL)),
-
-                (testhunk 1 [BC.pack "A"] [BC.pack "B"]:\/:
-                 testhunk 2 [BC.pack "B"] [BC.pack "C"],
-                 testhunk 1 [BC.pack "A"] [BC.pack "B"]),
-
-                (testhunk 2 [BC.pack "A"] [BC.pack "B",BC.pack "C"]:\/:
-                 testhunk 1 [BC.pack "B"] [BC.pack "C",BC.pack "D"],
-                 testhunk 3 [BC.pack "A"] [BC.pack "B",BC.pack "C"])]
-  where testhunk l o n = fromPrim $ hunk "test" l o n
-checkKnownMergeEquiv :: ((FL Patch:\/:FL Patch) C(x y),FL Patch C(y z)) -> [String]
-checkKnownMergeEquiv (p1:\/: p2, pe) =
-    case quickmerge (p1:\/:p2) of
-    p1' -> if checkAPatch (invert p1 :>: p2 :>: p1' :>: invert pe :>: NilFL)
-           then []
-           else ["Oh no, merger isn't equivalent...\n"++show p1++"\n"++show p2
-                 ++"in other words\n" ++ show (p1 :\/: p2)
-                 ++"merges as\n" ++ show (merge $ p1 :\/: p2)
-                 ++"merges to\n" ++ show (quickmerge $ p1 :\/: p2)
-                 ++"which is equivalent to\n" ++ show (effect p1')
-                 ++ "should all work out to\n"
-                 ++ show pe]
-knownMergeEquivs :: [((FL Patch :\/: FL Patch) C(x y), FL Patch C(y z))]
-knownMergeEquivs = [
-
-                     -- The following tests are going to be failed by the
-                     -- Conflictor code as a cleanup.
-
-                     --(addfile "test":\/:
-                     -- adddir "test",
-                     -- joinPatches (adddir "test" :>:
-                     --              addfile "test-conflict" :>: NilFL)),
-                     --(move "silly" "test":\/:
-                     -- adddir "test",
-                     -- joinPatches (adddir "test" :>:
-                     --              move "silly" "test-conflict" :>: NilFL)),
-                     --(addfile "test":\/:
-                     -- move "old" "test",
-                     -- joinPatches (addfile "test" :>:
-                     --              move "old" "test-conflict" :>: NilFL)),
-                     --(move "a" "test":\/:
-                     -- move "old" "test",
-                     -- joinPatches (move "a" "test" :>:
-                     --              move "old" "test-conflict" :>: NilFL)),
-                     (fromPrim (hunk "test" 1 [] [BC.pack "A"]) :\/:
-                       fromPrim (hunk "test" 1 [] [BC.pack "B"]),
-                       fromPrim (hunk "test" 1 [] [BC.pack "A", BC.pack "B"])),
-                     (fromPrim (hunk "test" 1 [] [BC.pack "a"]):\/:
-                      fromPrim (hunk "test" 1 [BC.pack "b"] []),
-                      unsafeCoerceP NilFL),
-                      --hunk "test" 1 [] [BC.pack "v v v v v v v",
-                      --                  BC.pack "*************",
-                      --                  BC.pack "a",
-                      --                  BC.pack "b",
-                      --                  BC.pack "^ ^ ^ ^ ^ ^ ^"]),
-                     (quickhunk 4 "a"  "" :\/:
-                      quickhunk 3 "a"  "",
-                      quickhunk 3 "aa" ""),
-                     ((quickhunk 1 "a" "bc" :>:
-                       quickhunk 6 "d" "ef" :>: NilFL) :\/:
-                       (quickhunk 3 "a" "bc" :>:
-                        quickhunk 8 "d" "ef" :>: NilFL),
-                      quickhunk 3 "a" "bc" :>:
-                      quickhunk 8 "d" "ef" :>:
-                      quickhunk 1 "a" "bc" :>:
-                      quickhunk 7 "d" "ef" :>: NilFL),
-                     (quickmerge (quickhunk 2 "" "bd":\/:quickhunk 2 "" "a") :\/:
-                              quickmerge (quickhunk 2 "" "c":\/:quickhunk 2 "" "a"),
-                              quickhunk 2 "" "abdc")
-                     ]
-
-
--- | It also is useful to verify that it doesn't matter which order we specify
---   the patches when we merge.
-mergeSwapTests :: [String]
-mergeSwapTests =
-    concat
-              [checkMergeSwap p1 p2 |
-               p1<-primitiveTestPatches,
-               p2<-primitiveTestPatches,
-               checkAPatch (invert p1:>:p2:>:NilFL)
-              ]
-checkMergeSwap :: FL Patch C(x y) -> FL Patch C(x z) -> [String]
-checkMergeSwap p1 p2 =
-    case merge (p2:\/:p1) of
-    _ :/\: p2' ->
-        case merge (p1:\/:p2) of
-        _ :/\: p1' ->
-            case commute (p1:>p2') of
-            Just (_:>p1'b) ->
-                if not $ p1'b `eqFLUnsafe` p1'
-                then ["Merge swapping problem with...\np1 "++
-                      show p1++"merged with\np2 "++
-                      show p2++"p1' is\np1' "++
-                      show p1'++"p1'b is\np1'b  "++
-                      show p1'b
-                     ]
-                else []
-            Nothing -> ["Merge commuting problem with...\np1 "++
-                        show p1++"merged with\np2 "++
-                        show p2++"gives\np2' "++
-                        show p2'++"which doesn't commute with p1.\n"
-                       ]
-
--- ----------------------------------------------------------------------
--- Patch test data
--- This is where we define the set of patches which we run our tests on.  This
--- should be kept up to date with as many interesting permutations of patch
--- types as possible.
--- ----------------------------------------------------------------------
-
-testPatches :: [FL Patch C(x y)]
-testPatchesNamed :: [Named Patch C(x y)]
-testPatchesAddfile :: [FL Patch C(x y)]
-testPatchesRmfile :: [FL Patch C(x y)]
-testPatchesHunk :: [FL Patch C(x y)]
-primitiveTestPatches :: [FL Patch C(x y)]
-testPatchesBinary :: [FL Patch C(x y)]
-testPatchesCompositeNocom :: [FL Patch C(x y)]
-testPatchesComposite :: [FL Patch C(x y)]
-testPatchesTwoCompositeHunks :: [FL Patch C(x y)]
-testPatchesCompositeHunks :: [FL Patch C(x y)]
-testPatchesCompositeFourHunks :: [FL Patch C(x y)]
-testPatchesMerged :: [FL Patch C(x y)]
-validPatches :: [FL Patch C(x y)]
-
-testPatchesNamed = [unsafePerformIO $
-                      namepatch "date is" "patch name" "David Roundy" []
-                                (fromPrim $ addfile "test"),
-                      unsafePerformIO $
-                      namepatch "Sat Oct 19 08:31:13 EDT 2002"
-                                "This is another patch" "David Roundy"
-                                ["This log file has","two lines in it"]
-                                (fromPrim $ rmfile "test")]
-testPatchesAddfile = map fromPrim
-                       [addfile "test",adddir "test",addfile "test/test"]
-testPatchesRmfile = map invert testPatchesAddfile
-testPatchesHunk  =
-    [fromPrim (hunk file line old new) |
-     file <- ["test"],
-     line <- [1,2],
-     old <- map (map BC.pack) partials,
-     new <- map (map BC.pack) partials,
-     old /= new
-    ]
-    where partials  = [["A"],["B"],[],["B","B2"]]
-
-primitiveTestPatches = testPatchesAddfile ++
-                         testPatchesRmfile ++
-                         testPatchesHunk ++
-                         [unsafeUnseal.fromJust.readPatch $
-                          BC.pack "move ./test/test ./hello",
-                          unsafeUnseal.fromJust.readPatch $
-                          BC.pack "move ./test ./hello"] ++
-                         testPatchesBinary
-
-testPatchesBinary =
-    [fromPrim $ binary "./hello"
-     (BC.pack $ "agadshhdhdsa75745457574asdgg" ++
-      "a326424677373735753246463gadshhdhdsaasdgg" ++
-      "a326424677373735753246463gadshhdhdsaasdgg" ++
-      "a326424677373735753246463gadshhdhdsaasdgg")
-     (BC.pack $ "adafjttkykrehhtrththrthrthre" ++
-      "a326424677373735753246463gadshhdhdsaasdgg" ++
-      "a326424677373735753246463gadshhdhdsaasdgg" ++
-      "a326424677373735753246463gadshhdhdsaagg"),
-     fromPrim $ binary "./hello"
-     B.empty
-     (BC.pack "adafjttkykrere")]
-
-testPatchesCompositeNocom =
-    take 50 [p1+>+p2|
-             p1<-primitiveTestPatches,
-             p2<-filter (\p->checkAPatch (p1:>:p:>:NilFL)) primitiveTestPatches,
-             commute (p1:>p2) == Nothing]
-
-testPatchesComposite =
-    take 100 [p1+>+p2|
-              p1<-primitiveTestPatches,
-              p2<-filter (\p->checkAPatch (p1:>:p:>:NilFL)) primitiveTestPatches,
-              commute (p1:>p2) /= Nothing,
-              commute (p1:>p2) /= Just (unsafeCoerceP p2:>unsafeCoerceP p1)]
-
-testPatchesTwoCompositeHunks =
-    take 100 [p1+>+p2|
-              p1<-testPatchesHunk,
-              p2<-filter (\p->checkAPatch (p1:>:p:>:NilFL)) testPatchesHunk]
-
-testPatchesCompositeHunks =
-    take 100 [p1+>+p2+>+p3|
-              p1<-testPatchesHunk,
-              p2<-filter (\p->checkAPatch (p1:>:p:>:NilFL)) testPatchesHunk,
-              p3<-filter (\p->checkAPatch (p1:>:p2:>:p:>:NilFL)) testPatchesHunk]
-
-testPatchesCompositeFourHunks =
-    take 100 [p1+>+p2+>+p3+>+p4|
-              p1<-testPatchesHunk,
-              p2<-filter (\p->checkAPatch (p1:>:p:>:NilFL)) testPatchesHunk,
-              p3<-filter (\p->checkAPatch (p1:>:p2:>:p:>:NilFL)) testPatchesHunk,
-              p4<-filter (\p->checkAPatch (p1:>:p2:>:p3:>:p:>:NilFL)) testPatchesHunk]
-
-testPatchesMerged =
-  take 200
-    [p2+>+quickmerge (p1:\/:p2) |
-     p1<-take 10 (drop 15 testPatchesCompositeHunks)++primitiveTestPatches
-         ++take 10 (drop 15 testPatchesTwoCompositeHunks)
-         ++ take 2 (drop 4 testPatchesCompositeFourHunks),
-     p2<-take 10 testPatchesCompositeHunks++primitiveTestPatches
-         ++take 10 testPatchesTwoCompositeHunks
-         ++take 2 testPatchesCompositeFourHunks,
-     checkAPatch (invert p1 :>: p2 :>: NilFL),
-     commute (p2:>p1) /= Just (p1:>p2)
-    ]
-
-testPatches =  primitiveTestPatches ++
-                testPatchesComposite ++
-                testPatchesCompositeNocom ++
-                testPatchesMerged
-
--- ----------------------------------------------------------------------
--- * Check patch test
--- ----------------------------------------------------------------------
-
-validPatches = [(quickhunk 4 "a" "b" :>:
-                 quickhunk 1 "c" "d" :>: NilFL),
-                (quickhunk 1 "a" "bc" :>:
-                 quickhunk 1 "b" "d" :>: NilFL),
-                (quickhunk 1 "a" "b" :>:
-                 quickhunk 1 "b" "d" :>: NilFL)]++testPatches
-
-testCheck :: [String]
-testCheck = concatMap tTestCheck validPatches
-tTestCheck :: PatchUnitTest (FL Patch)
-tTestCheck p = if checkAPatch p
-                 then []
-                 else ["Failed the check:  "++show p++"\n"]
-
diff --git a/src/Darcs/Test/Patch/Examples/Set1.hs b/src/Darcs/Test/Patch/Examples/Set1.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/Examples/Set1.hs
@@ -0,0 +1,419 @@
+--  Copyright (C) 2002-2005,2007 David Roundy
+--
+--  This program is free software; you can redistribute it and/or modify
+--  it under the terms of the GNU General Public License as published by
+--  the Free Software Foundation; either version 2, or (at your option)
+--  any later version.
+--
+--  This program is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+--  GNU General Public License for more details.
+--
+--  You should have received a copy of the GNU General Public License
+--  along with this program; see the file COPYING.  If not, write to
+--  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+--  Boston, MA 02110-1301, USA.
+
+{-# OPTIONS_GHC -fno-warn-orphans -fno-warn-deprecations #-}
+{-# LANGUAGE CPP #-}
+
+module Darcs.Test.Patch.Examples.Set1
+       ( knownCommutes, knownCantCommutes, knownMerges
+       , knownMergeEquivs, knownCanons, mergePairs2
+       , validPatches, commutePairs, mergePairs
+       , primitiveTestPatches, testPatches, testPatchesNamed
+       , primitiveCommutePairs ) where
+
+import System.IO.Unsafe ( unsafePerformIO )
+import qualified Data.ByteString.Char8 as BC ( pack )
+import qualified Data.ByteString as B ( empty )
+import Darcs.Patch
+     ( commute, invert, merge
+     , Named, namepatch
+     , readPatch, fromPrim
+     , adddir, addfile, hunk, binary, rmdir, rmfile, tokreplace )
+import Darcs.Patch.Prim ( PrimOf, FromPrim )
+import Darcs.Patch.Prim.V1 ( Prim )
+import qualified Darcs.Patch.V1 as V1 ( Patch )
+import Darcs.Test.Patch.Properties.Check( checkAPatch )
+import Darcs.Witnesses.Ordered
+import Darcs.Witnesses.Sealed ( unsafeUnseal )
+import Darcs.Witnesses.Unsafe ( unsafeCoerceP, unsafeCoercePEnd )
+
+#include "gadts.h"
+#include "impossible.h"
+
+type Patch = V1.Patch Prim
+
+-- The unit tester function is really just a glorified map for functions that
+-- return lists, in which the lists get concatenated (where map would end up
+-- with a list of lists).
+
+quickmerge :: (FL Patch :\/: FL Patch) C(x y) -> FL Patch C(y z)
+quickmerge (p1:\/:p2) = case merge (p1:\/:p2) of
+                        _ :/\: p1' -> unsafeCoercePEnd p1'
+
+-- ----------------------------------------------------------------------
+-- * Show/Read tests
+-- ----------------------------------------------------------------------
+
+-- | This test involves calling 'show' to print a string describing a patch,
+--   and then using readPatch to read it back in, and making sure the patch we
+--   read in is the same as the original.  Useful for making sure that I don't
+--   have any stupid IO bugs.
+
+-- ----------------------------------------------------------------------
+-- * Canonization tests
+-- ----------------------------------------------------------------------
+
+knownCanons :: [(FL Patch C(x y),FL Patch C(x y))]
+knownCanons =
+    [(quickhunk 1 "abcde" "ab" :>: NilFL, quickhunk 3 "cde"   "" :>: NilFL),
+     (quickhunk 1 "abcde" "bd" :>: NilFL,
+      quickhunk 1 "a" "" :>:
+      quickhunk 2 "c" "" :>:
+      quickhunk 3 "e" "" :>: NilFL),
+     (quickhunk 4 "a" "b" :>:
+      quickhunk 1 "c" "d" :>: NilFL,
+      quickhunk 1 "c" "d" :>:
+      quickhunk 4 "a" "b" :>: NilFL),
+     (quickhunk 1 "a" "" :>:
+      quickhunk 1 "" "b" :>: NilFL,
+      quickhunk 1 "a" "b" :>: NilFL),
+     (quickhunk 1 "ab" "c" :>:
+      quickhunk 1 "cd" "e" :>: NilFL,
+      quickhunk 1 "abd" "e" :>: NilFL),
+     (quickhunk 1 "abcde" "cde" :>: NilFL, quickhunk 1 "ab" "" :>: NilFL),
+     (quickhunk 1 "abcde" "acde" :>: NilFL, quickhunk 2 "b" "" :>: NilFL)]
+
+quickhunk :: (FromPrim p, PrimOf p ~ Prim) => Int -> String -> String -> p C(x y)
+quickhunk l o n = fromPrim $ hunk "test" l (map (\c -> BC.pack [c]) o)
+                                             (map (\c -> BC.pack [c]) n)
+
+-- ----------------------------------------------------------------------
+-- * Merge/unmgerge tests
+-- ----------------------------------------------------------------------
+
+-- | It should always be true that if two patches can be unmerged, then merging
+--   the resulting patches should give them back again.
+mergePairs :: [(FL Patch :\/: FL Patch) C(x y)]
+mergePairs =
+  take 400 [(p1:\/:p2)|
+            i <- [0..(length testPatches)-1],
+            p1<-[testPatches!!i],
+            p2<-drop i testPatches,
+            checkAPatch (invert p2 :>: p1 :>: NilFL)]
+
+-- ----------------------------------------------------------------------
+-- * Commute/recommute tests
+-- ----------------------------------------------------------------------
+
+-- | Here we test to see if commuting patch A and patch B and then commuting
+-- the result gives us patch A and patch B again.  The set of patches (A,B)
+-- is chosen from the set of all pairs of test patches by selecting those which
+-- commute with one another.
+commutePairs :: [(FL Patch :> FL Patch) C(x y)]
+commutePairs =
+  take 200 [(p1:>p2)|
+            p1<-testPatches,
+            p2<-filter (\p->checkAPatch (p1:>:p:>:NilFL)) testPatches,
+            commute (p1:>p2) /= Nothing]
+
+primitiveCommutePairs :: [(FL Patch :> FL Patch) C(x y)]
+primitiveCommutePairs =
+  [(p2:>p1)|
+   p1<-primitiveTestPatches,
+   p2<-primitiveTestPatches,
+   commute (p2:>p1) /= Nothing,
+   checkAPatch (p2:>:p1:>:NilFL)]
+
+-- ----------------------------------------------------------------------
+-- * Commute tests
+-- ----------------------------------------------------------------------
+
+-- | Here we provide a set of known interesting commutes.
+knownCommutes :: [((FL Patch:<FL Patch) C(x y),(FL Patch:<FL Patch) C(x y))]
+knownCommutes = [
+                  (testhunk 1 [] ["A"]:<
+                   testhunk 2 [] ["B"],
+                   testhunk 3 [] ["B"]:<
+                   testhunk 1 [] ["A"]),
+                  (fromPrim (tokreplace "test" "A-Za-z_" "old" "new"):<
+                   testhunk 2
+                   ["hello world all that is old is good old_"]
+                   ["I don't like old things"],
+                   testhunk 2
+                   ["hello world all that is new is good old_"]
+                   ["I don't like new things"]:<
+                   fromPrim (tokreplace "test" "A-Za-z_" "old" "new")),
+                  (testhunk 1 ["A"] ["B"]:<
+                   testhunk 2 ["C"] ["D"],
+                   testhunk 2 ["C"] ["D"]:<
+                   testhunk 1 ["A"] ["B"]),
+                  (fromPrim (rmfile "NwNSO"):<
+                   (quickmerge (fromPrim (addfile "hello"):\/:fromPrim (addfile "hello"))),
+                   (quickmerge (fromPrim (addfile "hello"):\/:fromPrim (addfile "hello"))):<
+                   fromPrim (rmfile "NwNSO")),
+
+                  (quickmerge (testhunk 3 ["o"] ["n"]:\/:
+                               testhunk 3 ["o"] ["v"]):<
+                   testhunk 1 [] ["a"],
+                   testhunk 1 [] ["a"]:<
+                   quickmerge (testhunk 2 ["o"] ["n"]:\/:
+                               testhunk 2 ["o"] ["v"])),
+
+                  (testhunk 1 ["A"] []:<
+                   testhunk 3 ["B"] [],
+                   testhunk 2 ["B"] []:<
+                   testhunk 1 ["A"] []),
+
+                  (testhunk 1 ["A"] ["B"]:<
+                   testhunk 2 ["B"] ["C"],
+                   testhunk 2 ["B"] ["C"]:<
+                   testhunk 1 ["A"] ["B"]),
+
+                  (testhunk 1 ["A"] ["B"]:<
+                   testhunk 3 ["B"] ["C"],
+                   testhunk 3 ["B"] ["C"]:<
+                   testhunk 1 ["A"] ["B"]),
+
+                  (testhunk 1 ["A"] ["B","C"]:<
+                   testhunk 2 ["B"] ["C","D"],
+                   testhunk 3 ["B"] ["C","D"]:<
+                   testhunk 1 ["A"] ["B","C"])]
+  where testhunk l o n = fromPrim $ hunk "test" l (map BC.pack o) (map BC.pack n)
+
+knownCantCommutes :: [(FL Patch:< FL Patch) C(x y)]
+knownCantCommutes = [
+                      (testhunk 2 ["o"] ["n"]:<
+                       testhunk 1 [] ["A"]),
+                      (testhunk 1 [] ["A"]:<
+                       testhunk 1 ["o"] ["n"]),
+                      (quickmerge (testhunk 2 ["o"] ["n"]:\/:
+                                   testhunk 2 ["o"] ["v"]):<
+                       testhunk 1 [] ["a"]),
+                      (fromPrim (hunk "test" 1 ([BC.pack "a"]) ([BC.pack "b"])):<
+                       fromPrim (addfile "test"))]
+  where testhunk l o n = fromPrim $ hunk "test" l (map BC.pack o) (map BC.pack n)
+
+-- ----------------------------------------------------------------------
+-- * Merge tests
+-- ----------------------------------------------------------------------
+
+-- | Here we provide a set of known interesting merges.
+knownMerges :: [((FL Patch:\/:FL Patch) C(x y),FL Patch C(y z))]
+knownMerges = [
+                (testhunk 2 [BC.pack "c"] [BC.pack "d",BC.pack "e"]:\/:
+                 testhunk 1 [BC.pack "x"] [BC.pack "a",BC.pack "b"],
+                 testhunk 3 [BC.pack "c"] [BC.pack "d",BC.pack "e"]),
+                (testhunk 1 [BC.pack "x"] [BC.pack "a",BC.pack "b"]:\/:
+                 testhunk 2 [BC.pack "c"] [BC.pack "d",BC.pack "e"],
+                 testhunk 1 [BC.pack "x"] [BC.pack "a",BC.pack "b"]),
+                (testhunk 3 [BC.pack "A"] []:\/:
+                 testhunk 1 [BC.pack "B"] [],
+                 testhunk 2 [BC.pack "A"] []),
+                (fromPrim (rmdir "./test/world"):\/:
+                 fromPrim (hunk "./world" 3 [BC.pack "A"] []),
+                 fromPrim (rmdir "./test/world")),
+
+                ((quickhunk 1 "a" "bc" :>:
+                  quickhunk 6 "d" "ef" :>: NilFL):\/:
+                 (quickhunk 3 "a" "bc" :>:
+                  quickhunk 8 "d" "ef" :>: NilFL),
+                 (quickhunk 1 "a" "bc" :>:
+                  quickhunk 7 "d" "ef" :>: NilFL)),
+
+                (testhunk 1 [BC.pack "A"] [BC.pack "B"]:\/:
+                 testhunk 2 [BC.pack "B"] [BC.pack "C"],
+                 testhunk 1 [BC.pack "A"] [BC.pack "B"]),
+
+                (testhunk 2 [BC.pack "A"] [BC.pack "B",BC.pack "C"]:\/:
+                 testhunk 1 [BC.pack "B"] [BC.pack "C",BC.pack "D"],
+                 testhunk 3 [BC.pack "A"] [BC.pack "B",BC.pack "C"])]
+  where testhunk l o n = fromPrim $ hunk "test" l o n
+
+knownMergeEquivs :: [((FL Patch :\/: FL Patch) C(x y), FL Patch C(y z))]
+knownMergeEquivs = [
+
+                     -- The following tests are going to be failed by the
+                     -- Conflictor code as a cleanup.
+
+                     --(addfile "test":\/:
+                     -- adddir "test",
+                     -- joinPatches (adddir "test" :>:
+                     --              addfile "test-conflict" :>: NilFL)),
+                     --(move "silly" "test":\/:
+                     -- adddir "test",
+                     -- joinPatches (adddir "test" :>:
+                     --              move "silly" "test-conflict" :>: NilFL)),
+                     --(addfile "test":\/:
+                     -- move "old" "test",
+                     -- joinPatches (addfile "test" :>:
+                     --              move "old" "test-conflict" :>: NilFL)),
+                     --(move "a" "test":\/:
+                     -- move "old" "test",
+                     -- joinPatches (move "a" "test" :>:
+                     --              move "old" "test-conflict" :>: NilFL)),
+                     (fromPrim (hunk "test" 1 [] [BC.pack "A"]) :\/:
+                       fromPrim (hunk "test" 1 [] [BC.pack "B"]),
+                       fromPrim (hunk "test" 1 [] [BC.pack "A", BC.pack "B"])),
+                     (fromPrim (hunk "test" 1 [] [BC.pack "a"]):\/:
+                      fromPrim (hunk "test" 1 [BC.pack "b"] []),
+                      unsafeCoerceP NilFL),
+                      --hunk "test" 1 [] [BC.pack "v v v v v v v",
+                      --                  BC.pack "*************",
+                      --                  BC.pack "a",
+                      --                  BC.pack "b",
+                      --                  BC.pack "^ ^ ^ ^ ^ ^ ^"]),
+                     (quickhunk 4 "a"  "" :\/:
+                      quickhunk 3 "a"  "",
+                      quickhunk 3 "aa" ""),
+                     ((quickhunk 1 "a" "bc" :>:
+                       quickhunk 6 "d" "ef" :>: NilFL) :\/:
+                       (quickhunk 3 "a" "bc" :>:
+                        quickhunk 8 "d" "ef" :>: NilFL),
+                      quickhunk 3 "a" "bc" :>:
+                      quickhunk 8 "d" "ef" :>:
+                      quickhunk 1 "a" "bc" :>:
+                      quickhunk 7 "d" "ef" :>: NilFL),
+                     (quickmerge (quickhunk 2 "" "bd":\/:quickhunk 2 "" "a") :\/:
+                              quickmerge (quickhunk 2 "" "c":\/:quickhunk 2 "" "a"),
+                              quickhunk 2 "" "abdc")
+                     ]
+
+
+-- | It also is useful to verify that it doesn't matter which order we specify
+--   the patches when we merge.
+mergePairs2 :: [(FL Patch C(x y), FL Patch C(x z))]
+mergePairs2 = [(p1, p2) |
+               p1<-primitiveTestPatches,
+               p2<-primitiveTestPatches,
+               checkAPatch (invert p1:>:p2:>:NilFL)
+              ]
+
+-- ----------------------------------------------------------------------
+-- Patch test data
+-- This is where we define the set of patches which we run our tests on.  This
+-- should be kept up to date with as many interesting permutations of patch
+-- types as possible.
+-- ----------------------------------------------------------------------
+
+testPatches :: [FL Patch C(x y)]
+testPatchesNamed :: [Named Patch C(x y)]
+testPatchesAddfile :: [FL Patch C(x y)]
+testPatchesRmfile :: [FL Patch C(x y)]
+testPatchesHunk :: [FL Patch C(x y)]
+primitiveTestPatches :: [FL Patch C(x y)]
+testPatchesBinary :: [FL Patch C(x y)]
+testPatchesCompositeNocom :: [FL Patch C(x y)]
+testPatchesComposite :: [FL Patch C(x y)]
+testPatchesTwoCompositeHunks :: [FL Patch C(x y)]
+testPatchesCompositeHunks :: [FL Patch C(x y)]
+testPatchesCompositeFourHunks :: [FL Patch C(x y)]
+testPatchesMerged :: [FL Patch C(x y)]
+validPatches :: [FL Patch C(x y)]
+
+testPatchesNamed = [unsafePerformIO $
+                      namepatch "date is" "patch name" "David Roundy" []
+                                (fromPrim $ addfile "test"),
+                      unsafePerformIO $
+                      namepatch "Sat Oct 19 08:31:13 EDT 2002"
+                                "This is another patch" "David Roundy"
+                                ["This log file has","two lines in it"]
+                                (fromPrim $ rmfile "test")]
+testPatchesAddfile = map fromPrim
+                       [addfile "test",adddir "test",addfile "test/test"]
+testPatchesRmfile = map invert testPatchesAddfile
+testPatchesHunk  =
+    [fromPrim (hunk file line old new) |
+     file <- ["test"],
+     line <- [1,2],
+     old <- map (map BC.pack) partials,
+     new <- map (map BC.pack) partials,
+     old /= new
+    ]
+    where partials  = [["A"],["B"],[],["B","B2"]]
+
+primitiveTestPatches = testPatchesAddfile ++
+                         testPatchesRmfile ++
+                         testPatchesHunk ++
+                         [unsafeUnseal.fromJust.readPatch $
+                          BC.pack "move ./test/test ./hello",
+                          unsafeUnseal.fromJust.readPatch $
+                          BC.pack "move ./test ./hello"] ++
+                         testPatchesBinary
+
+testPatchesBinary =
+    [fromPrim $ binary "./hello"
+     (BC.pack $ "agadshhdhdsa75745457574asdgg" ++
+      "a326424677373735753246463gadshhdhdsaasdgg" ++
+      "a326424677373735753246463gadshhdhdsaasdgg" ++
+      "a326424677373735753246463gadshhdhdsaasdgg")
+     (BC.pack $ "adafjttkykrehhtrththrthrthre" ++
+      "a326424677373735753246463gadshhdhdsaasdgg" ++
+      "a326424677373735753246463gadshhdhdsaasdgg" ++
+      "a326424677373735753246463gadshhdhdsaagg"),
+     fromPrim $ binary "./hello"
+     B.empty
+     (BC.pack "adafjttkykrere")]
+
+testPatchesCompositeNocom =
+    take 50 [p1+>+p2|
+             p1<-primitiveTestPatches,
+             p2<-filter (\p->checkAPatch (p1:>:p:>:NilFL)) primitiveTestPatches,
+             commute (p1:>p2) == Nothing]
+
+testPatchesComposite =
+    take 100 [p1+>+p2|
+              p1<-primitiveTestPatches,
+              p2<-filter (\p->checkAPatch (p1:>:p:>:NilFL)) primitiveTestPatches,
+              commute (p1:>p2) /= Nothing,
+              commute (p1:>p2) /= Just (unsafeCoerceP p2:>unsafeCoerceP p1)]
+
+testPatchesTwoCompositeHunks =
+    take 100 [p1+>+p2|
+              p1<-testPatchesHunk,
+              p2<-filter (\p->checkAPatch (p1:>:p:>:NilFL)) testPatchesHunk]
+
+testPatchesCompositeHunks =
+    take 100 [p1+>+p2+>+p3|
+              p1<-testPatchesHunk,
+              p2<-filter (\p->checkAPatch (p1:>:p:>:NilFL)) testPatchesHunk,
+              p3<-filter (\p->checkAPatch (p1:>:p2:>:p:>:NilFL)) testPatchesHunk]
+
+testPatchesCompositeFourHunks =
+    take 100 [p1+>+p2+>+p3+>+p4|
+              p1<-testPatchesHunk,
+              p2<-filter (\p->checkAPatch (p1:>:p:>:NilFL)) testPatchesHunk,
+              p3<-filter (\p->checkAPatch (p1:>:p2:>:p:>:NilFL)) testPatchesHunk,
+              p4<-filter (\p->checkAPatch (p1:>:p2:>:p3:>:p:>:NilFL)) testPatchesHunk]
+
+testPatchesMerged =
+  take 200
+    [p2+>+quickmerge (p1:\/:p2) |
+     p1<-take 10 (drop 15 testPatchesCompositeHunks)++primitiveTestPatches
+         ++take 10 (drop 15 testPatchesTwoCompositeHunks)
+         ++ take 2 (drop 4 testPatchesCompositeFourHunks),
+     p2<-take 10 testPatchesCompositeHunks++primitiveTestPatches
+         ++take 10 testPatchesTwoCompositeHunks
+         ++take 2 testPatchesCompositeFourHunks,
+     checkAPatch (invert p1 :>: p2 :>: NilFL),
+     commute (p2:>p1) /= Just (p1:>p2)
+    ]
+
+testPatches =  primitiveTestPatches ++
+                testPatchesComposite ++
+                testPatchesCompositeNocom ++
+                testPatchesMerged
+
+-- ----------------------------------------------------------------------
+-- * Check patch test
+-- ----------------------------------------------------------------------
+
+validPatches = [(quickhunk 4 "a" "b" :>:
+                 quickhunk 1 "c" "d" :>: NilFL),
+                (quickhunk 1 "a" "bc" :>:
+                 quickhunk 1 "b" "d" :>: NilFL),
+                (quickhunk 1 "a" "b" :>:
+                 quickhunk 1 "b" "d" :>: NilFL)]++testPatches
diff --git a/src/Darcs/Test/Patch/Examples/Set2Unwitnessed.hs b/src/Darcs/Test/Patch/Examples/Set2Unwitnessed.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/Examples/Set2Unwitnessed.hs
@@ -0,0 +1,492 @@
+-- Copyright (C) 2007 David Roundy
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 2, or (at your option)
+-- any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program; see the file COPYING.  If not, write to
+-- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+-- Boston, MA 02110-1301, USA.
+
+{-# OPTIONS_GHC -fno-warn-deprecations -fno-warn-orphans #-}
+{-# LANGUAGE CPP #-}
+
+#include "gadts.h"
+
+module Darcs.Test.Patch.Examples.Set2Unwitnessed
+       ( primPermutables, primPatches
+       , commutables, commutablesFL
+       , realCommutables , realMergeables, realTriples
+       , realNonduplicateTriples, realPatches, realPatchLoopExamples
+       ) where
+
+import Data.Maybe ( catMaybes )
+import qualified Data.ByteString.Char8 as BC ( pack )
+import Darcs.Witnesses.Sealed
+import Darcs.Patch ( invert, hunk )
+import Darcs.Patch.Patchy ( Invert(..) )
+import Darcs.Patch.Prim ( PrimPatch )
+import Darcs.Patch.Prim.V1 ( Prim )
+import Darcs.Patch.V2 ( RealPatch )
+import Darcs.Patch.V2.Real ( prim2real )
+-- import Darcs.Test.Patch.Test () -- for instance Eq Patch
+-- import Darcs.Test.Patch.Examples.Set2Unwitnessed
+import Darcs.Witnesses.Unsafe ( unsafeCoerceP )
+import qualified Darcs.Test.Patch.Arbitrary.Real as W ( notDuplicatestriple )
+--import Printer ( greenText )
+--import Darcs.ColorPrinter ( traceDoc )
+--import Darcs.ColorPrinter ( errorDoc )
+import Darcs.ColorPrinter () -- for instance Show Doc
+import Darcs.Test.Patch.WSub
+
+import qualified Darcs.Witnesses.Ordered as W ( (:>), (:\/:) )
+import qualified Data.ByteString as B ( ByteString )
+import Darcs.Test.Patch.V1Model ( V1Model, Content
+                                , makeRepo, makeName, makeFile)
+import Darcs.Test.Patch.WithState ( WithStartState(..) )
+import Darcs.Patch.Prim.V1.Core ( Prim(FP), FilePatchType(Hunk) )
+import Darcs.Patch.FileName ( FileName, fp2fn )
+import Darcs.Patch.Prim ( PrimPatchBase(..), FromPrim )
+import Darcs.Patch.Merge ( Merge )
+import Darcs.Test.Patch.Arbitrary.Generic
+    ( Tree(..)
+    , TreeWithFlattenPos(..)
+    , commutePairFromTree, commuteTripleFromTree
+    , mergePairFromCommutePair, commutePairFromTWFP
+    , canonizeTree
+    )
+
+-- import Debug.Trace
+-- #include "impossible.h"
+
+makeSimpleRepo :: String -> Content -> V1Model C(x)
+makeSimpleRepo filename content = makeRepo [(makeName filename, makeFile content)]
+
+
+w_tripleExamples :: (FromPrim p, Merge p, Invert p, PrimPatchBase p, PrimOf p ~ Prim) => [Sealed2 (p W.:> p W.:> p)]
+w_tripleExamples = [commuteTripleFromTree seal2 $
+                   WithStartState (makeSimpleRepo "file" [])
+                   (ParTree
+                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "g"]))
+                     (SeqTree (FP (fp2fn "./file") (Hunk 2 [] [BC.pack "j"]))
+                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "s"])) NilTree)))
+                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "e"])) NilTree))
+                  ,commuteTripleFromTree seal2 $
+                   WithStartState (makeSimpleRepo "file" [BC.pack "j"])
+                   (ParTree
+                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "s"]))
+                     (ParTree
+                      (SeqTree (FP (fp2fn "./file") (Hunk 2 [BC.pack "j"] [])) NilTree)
+                      (SeqTree (FP (fp2fn "./file") (Hunk 2 [BC.pack "j"] [])) NilTree)))
+                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "j"] [])) NilTree))
+                  ]
+
+
+w_mergeExamples :: (FromPrim p, Merge p, Invert p, PrimPatchBase p, PrimOf p ~ Prim) => [Sealed2 (p W.:\/: p)]
+w_mergeExamples = map (unseal2 (mergePairFromCommutePair seal2)) w_commuteExamples
+
+w_commuteExamples :: (FromPrim p, Merge p, PrimPatchBase p, PrimOf p ~ Prim) => [Sealed2 (p W.:> p)]
+w_commuteExamples = [
+                   commutePairFromTWFP seal2 $
+                   WithStartState (makeSimpleRepo "file" [])
+                   (TWFP 3
+                    (ParTree
+                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "h"])) NilTree)
+                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "b"]))
+                       (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "f"]))
+                         (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "v"]))
+                           (SeqTree (FP (fp2fn "./file") (Hunk 2 [BC.pack "f"] [])) NilTree)))))),
+                   commutePairFromTWFP seal2 $
+                   WithStartState
+                   (makeSimpleRepo "file" [BC.pack "f",BC.pack "s",BC.pack "d"])
+                   (TWFP 3
+                    (ParTree
+                     (SeqTree (FP (fp2fn "./file") (Hunk 3 [BC.pack "d"] [])) NilTree)
+                     (ParTree
+                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "f"] [])) NilTree)
+                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "f"] []))
+                        (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "s",BC.pack "d"] []))
+                          (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "v"])) NilTree)))))),
+{-                   commutePairFromTWFP seal2 $
+                   WithStartState
+                   (makeSimpleRepo "file" [BC.pack "f",BC.pack "u",
+                                            BC.pack "s",BC.pack "d"])
+                   (TWFP 5
+                    (ParTree
+                     (SeqTree (FP (fp2fn "./file") (Hunk 5 [] [BC.pack "x"]))
+                      (SeqTree (FP (fp2fn "./file") (Hunk 4 [BC.pack "d"] [])) NilTree))
+                     (ParTree
+                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "f",BC.pack "u"] [])) NilTree)
+                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "f"] []))
+                       (SeqTree (FP(fp2fn "./file") (Hunk 1 [BC.pack "u",BC.pack "s",BC.pack "d"] []))
+                        (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "a"]))
+                         (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "a"] [])) NilTree))))))),-}
+                   commutePairFromTree seal2 $
+                   WithStartState (makeSimpleRepo "file" [BC.pack "n",BC.pack "t",BC.pack "h"])
+                   (ParTree
+                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "n",BC.pack "t",BC.pack "h"] []))
+                     NilTree)
+                    (SeqTree (FP (fp2fn "./file") (Hunk 3 [BC.pack "h"] []))
+                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "n"] []))
+                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "t"] [])) NilTree)))),
+                  commutePairFromTree seal2 $
+                  WithStartState (makeSimpleRepo "file" [])
+                  (ParTree
+                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "n"])) NilTree)
+                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "i"]))
+                                (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "i"])) NilTree))),
+                  commutePairFromTree seal2 $
+                  WithStartState (makeSimpleRepo "file" [])
+                  (ParTree
+                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "c"]))
+                     (ParTree
+                       (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "c"] [BC.pack "r"])) NilTree)
+                       (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "h"]))
+                        (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "d"])) NilTree))))
+                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "f"])) NilTree)),
+                  commutePairFromTWFP seal2 $
+                  WithStartState (makeSimpleRepo "file" [])
+                  (TWFP 1
+                  (ParTree
+                   (ParTree
+                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "t"])) NilTree)
+                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "t"])) NilTree))
+                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "f"])) NilTree))),
+                   commutePairFromTWFP seal2 $
+                   WithStartState (makeSimpleRepo "file" [BC.pack "f",BC.pack " r",
+                                                            BC.pack "c",BC.pack "v"])
+                   (TWFP 4
+                    (ParTree
+                     (SeqTree (FP (fp2fn "./file") (Hunk 3 [BC.pack "c",BC.pack "v"] []))
+                        (ParTree
+                         (SeqTree (FP (fp2fn "./file") (Hunk 2 [BC.pack "r"] []))
+                          (SeqTree (FP (fp2fn "fi le") (Hunk 1 [BC.pack "f"] [])) NilTree))
+                         (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "f",BC.pack "r"] []))
+                          (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "y"])) NilTree))))
+                     (SeqTree (FP (fp2fn "./file") (Hunk 4 [BC.pack "v"] [])) NilTree))),
+                   commutePairFromTree seal2 $
+                   WithStartState (makeSimpleRepo "file" [])
+                   (ParTree
+                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "z"])) NilTree)
+                    (ParTree
+                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "f"])) NilTree)
+                     (ParTree
+                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "r"])) NilTree)
+                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "d"])) NilTree))))
+                 , commutePairFromTree seal2 $
+                   WithStartState (makeSimpleRepo "file" [BC.pack "t",BC.pack "r",BC.pack "h"])
+                   (ParTree
+                    (ParTree
+                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "t",BC.pack "r",BC.pack "h"] []))
+                              NilTree)
+                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "o"])) NilTree))
+                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "t"] []))
+                     (SeqTree (FP (fp2fn "./file") (Hunk 2 [BC.pack "h"] [])) NilTree)))
+                 , commutePairFromTWFP seal2 $
+                   WithStartState (makeSimpleRepo "file" []) $
+                   TWFP 2
+                   (ParTree
+                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "h"])) NilTree)
+                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "y"]))
+                     (SeqTree (FP (fp2fn "./file") (Hunk 2 [] [BC.pack "m"]))
+                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "v"])) NilTree))))
+                 , commutePairFromTree seal2 $
+                 WithStartState (makeSimpleRepo "file" [])
+                 (ParTree
+                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "p"]))
+                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "p"] []))
+                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "c"])) NilTree)))
+                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "z"])) NilTree))
+                 , commutePairFromTree seal2 $
+                 WithStartState (makeSimpleRepo "file" [])
+                 (ParTree
+                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "j" ]))
+                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "j"] [])) NilTree))
+                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "v"])) NilTree))
+                 , commutePairFromTree seal2 $
+                 WithStartState (makeSimpleRepo "file" [])
+                 (ParTree
+                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "v"])) NilTree)
+                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "j" ]))
+                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "j"] [])) NilTree)))
+                 , commutePairFromTree seal2 $
+                 WithStartState (makeSimpleRepo "file" [BC.pack "x",BC.pack "c"])
+                 (ParTree
+                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "h"]))
+                   (ParTree
+                    (SeqTree (FP (fp2fn "./file") (Hunk 3 [BC.pack "c"] [])) NilTree)
+                    (SeqTree (FP (fp2fn "./file") (Hunk 2 [BC.pack "x"] []))
+                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "j"])) NilTree))))
+                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "l"])) NilTree))
+                 , commutePairFromTree seal2 $
+                 WithStartState (makeSimpleRepo "file" [])
+                 (ParTree
+                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] (packStringLetters "s"))) NilTree)
+                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] (packStringLetters "k")))
+                   (SeqTree (FP (fp2fn "./file") (Hunk 1 (packStringLetters "k") []))
+                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] (packStringLetters "m")))
+                     (SeqTree (FP (fp2fn "./file") (Hunk 1 (packStringLetters "m") [])) NilTree)))))
+                 ]
+
+packStringLetters :: String -> [B.ByteString]
+packStringLetters = map (BC.pack . (:[]))
+
+w_realPatchLoopExamples :: [Sealed (WithStartState V1Model (Tree Prim))]
+w_realPatchLoopExamples =
+    [Sealed (WithStartState (makeSimpleRepo fx_name [])
+     $ canonizeTree
+     (ParTree
+      (SeqTree (FP fx (Hunk 1 [] (packStringLetters "pkotufogbvdabnmbzajvolwviqebieonxvcvuvigkfgybmqhzuaaurjspd")))
+       (ParTree
+        (SeqTree (FP fx (Hunk 47 (packStringLetters "qhzu") (packStringLetters "zafybdcokyjskcgnvhkbzpysaafnjjhcstgrczplxsfwagmh")))
+         (ParTree
+          (ParTree
+           NilTree
+           (ParTree
+            (ParTree
+             (ParTree
+              (SeqTree (FP fx (Hunk 15 (packStringLetters "mbzajvolwviqebieonxvcvuvigkfgyb") (packStringLetters "vujnxnhvybvpouyciaabszfmgssezlwwjgnethvrpnfrkubphzvdgymjjoacppqps")))
+               (ParTree
+                NilTree
+                (ParTree
+                 (SeqTree (FP fx (Hunk 40 (packStringLetters "ssezlwwjgnethvrpnfrkubphzvdgymjjoacppqpsmzafybdcokyjskcgnvhkbz") (packStringLetters "wnesidpccwoiqiichxaaejdsyrhrusqljlcoro")))
+                  (ParTree
+                   (ParTree
+                    (SeqTree (FP fx (Hunk 12 (packStringLetters "abnvujnxnhvybvpouyciaabszfmgwnesidpccwoiqii") (packStringLetters "czfdhqkipdstfjycqaxwnbxrihrufdeyneqiiiafwzlmg"))) NilTree)
+                    NilTree)
+                   NilTree))
+                 (SeqTree (FP fx (Hunk 25 [] (packStringLetters "dihgmsotezucqdgxczvcivijootyvhlwymbiueufnvpwpeukmskqllalfe"))) NilTree))))
+              (SeqTree (FP fx (Hunk 56 (packStringLetters "yjskcgnvhkbzpysaafnjjhcstgrczplxsfwagmhaaurjsp") (packStringLetters "xldhrutyhcyaqeezwujiguawfyawjjqlirxshjddvq"))) NilTree))
+             (SeqTree (FP fx (Hunk 20 [] (packStringLetters "ooygwiyogqrqnytixqtmvdxx")))
+              (SeqTree (FP fx (Hunk 26 (packStringLetters "yogqrqnytixqtmvdxxvolwviqebieonxvcvuvigkfgybmzafybdcokyjskcgnvhkbz") (packStringLetters "akhsmlbkdxnvfoikmiatfbpzdrsyykkpoxvvddeaspzxe")))
+               (SeqTree (FP fx (Hunk 39 [] (packStringLetters "ji")))
+                (ParTree
+                 NilTree
+                 (ParTree
+                  NilTree
+                  (ParTree
+                   (ParTree
+                    NilTree
+                    (SeqTree (FP fx (Hunk 26 (packStringLetters "akhsmlbkdxnvfjioikmiatfbpzdrsyykkpoxvvddeaspzxepysaafnjjhcstgrczplxs") (packStringLetters "onjbhddskcj")))
+                     (SeqTree (FP fx (Hunk 39 [] (packStringLetters "fyscunxxxjjtyqpfxeznhtwvlphmp"))) NilTree)))
+                   (ParTree
+                    NilTree
+                    (SeqTree (FP fx (Hunk 44 [] (packStringLetters "xcchzwmzoezxkmkhcmesplnjpqriypshgiqklgdnbmmkldnydiy")))
+                     (ParTree
+                      NilTree
+                      (SeqTree (FP fx (Hunk 64 (packStringLetters "plnjpqriypshgiqklgdnbmmkldnydiymiatfbpzdrsyykkpoxvvddeaspzxepysaafn") (packStringLetters "anjlzfdqbjqbcplvqvkhwjtkigp"))) NilTree)))))))))))
+            (ParTree
+             NilTree
+             NilTree)))
+          NilTree))
+        NilTree))
+      (ParTree
+       NilTree
+       (SeqTree (FP fx (Hunk 1 [] (packStringLetters "ti")))
+        (SeqTree (FP fx (Hunk 1 (packStringLetters "t") (packStringLetters "ybcop")))
+         (SeqTree (FP fx (Hunk 2 [] (packStringLetters "dvlhgwqlpaeweerqrhnjtfolczbqbzoccnvdsyqiefqitrqneralf")))
+          (SeqTree (FP fx (Hunk 15 [] (packStringLetters "yairbjphwtnaerccdlfewujvjvmjakbc")))
+           (SeqTree (FP fx (Hunk 51 [] (packStringLetters "xayvfuwaiiogginufnhsrmktpmlbvxiakjwllddkiyofyfw")))
+            (ParTree
+             NilTree
+             NilTree)))))))))]
+  where
+      fx_name :: String
+      fx_name = "F"
+
+      fx :: FileName
+      fx = fp2fn "./F"
+
+
+mergeExamples :: [Sealed2 (RealPatch Prim :\/: RealPatch Prim)]
+mergeExamples = map (mapSeal2 fromW) w_mergeExamples
+
+realPatchLoopExamples :: [Sealed (WithStartState V1Model (Tree Prim))]
+realPatchLoopExamples = w_realPatchLoopExamples
+
+commuteExamples :: [Sealed2 (RealPatch Prim :> RealPatch Prim)]
+commuteExamples = map (mapSeal2 fromW) w_commuteExamples
+
+tripleExamples :: [Sealed2 (RealPatch Prim :> RealPatch Prim :> RealPatch Prim)]
+tripleExamples = map (mapSeal2 fromW) w_tripleExamples
+
+notDuplicatestriple :: (RealPatch Prim :> RealPatch Prim :> RealPatch Prim) C(x y) -> Bool
+notDuplicatestriple = W.notDuplicatestriple . toW
+
+quickhunk :: PrimPatch prim => Int -> String -> String -> prim C(x y)
+quickhunk l o n = hunk "test" l (map (\c -> BC.pack [c]) o)
+                                (map (\c -> BC.pack [c]) n)
+
+primPermutables :: [(Prim :> Prim :> Prim) C(x y)]
+primPermutables =
+    [quickhunk 0 "e" "bo" :> quickhunk 3 "" "x" :> quickhunk 2 "f" "qljo"]
+
+mergeables :: [(Prim :\/: Prim) C(x y)]
+mergeables = [quickhunk 1 "a" "b" :\/: quickhunk 1 "a" "c",
+              quickhunk 1 "a" "b" :\/: quickhunk 3 "z" "c",
+              quickhunk 0 "" "a" :\/: quickhunk 1 "" "b",
+              quickhunk 0 "a" "" :\/: quickhunk 1 "" "b",
+              quickhunk 0 "a" "" :\/: quickhunk 1 "b" "",
+              quickhunk 0 "" "a" :\/: quickhunk 1 "b" ""
+             ]
+
+mergeablesFL :: [(FL Prim :\/: FL Prim) C(x y)]
+mergeablesFL = map (\ (x:\/:y) -> (x :>: NilFL) :\/: (y :>: NilFL)) mergeables ++
+           [] --    [(quickhunk 1 "a" "b" :>: quickhunk 3 "z" "c" :>: NilFL)
+              --  :\/: (quickhunk 1 "a" "z" :>: NilFL),
+              --  (quickhunk 1 "a" "b" :>: quickhunk 1 "b" "c" :>: NilFL)
+              --  :\/: (quickhunk 1 "a" "z" :>: NilFL)]
+
+mergeable2commutable :: Invert p => (p :\/: p) C(x y) -> (p :> p) C(x y)
+mergeable2commutable (x :\/: y) = unsafeCoerceP (invert x) :> y
+
+commutablesFL :: [(FL Prim :> FL Prim) C(x y)]
+commutablesFL = map mergeable2commutable mergeablesFL
+commutables :: [(Prim :> Prim) C(x y)]
+commutables = map mergeable2commutable mergeables
+
+primPatches :: [Prim C(x y)]
+primPatches = concatMap mergeable2patches mergeables
+    where mergeable2patches (x:\/:y) = [x,y]
+
+realPatches :: [RealPatch Prim C(x y)]
+realPatches = concatMap commutable2patches realCommutables
+    where commutable2patches (x:>y) = [x,y]
+
+realTriples :: [(RealPatch Prim :> RealPatch Prim :> RealPatch Prim) C(x y)]
+realTriples = [ob' :> oa2 :> a2'',
+                oa' :> oa2 :> a2'']
+               ++ map unsafeUnseal2 tripleExamples
+               ++ map unsafeUnseal2 (concatMap getTriples realFLs)
+    where oa = prim2real $ quickhunk 1 "o" "aa"
+          oa2 = oa
+          a2 = prim2real $ quickhunk 2 "a34" "2xx"
+          ob = prim2real $ quickhunk 1 "o" "bb"
+          ob' :/\: oa' = merge (oa :\/: ob)
+          a2' :/\: _ = merge (ob' :\/: a2)
+          a2'' :/\: _ = merge (oa2 :\/: a2')
+
+realNonduplicateTriples :: [(RealPatch Prim :> RealPatch Prim :> RealPatch Prim) C(x y)]
+realNonduplicateTriples = filter (notDuplicatestriple) realTriples
+
+realFLs :: [FL (RealPatch Prim) C(x y)]
+realFLs = [oa :>: invert oa :>: oa :>: invert oa :>: ps +>+ oa :>: invert oa :>: NilFL]
+    where oa = prim2real $ quickhunk 1 "o" "a"
+          ps :/\: _ = merge (oa :>: invert oa :>: NilFL :\/: oa :>: invert oa :>: NilFL)
+
+realCommutables :: [(RealPatch Prim :> RealPatch Prim) C(x y)]
+realCommutables = map unsafeUnseal2 commuteExamples++
+                   map mergeable2commutable realMergeables++
+                   [invert oa :> ob'] ++ map unsafeUnseal2 (concatMap getPairs realFLs)
+    where oa = prim2real $ quickhunk 1 "o" "a"
+          ob = prim2real $ quickhunk 1 "o" "b"
+          _ :/\: ob' = mergeFL (ob :\/: oa :>: invert oa :>: NilFL)
+
+realMergeables :: [(RealPatch Prim :\/: RealPatch Prim) C(x y)]
+realMergeables = map (\ (x :\/: y) -> prim2real x :\/: prim2real y) mergeables
+                        ++ realIglooMergeables
+                        ++ realQuickcheckMergeables
+                        ++ map unsafeUnseal2 mergeExamples
+                        ++ catMaybes (map pair2m (concatMap getPairs realFLs))
+                        ++ [(oa :\/: od),
+                            (oa :\/: a2'),
+                            (ob' :\/: od''),
+                            (oe :\/: od),
+                            (of' :\/: oe'),
+                            (ob' :\/: oe'),
+                            (oa :\/: oe'),
+                            (ob' :\/: oc'),
+                            (b2' :\/: oc'''),
+                            (ob' :\/: a2),
+                            (b2' :\/: og'''),
+                            (oc''' :\/: og'''),
+                            (oc'' :\/: og''),
+                            (ob'' :\/: og''),
+                            (ob'' :\/: oc''),
+                            (oc' :\/: od'')]
+    where oa = prim2real $ quickhunk 1 "o" "aa"
+          a2 = prim2real $ quickhunk 2 "a34" "2xx"
+          og = prim2real $ quickhunk 3 "4" "g"
+          ob = prim2real $ quickhunk 1 "o" "bb"
+          b2 = prim2real $ quickhunk 2 "b" "2"
+          oc = prim2real $ quickhunk 1 "o" "cc"
+          od = prim2real $ quickhunk 7 "x" "d"
+          oe = prim2real $ quickhunk 7 "x" "e"
+          pf = prim2real $ quickhunk 7 "x" "f"
+          od'' = prim2real $ quickhunk 8 "x" "d"
+          ob' :>: b2' :>: NilFL :/\: _ = mergeFL (oa :\/: ob :>: b2 :>: NilFL)
+          a2' :/\: _ = merge (ob' :\/: a2)
+          ob'' :/\: _ = merge (a2 :\/: ob')
+          og' :/\: _ = merge (oa :\/: og)
+          og'' :/\: _ = merge (a2 :\/: og')
+          og''' :/\: _ = merge (ob' :\/: og')
+          oc' :/\: _ = merge (oa :\/: oc)
+          oc'' :/\: _ = merge (a2 :\/: oc)
+          oc''' :/\: _ = merge (ob' :\/: oc')
+          oe' :/\: _ = merge (od :\/: oe)
+          of' :/\: _ = merge (od :\/: pf)
+          pair2m :: Sealed2 (RealPatch Prim :> RealPatch Prim)
+                 -> Maybe ((RealPatch Prim :\/: RealPatch Prim) C(x y))
+          pair2m (Sealed2 (xx :> y)) = do y' :> _ <- commute (xx :> y)
+                                          return $ unsafeCoerceP (xx :\/: y')
+
+realIglooMergeables :: [(RealPatch Prim :\/: RealPatch Prim) C(x y)]
+realIglooMergeables = [(a :\/: b),
+                    (b :\/: c),
+                    (a :\/: c),
+                    (x :\/: a),
+                    (y :\/: b),
+                    (z :\/: c),
+                    (x' :\/: y'),
+                    (z' :\/: y'),
+                    (x' :\/: z'),
+                    (a :\/: a)]
+    where a = prim2real $ quickhunk 1 "1" "A"
+          b = prim2real $ quickhunk 2 "2" "B"
+          c = prim2real $ quickhunk 3 "3" "C"
+          x = prim2real $ quickhunk 1 "1BC" "xbc"
+          y = prim2real $ quickhunk 1 "A2C" "ayc"
+          z = prim2real $ quickhunk 1 "AB3" "abz"
+          x' :/\: _ = merge (a :\/: x)
+          y' :/\: _ = merge (b :\/: y)
+          z' :/\: _ = merge (c :\/: z)
+
+realQuickcheckMergeables :: [(RealPatch Prim :\/: RealPatch Prim) C(x y)]
+realQuickcheckMergeables = [-- invert k1 :\/: n1
+                             --, invert k2 :\/: n2
+                               hb :\/: k
+                             , b' :\/: b'
+                             , n' :\/: n'
+                             , b :\/: d
+                             , k' :\/: k'
+                             , k3 :\/: k3
+                             ] ++ catMaybes (map pair2m pairs)
+    where hb = prim2real $ quickhunk 0 "" "hb"
+          k = prim2real $ quickhunk 0 "" "k"
+          n = prim2real $ quickhunk 0 "" "n"
+          b = prim2real $ quickhunk 1 "b" ""
+          d = prim2real $ quickhunk 2 "" "d"
+          d':/\:_ = merge (b :\/: d)
+          --k1 :>: n1 :>: NilFL :/\: _ = mergeFL (hb :\/: k :>: n :>: NilFL)
+          --k2 :>: n2 :>: NilFL :/\: _ =
+          --    merge (hb :>: b :>: NilFL :\/: k :>: n :>: NilFL)
+          k' :>: n' :>: NilFL :/\: _ :>: b' :>: _ = merge (hb :>: b :>: d' :>: NilFL :\/: k :>: n :>: NilFL)
+          pairs = getPairs (hb :>: b :>: d' :>: k' :>: n' :>: NilFL)
+          pair2m :: Sealed2 (RealPatch Prim :> RealPatch Prim)
+                 -> Maybe ((RealPatch Prim :\/: RealPatch Prim) C(x y))
+          pair2m (Sealed2 (xx :> y)) = do y' :> _ <- commute (xx :> y)
+                                          return $ unsafeCoerceP (xx :\/: y')
+
+          i = prim2real $ quickhunk 0 "" "i"
+          x = prim2real $ quickhunk 0 "" "x"
+          xi = prim2real $ quickhunk 0 "xi" ""
+          d3 :/\: _ = merge (xi :\/: d)
+          _ :/\: k3 = mergeFL (k :\/: i :>: x :>: xi :>: d3 :>: NilFL)
+
diff --git a/src/Darcs/Test/Patch/Examples2.hs b/src/Darcs/Test/Patch/Examples2.hs
deleted file mode 100644
--- a/src/Darcs/Test/Patch/Examples2.hs
+++ /dev/null
@@ -1,274 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-#include "gadts.h"
-
-module Darcs.Test.Patch.Examples2
-    ( mergeExamples, commuteExamples, tripleExamples
-    , realPatchLoopExamples
-    )
-    where
-
-import Darcs.Patch.Invert ( Invert )
-import Darcs.Patch.Merge ( Merge )
-import Darcs.Patch.Prim ( PrimPatchBase(..), FromPrim )
-import Darcs.Patch.Prim.V1.Core ( Prim(FP), FilePatchType(Hunk) )
-import Darcs.Patch.FileName ( FileName, fp2fn )
-
-import Darcs.Witnesses.Ordered ( (:>), (:\/:) )
-import Darcs.Witnesses.Sealed ( Sealed(..), Sealed2, seal2, unseal2 )
-
-import qualified Data.ByteString as B ( ByteString )
-import qualified Data.ByteString.Char8 as BC ( pack )
-
-import Darcs.Test.Patch.RepoModel ( RepoModel, Content
-                                   , makeRepo, makeName, makeFile)
-import Darcs.Test.Patch.WithState ( WithStartState(..) )
-
-import Darcs.Test.Patch.QuickCheck
-    ( Tree(..)
-    , TreeWithFlattenPos(..)
-    , commutePairFromTree, commuteTripleFromTree
-    , mergePairFromCommutePair, commutePairFromTWFP
-    , canonizeTree
-    )
-
-
-
-makeSimpleRepo :: String -> Content -> RepoModel C(x)
-makeSimpleRepo filename content = makeRepo [(makeName filename, makeFile content)]
-
-
-tripleExamples :: (FromPrim p, Merge p, Invert p, PrimPatchBase p, PrimOf p ~ Prim) => [Sealed2 (p :> p :> p)]
-tripleExamples = [commuteTripleFromTree seal2 $
-                   WithStartState (makeSimpleRepo "file" [])
-                   (ParTree
-                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "g"]))
-                     (SeqTree (FP (fp2fn "./file") (Hunk 2 [] [BC.pack "j"]))
-                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "s"])) NilTree)))
-                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "e"])) NilTree))
-                  ,commuteTripleFromTree seal2 $
-                   WithStartState (makeSimpleRepo "file" [BC.pack "j"])
-                   (ParTree
-                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "s"]))
-                     (ParTree
-                      (SeqTree (FP (fp2fn "./file") (Hunk 2 [BC.pack "j"] [])) NilTree)
-                      (SeqTree (FP (fp2fn "./file") (Hunk 2 [BC.pack "j"] [])) NilTree)))
-                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "j"] [])) NilTree))
-                  ]
-
-
-mergeExamples :: (FromPrim p, Merge p, Invert p, PrimPatchBase p, PrimOf p ~ Prim) => [Sealed2 (p :\/: p)]
-mergeExamples = map (unseal2 (mergePairFromCommutePair seal2)) commuteExamples
-
-commuteExamples :: (FromPrim p, Merge p, PrimPatchBase p, PrimOf p ~ Prim) => [Sealed2 (p :> p)]
-commuteExamples = [
-                   commutePairFromTWFP seal2 $
-                   WithStartState (makeSimpleRepo "file" [])
-                   (TWFP 3
-                    (ParTree
-                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "h"])) NilTree)
-                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "b"]))
-                       (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "f"]))
-                         (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "v"]))
-                           (SeqTree (FP (fp2fn "./file") (Hunk 2 [BC.pack "f"] [])) NilTree)))))),
-                   commutePairFromTWFP seal2 $
-                   WithStartState
-                   (makeSimpleRepo "file" [BC.pack "f",BC.pack "s",BC.pack "d"])
-                   (TWFP 3
-                    (ParTree
-                     (SeqTree (FP (fp2fn "./file") (Hunk 3 [BC.pack "d"] [])) NilTree)
-                     (ParTree
-                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "f"] [])) NilTree)
-                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "f"] []))
-                        (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "s",BC.pack "d"] []))
-                          (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "v"])) NilTree)))))),
-{-                   commutePairFromTWFP seal2 $
-                   WithStartState
-                   (makeSimpleRepo "file" [BC.pack "f",BC.pack "u",
-                                            BC.pack "s",BC.pack "d"])
-                   (TWFP 5
-                    (ParTree
-                     (SeqTree (FP (fp2fn "./file") (Hunk 5 [] [BC.pack "x"]))
-                      (SeqTree (FP (fp2fn "./file") (Hunk 4 [BC.pack "d"] [])) NilTree))
-                     (ParTree
-                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "f",BC.pack "u"] [])) NilTree)
-                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "f"] []))
-                       (SeqTree (FP(fp2fn "./file") (Hunk 1 [BC.pack "u",BC.pack "s",BC.pack "d"] []))
-                        (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "a"]))
-                         (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "a"] [])) NilTree))))))),-}
-                   commutePairFromTree seal2 $
-                   WithStartState (makeSimpleRepo "file" [BC.pack "n",BC.pack "t",BC.pack "h"])
-                   (ParTree
-                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "n",BC.pack "t",BC.pack "h"] []))
-                     NilTree)
-                    (SeqTree (FP (fp2fn "./file") (Hunk 3 [BC.pack "h"] []))
-                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "n"] []))
-                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "t"] [])) NilTree)))),
-                  commutePairFromTree seal2 $
-                  WithStartState (makeSimpleRepo "file" [])
-                  (ParTree
-                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "n"])) NilTree)
-                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "i"]))
-                                (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "i"])) NilTree))),
-                  commutePairFromTree seal2 $
-                  WithStartState (makeSimpleRepo "file" [])
-                  (ParTree
-                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "c"]))
-                     (ParTree
-                       (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "c"] [BC.pack "r"])) NilTree)
-                       (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "h"]))
-                        (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "d"])) NilTree))))
-                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "f"])) NilTree)),
-                  commutePairFromTWFP seal2 $
-                  WithStartState (makeSimpleRepo "file" [])
-                  (TWFP 1
-                  (ParTree
-                   (ParTree
-                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "t"])) NilTree)
-                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "t"])) NilTree))
-                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "f"])) NilTree))),
-                   commutePairFromTWFP seal2 $
-                   WithStartState (makeSimpleRepo "file" [BC.pack "f",BC.pack " r",
-                                                            BC.pack "c",BC.pack "v"])
-                   (TWFP 4
-                    (ParTree
-                     (SeqTree (FP (fp2fn "./file") (Hunk 3 [BC.pack "c",BC.pack "v"] []))
-                        (ParTree
-                         (SeqTree (FP (fp2fn "./file") (Hunk 2 [BC.pack "r"] []))
-                          (SeqTree (FP (fp2fn "fi le") (Hunk 1 [BC.pack "f"] [])) NilTree))
-                         (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "f",BC.pack "r"] []))
-                          (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "y"])) NilTree))))
-                     (SeqTree (FP (fp2fn "./file") (Hunk 4 [BC.pack "v"] [])) NilTree))),
-                   commutePairFromTree seal2 $
-                   WithStartState (makeSimpleRepo "file" [])
-                   (ParTree
-                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "z"])) NilTree)
-                    (ParTree
-                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "f"])) NilTree)
-                     (ParTree
-                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "r"])) NilTree)
-                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "d"])) NilTree))))
-                 , commutePairFromTree seal2 $
-                   WithStartState (makeSimpleRepo "file" [BC.pack "t",BC.pack "r",BC.pack "h"])
-                   (ParTree
-                    (ParTree
-                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "t",BC.pack "r",BC.pack "h"] []))
-                              NilTree)
-                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "o"])) NilTree))
-                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "t"] []))
-                     (SeqTree (FP (fp2fn "./file") (Hunk 2 [BC.pack "h"] [])) NilTree)))
-                 , commutePairFromTWFP seal2 $
-                   WithStartState (makeSimpleRepo "file" []) $
-                   TWFP 2
-                   (ParTree
-                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "h"])) NilTree)
-                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "y"]))
-                     (SeqTree (FP (fp2fn "./file") (Hunk 2 [] [BC.pack "m"]))
-                      (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "v"])) NilTree))))
-                 , commutePairFromTree seal2 $
-                 WithStartState (makeSimpleRepo "file" [])
-                 (ParTree
-                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "p"]))
-                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "p"] []))
-                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "c"])) NilTree)))
-                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "z"])) NilTree))
-                 , commutePairFromTree seal2 $
-                 WithStartState (makeSimpleRepo "file" [])
-                 (ParTree
-                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "j" ]))
-                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "j"] [])) NilTree))
-                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "v"])) NilTree))
-                 , commutePairFromTree seal2 $
-                 WithStartState (makeSimpleRepo "file" [])
-                 (ParTree
-                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "v"])) NilTree)
-                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "j" ]))
-                   (SeqTree (FP (fp2fn "./file") (Hunk 1 [BC.pack "j"] [])) NilTree)))
-                 , commutePairFromTree seal2 $
-                 WithStartState (makeSimpleRepo "file" [BC.pack "x",BC.pack "c"])
-                 (ParTree
-                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "h"]))
-                   (ParTree
-                    (SeqTree (FP (fp2fn "./file") (Hunk 3 [BC.pack "c"] [])) NilTree)
-                    (SeqTree (FP (fp2fn "./file") (Hunk 2 [BC.pack "x"] []))
-                     (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "j"])) NilTree))))
-                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] [BC.pack "l"])) NilTree))
-                 , commutePairFromTree seal2 $
-                 WithStartState (makeSimpleRepo "file" [])
-                 (ParTree
-                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] (packStringLetters "s"))) NilTree)
-                  (SeqTree (FP (fp2fn "./file") (Hunk 1 [] (packStringLetters "k")))
-                   (SeqTree (FP (fp2fn "./file") (Hunk 1 (packStringLetters "k") []))
-                    (SeqTree (FP (fp2fn "./file") (Hunk 1 [] (packStringLetters "m")))
-                     (SeqTree (FP (fp2fn "./file") (Hunk 1 (packStringLetters "m") [])) NilTree)))))
-                 ]
-
-packStringLetters :: String -> [B.ByteString]
-packStringLetters = map (BC.pack . (:[]))
-
-realPatchLoopExamples :: [Sealed (WithStartState RepoModel (Tree Prim))]
-realPatchLoopExamples =
-    [Sealed (WithStartState (makeSimpleRepo fx_name [])
-     $ canonizeTree
-     (ParTree
-      (SeqTree (FP fx (Hunk 1 [] (packStringLetters "pkotufogbvdabnmbzajvolwviqebieonxvcvuvigkfgybmqhzuaaurjspd")))
-       (ParTree
-        (SeqTree (FP fx (Hunk 47 (packStringLetters "qhzu") (packStringLetters "zafybdcokyjskcgnvhkbzpysaafnjjhcstgrczplxsfwagmh")))
-         (ParTree
-          (ParTree
-           NilTree
-           (ParTree
-            (ParTree
-             (ParTree
-              (SeqTree (FP fx (Hunk 15 (packStringLetters "mbzajvolwviqebieonxvcvuvigkfgyb") (packStringLetters "vujnxnhvybvpouyciaabszfmgssezlwwjgnethvrpnfrkubphzvdgymjjoacppqps")))
-               (ParTree
-                NilTree
-                (ParTree
-                 (SeqTree (FP fx (Hunk 40 (packStringLetters "ssezlwwjgnethvrpnfrkubphzvdgymjjoacppqpsmzafybdcokyjskcgnvhkbz") (packStringLetters "wnesidpccwoiqiichxaaejdsyrhrusqljlcoro")))
-                  (ParTree
-                   (ParTree
-                    (SeqTree (FP fx (Hunk 12 (packStringLetters "abnvujnxnhvybvpouyciaabszfmgwnesidpccwoiqii") (packStringLetters "czfdhqkipdstfjycqaxwnbxrihrufdeyneqiiiafwzlmg"))) NilTree)
-                    NilTree)
-                   NilTree))
-                 (SeqTree (FP fx (Hunk 25 [] (packStringLetters "dihgmsotezucqdgxczvcivijootyvhlwymbiueufnvpwpeukmskqllalfe"))) NilTree))))
-              (SeqTree (FP fx (Hunk 56 (packStringLetters "yjskcgnvhkbzpysaafnjjhcstgrczplxsfwagmhaaurjsp") (packStringLetters "xldhrutyhcyaqeezwujiguawfyawjjqlirxshjddvq"))) NilTree))
-             (SeqTree (FP fx (Hunk 20 [] (packStringLetters "ooygwiyogqrqnytixqtmvdxx")))
-              (SeqTree (FP fx (Hunk 26 (packStringLetters "yogqrqnytixqtmvdxxvolwviqebieonxvcvuvigkfgybmzafybdcokyjskcgnvhkbz") (packStringLetters "akhsmlbkdxnvfoikmiatfbpzdrsyykkpoxvvddeaspzxe")))
-               (SeqTree (FP fx (Hunk 39 [] (packStringLetters "ji")))
-                (ParTree
-                 NilTree
-                 (ParTree
-                  NilTree
-                  (ParTree
-                   (ParTree
-                    NilTree
-                    (SeqTree (FP fx (Hunk 26 (packStringLetters "akhsmlbkdxnvfjioikmiatfbpzdrsyykkpoxvvddeaspzxepysaafnjjhcstgrczplxs") (packStringLetters "onjbhddskcj")))
-                     (SeqTree (FP fx (Hunk 39 [] (packStringLetters "fyscunxxxjjtyqpfxeznhtwvlphmp"))) NilTree)))
-                   (ParTree
-                    NilTree
-                    (SeqTree (FP fx (Hunk 44 [] (packStringLetters "xcchzwmzoezxkmkhcmesplnjpqriypshgiqklgdnbmmkldnydiy")))
-                     (ParTree
-                      NilTree
-                      (SeqTree (FP fx (Hunk 64 (packStringLetters "plnjpqriypshgiqklgdnbmmkldnydiymiatfbpzdrsyykkpoxvvddeaspzxepysaafn") (packStringLetters "anjlzfdqbjqbcplvqvkhwjtkigp"))) NilTree)))))))))))
-            (ParTree
-             NilTree
-             NilTree)))
-          NilTree))
-        NilTree))
-      (ParTree
-       NilTree
-       (SeqTree (FP fx (Hunk 1 [] (packStringLetters "ti")))
-        (SeqTree (FP fx (Hunk 1 (packStringLetters "t") (packStringLetters "ybcop")))
-         (SeqTree (FP fx (Hunk 2 [] (packStringLetters "dvlhgwqlpaeweerqrhnjtfolczbqbzoccnvdsyqiefqitrqneralf")))
-          (SeqTree (FP fx (Hunk 15 [] (packStringLetters "yairbjphwtnaerccdlfewujvjvmjakbc")))
-           (SeqTree (FP fx (Hunk 51 [] (packStringLetters "xayvfuwaiiogginufnhsrmktpmlbvxiakjwllddkiyofyfw")))
-            (ParTree
-             NilTree
-             NilTree)))))))))]
-  where
-      fx_name :: String
-      fx_name = "F"
-
-      fx :: FileName
-      fx = fp2fn "./F"
-  
diff --git a/src/Darcs/Test/Patch/Prim/V1.hs b/src/Darcs/Test/Patch/Prim/V1.hs
deleted file mode 100644
--- a/src/Darcs/Test/Patch/Prim/V1.hs
+++ /dev/null
@@ -1,305 +0,0 @@
-{-# LANGUAGE CPP, MultiParamTypeClasses #-}
-
-#include "gadts.h"
-
--- | Testing of primitive V1 patches
-module Darcs.Test.Patch.Prim.V1
-  ( aHunk, aTokReplace
-  , aPrim
-  , aPrimPair
-  )
-  where
-
-
-import Darcs.Test.Patch.RepoModel
-import Darcs.Test.Patch.WithState
-import Darcs.Test.Util.QuickCheck ( alpha, notIn, maybeOf )
-
-import Darcs.Commands.Replace ( defaultToks )
-import Darcs.Patch.Prim
-import Darcs.Patch.Prim.V1.Core ( Prim(..), FilePatchType(..), DirPatchType(..) )
-import Darcs.Witnesses.Ordered ( (:>)(..), FL(..) )
-import Darcs.Witnesses.Sealed
-import Darcs.Witnesses.Unsafe ( unsafeCoerceP1 )
-
-import Control.Applicative ( (<$>) )
-import qualified Data.ByteString.Char8 as BC
-import Data.Maybe ( isJust, fromJust )
-import Test.QuickCheck
-  ( Arbitrary(..)
-  , Gen, sized, frequency, choose, elements, vectorOf
-  )
-
-
-
-----------------------------------------------------------------------
--- * QuickCheck generators
-
-----------------------------------------------------------------------
--- ** FilePatchType generators
-
-aHunk :: FORALL(x y) Content -> Gen (FilePatchType C(x y))
-aHunk content
- = sized $ \n ->
-     do pos <- choose (1, contentLen+1)
-        let prefixLen = pos-1
-            restLen   = contentLen-prefixLen
-        oldLen <- frequency
-                      [ (75, choose (0, min restLen n))
-                        -- produces small hunks common in real editing
-                      , (25, choose (0, min 10 restLen))
-                      ]
-        -- newLen choice aims to cover all possibilities, that is,
-        -- remove less/the same/more than added and empty the file.
-        newLen <- frequency
-                      [ ( 54
-                        , choose (1,min 1 n)
-                        )
-                      , ( if oldLen /= 0 then 42 else 0
-                        , choose (1,min 1 oldLen)
-                        )
-                      , ( if oldLen /= 0 then 2 else 0
-                        , return oldLen
-                        )
-                      , ( if oldLen /= 0 then 2 else 0
-                        , return 0
-                        )
-                      ]
-        new <- vectorOf newLen aLine
-        let old = take oldLen $ drop prefixLen $ content
-        return $ Hunk pos old new
-  where
-      contentLen = length content
-
-aTokReplace :: FORALL(x y) Content -> Gen (FilePatchType C(x y))
-aTokReplace []
-  = do w <- vectorOf 1 alpha
-       w' <- vectorOf 1 alpha
-       return $ TokReplace defaultToks w w'
-aTokReplace content
-  = do let fileWords = concatMap BC.words content
-       wB <- elements fileWords
-       w' <- alphaBS `notIn` fileWords
-       return $ TokReplace defaultToks (BC.unpack wB) (BC.unpack w')
-  where
-      alphaBS = do x <- alpha; return $ BC.pack [x]
-
-----------------------------------------------------------------------
--- ** Prim generators
-
-aHunkP :: FORALL(x y) (AnchoredPath,File) -> Gen (Prim C(x y))
-aHunkP (path,file)
-  = do Hunk pos old new <- aHunk content
-       return $ hunk (ap2fp path) pos old new
-  where
-      content = fileContent file
-
-aTokReplaceP :: FORALL (x y) (AnchoredPath,File) -> Gen (Prim C(x y))
-aTokReplaceP (path,file)
-  = do TokReplace tokchars old new <- aTokReplace content
-       return $ tokreplace (ap2fp path) tokchars old new
-  where
-      content = fileContent file
-
-anAddFileP :: FORALL (x y) (AnchoredPath,Dir) -> Gen (Prim C(x y))
-anAddFileP (path,dir)
-  = do newFilename <- aFilename `notIn` existing
-       let newPath = path `appendPath` newFilename
-       return $ addfile (ap2fp newPath)
-  where
-      existing = map fst $ filterFiles $ dirContent dir
-
-aRmFileP :: FORALL (x y) AnchoredPath   -- ^ Path of an empty file
-                          -> Prim C(x y)
-aRmFileP path = rmfile (ap2fp path)
-
-anAddDirP :: FORALL (x y) (AnchoredPath,Dir) -> Gen (Prim C(x y))
-anAddDirP (path,dir)
-  = do newDirname <- aDirname `notIn` existing
-       let newPath = path `appendPath` newDirname
-       return $ adddir (ap2fp newPath)
-  where
-      existing = map fst $ filterDirs $ dirContent dir
-
-aRmDirP :: FORALL (x y) AnchoredPath    -- ^ Path of an empty directory
-                        -> Prim C(x y)
-aRmDirP path = rmdir (ap2fp path)
-
-aMoveP :: FORALL (x y) Gen Name -> AnchoredPath -> (AnchoredPath,Dir) -> Gen (Prim C(x y))
-aMoveP nameGen oldPath (dirPath,dir)
-  = do newName <- nameGen `notIn` existing
-       let newPath = dirPath `appendPath` newName
-       return $ move (ap2fp oldPath) (ap2fp newPath)
-  where
-      existing = map fst $ dirContent dir
-
--- | Generates any type of 'Prim' patch, except binary and setpref patches.
-aPrim :: FORALL(x y) RepoModel C(x) -> Gen (WithEndState RepoModel (Prim C(x)) C(y))
-aPrim repo
-  = do mbFile <- maybeOf repoFiles
-       mbEmptyFile <- maybeOf $ filter (isEmpty . snd) repoFiles
-       dir  <- elements (rootDir:repoDirs)
-       mbOldDir <- maybeOf repoDirs
-       mbEmptyDir <- maybeOf $ filter (isEmpty . snd) repoDirs
-       patch <- frequency
-                  [ ( if isJust mbFile then 12 else 0
-                    , aHunkP $ fromJust mbFile
-                    )
-                  , ( if isJust mbFile then 6 else 0
-                    , aTokReplaceP $ fromJust mbFile
-                    )
-                  , ( 2
-                    , anAddFileP dir
-                    )
-                  , ( if isJust mbEmptyFile then 12 else 0
-                    , return $ aRmFileP $ fst $ fromJust mbEmptyFile
-                    )
-                  , ( 2
-                    , anAddDirP dir
-                    )
-                  , ( if isJust mbEmptyDir then 10 else 0
-                    , return $ aRmDirP $ fst $ fromJust mbEmptyDir
-                    )
-                  , ( if isJust mbFile then 3 else 0
-                    , aMoveP aFilename (fst $ fromJust mbFile) dir
-                    )
-                  , let oldPath = fst $ fromJust mbOldDir in
-                    ( if isJust mbOldDir
-                         && not (oldPath `isPrefix` fst dir)
-                        then 4 else 0
-                    , aMoveP aDirname oldPath dir
-                    )
-                  ]
-       let Just repo' = applyPatch patch repo
-       return $ WithEndState patch repo'
-  where
-      repoItems = list repo
-      repoFiles = filterFiles repoItems
-      repoDirs  = filterDirs repoItems
-      rootDir   = (anchoredRoot,root repo)
-
-{- [COVERAGE OF aPrim]
-
-  PLEASE,
-  if you change something that may affect the coverage of aPrim then
-      a) recalculate it, or if that is not possible;
-      b) indicate the need to do it.
-
-  Patch type
-  ----------
-  42% hunk
-  22% tokreplace
-  14% move
-   6% rmdir
-   6% addfile
-   6% adddir
-   4% rmfile
--}
-
-----------------------------------------------------------------------
--- *** Pairs of primitive patches
-
--- Try to generate commutable pairs of hunks
-hunkPairP :: FORALL(x y) (AnchoredPath,File) -> Gen ((Prim :> Prim) C(x y))
-hunkPairP (path,file)
-  = do h1@(Hunk l1 old1 new1) <- aHunk content
-       (delta, content') <- selectChunk h1 content
-       Hunk l2' old2 new2 <- aHunk content'
-       let l2 = l2'+delta
-       return (hunk fpPath l1 old1 new1 :> hunk fpPath l2 old2 new2)
-  where
-      content = fileContent file
-      fpPath = ap2fp path
-      selectChunk (Hunk l old new) content
-        = elements [prefix, suffix]
-        where
-            start = l - 1
-            prefix = (0, take start content)
-            suffix = (start + length new, drop (start + length old) content)
-
-aPrimPair :: FORALL(x y) RepoModel C(x) -> Gen (WithEndState RepoModel ((Prim :> Prim) C(x)) C(y))
-aPrimPair repo
-  = do mbFile <- maybeOf repoFiles
-       frequency
-          [ ( if isJust mbFile then 1 else 0
-            , do p1 :> p2 <- hunkPairP $ fromJust mbFile
-                 let Just repo'  = applyPatch p1 repo
-                     Just repo'' = applyPatch p2 repo'
-                 return $ WithEndState (p1 :> p2) repo''
-            )
-          , ( 1
-            , do Sealed wesP <- arbitraryState repo
-                 return $ unsafeCoerceP1 wesP
-            )
-          ]
-  where
-      repoItems = list repo
-      repoFiles = filterFiles repoItems
-
-{- [COVERAGE OF aPrimPair]
-
-  PLEASE,
-  if you change something that may affect the coverage of aPrimPair then
-      a) recalculate it, or if that is not possible;
-      b) indicate the need to do it.
-
-  Rate of ommutable pairs
-  -----------------------
-  67% commutable
-
-  Commutable coverage (for 1000 tests)
-  -------------------
-  21% hunks-B
-  20% hunks-A
-  14% file:>dir
-  12% file:>move
-   8% trivial-FP
-   8% hunk:>tok
-   4% hunks-D
-   3% tok:>tok
-   2% hunks-C
-   1% move:>move
-   1% dir:>move
-   1% dir:>dir
-   0% emptyhunk:>file
--}
-
-----------------------------------------------------------------------
--- Arbitrary instances
-
-instance ArbitraryState RepoModel Prim where
-  arbitraryState s = seal <$> aPrim s
-
-
-instance Arbitrary (Sealed2 Prim) where
-  arbitrary = makeGen aSmallRepo
-
-instance Arbitrary (Sealed2 (Prim :> Prim)) where
-  arbitrary = do repo <- aSmallRepo
-                 WithEndState pp _ <- aPrimPair repo
-                 return $ seal2 pp
-
-instance Arbitrary (Sealed2 (Prim :> Prim :> Prim)) where
-  arbitrary = makeGen aSmallRepo
-
-instance Arbitrary (Sealed2 (FL Prim)) where
-  arbitrary = makeGen aSmallRepo
-
-instance Arbitrary (Sealed2 (FL Prim :> FL Prim)) where
-  arbitrary = makeGen aSmallRepo
-
-
-instance Arbitrary (Sealed2 (WithState RepoModel Prim)) where
-  arbitrary = makeWSGen aSmallRepo
-
-instance Arbitrary (Sealed2 (WithState RepoModel (Prim :> Prim))) where
-  arbitrary = do repo <- aSmallRepo
-                 WithEndState pp repo' <- aPrimPair repo
-                 return $ seal2 $ WithState repo pp repo'
-
-
-instance Arbitrary (Sealed2 (WithState RepoModel (FL Prim))) where
-  arbitrary = makeWSGen aSmallRepo
-
-instance Arbitrary (Sealed2 (WithState RepoModel (FL Prim :> FL Prim))) where
-  arbitrary = makeWSGen aSmallRepo
diff --git a/src/Darcs/Test/Patch/Properties.hs b/src/Darcs/Test/Patch/Properties.hs
deleted file mode 100644
--- a/src/Darcs/Test/Patch/Properties.hs
+++ /dev/null
@@ -1,340 +0,0 @@
---  Copyright (C) 2007 David Roundy
---
---  This program is free software; you can redistribute it and/or modify
---  it under the terms of the GNU General Public License as published by
---  the Free Software Foundation; either version 2, or (at your option)
---  any later version.
---
---  This program is distributed in the hope that it will be useful,
---  but WITHOUT ANY WARRANTY; without even the implied warranty of
---  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
---  GNU General Public License for more details.
---
---  You should have received a copy of the GNU General Public License
---  along with this program; see the file COPYING.  If not, write to
---  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
---  Boston, MA 02110-1301, USA.
-
-{-# LANGUAGE CPP #-}
-{-# OPTIONS_GHC -fno-warn-deprecations -fno-warn-orphans #-}
-
-#include "gadts.h"
-
-module Darcs.Test.Patch.Properties
-    ( invertSymmetry, invertRollback,
-      recommute, commuteInverses, effectPreserving,
-      permutivity, partialPermutivity,
-      patchAndInverseCommute, mergeEitherWay,
-      show_read,
-      mergeCommute, mergeConsistent, mergeArgumentsConsistent,
-      joinEffectPreserving, joinCommute
-    ) where
-
-import Darcs.Test.Util.TestResult ( TestResult, succeeded, failed, rejected,
-                                    (<&&>), fromMaybe )
-import Darcs.Test.Patch.RepoModel ( RepoModel, applyPatch )
-import Darcs.Test.Patch.WithState ( WithState(..) )
-
-import Control.Monad ( msum )
-import Darcs.Witnesses.Show ( Show2(..), show2 )
-import Darcs.Patch.Patchy ( Patchy, showPatch, commute, invert )
-import Darcs.Patch.Prim.V1 ( Prim )
-import Darcs.Patch ()
-import Darcs.Patch.Commute ( commuteFLorComplain )
-import Darcs.Patch.Merge ( Merge(merge) )
-import Darcs.Patch.Read ( readPatch )
-import Darcs.Witnesses.Eq ( MyEq(..), EqCheck(..) )
-import Darcs.Witnesses.Ordered ( FL(..), (:>)(..), (:\/:)(..), (:/\:)(..) )
-import Darcs.Witnesses.Sealed ( Sealed(Sealed) )
-import Printer ( Doc, renderPS, redText, greenText, ($$) )
---import Darcs.ColorPrinter ( traceDoc )
-
-
-
--- | invert symmetry   inv(inv(p)) = p
-invertSymmetry :: Patchy p => p C(a b) -> TestResult
-invertSymmetry p = case invert (invert p) =\/= p of
-                        IsEq  -> succeeded
-                        NotEq -> failed $ redText "p /= inv(inv(p))"
-
--- | invert rollback   if b = A(a) then a = A'(b)
-invertRollback :: Patchy p => WithState RepoModel p C(a b) -> TestResult
-invertRollback (WithState a x b)
-  = case applyPatch (invert x) b of
-         Nothing -> failed $ redText "x' not applicable to b."
-         Just a1 -> if a1 == a
-                       then succeeded
-                       else failed $ redText "a1 is not equals to a."
-
--- | recommute   AB <--> B'A'   iff   B'A' <--> AB
-recommute :: Patchy p => (FORALL(x y) ((p :> p) C(x y) -> Maybe ((p :> p) C(x y))))
-          -> (p :> p) C(a b) -> TestResult
-recommute c (x :> y) =
-    case c (x :> y) of
-    Nothing -> rejected
-    Just (y' :> x') ->
-       case c (y' :> x') of
-         Nothing -> failed (redText "failed" $$ showPatch y' $$ redText ":>" $$ showPatch x')
-         Just (x'' :> y'') ->
-             case y'' =/\= y of
-             NotEq -> failed (redText "y'' =/\\= y failed, where x" $$ showPatch x $$
-                              redText ":> y" $$ showPatch y $$
-                              redText "y'" $$ showPatch y' $$
-                              redText ":> x'" $$ showPatch x' $$
-                              redText "x''" $$ showPatch x'' $$
-                              redText ":> y''" $$ showPatch y'')
-             IsEq -> case x'' =/\= x of
-                     NotEq -> failed (redText "x'' /= x" $$ showPatch x'' $$ redText ":>" $$ showPatch y'')
-                     IsEq -> succeeded
-
--- | commuteInverses   AB <--> B'A'   iff   inv(B)inv(A) <--> inv(A')inv(B')
-commuteInverses :: Patchy p => (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
-                 -> (p :> p) C(a b) -> TestResult
-commuteInverses c (x :> y) =
-    case c (x :> y) of
-    Nothing -> rejected
-    Just (y' :> x') ->
-        case c (invert y :> invert x) of
-        Nothing -> failed $ redText "second commute failed" $$
-                            redText "x" $$ showPatch x $$ redText "y" $$ showPatch y $$
-                            redText "y'" $$ showPatch y' $$ redText "x'" $$ showPatch x'
-        Just (ix' :> iy') ->
-            case invert ix' =/\= x' of
-            NotEq -> failed $ redText "invert ix' /= x'" $$
-                              redText "x" $$ showPatch x $$
-                              redText "y" $$ showPatch y $$
-                              redText "y'" $$ showPatch y' $$
-                              redText "x'" $$ showPatch x' $$
-                              redText "ix'" $$ showPatch ix' $$
-                              redText "iy'" $$ showPatch iy' $$
-                              redText "invert ix'" $$ showPatch (invert ix') $$
-                              redText "invert iy'" $$ showPatch (invert iy')
-            IsEq -> case y' =\/= invert iy' of
-                    NotEq -> failed $ redText "y' /= invert iy'" $$ showPatch iy' $$ showPatch y'
-                    IsEq -> succeeded
-
--- | effect preserving  AB <--> B'A' then effect(AB) = effect(B'A')
-effectPreserving :: Patchy p =>
-                        (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
-                     -> WithState RepoModel (p :> p) C(a b) -> TestResult
-effectPreserving c (WithState r (x :> y) r')
-  = case c (x :> y) of
-    Nothing         -> rejected
-    Just (y' :> x') ->
-      case applyPatch y' r of
-      Nothing  -> failed $ redText "y' is not applicable to r."
-      Just r_y' ->
-        case applyPatch x' r_y' of
-        Nothing     -> failed $ redText "x' is not applicable to r_y'."
-        Just r_y'x' -> if r_y'x' == r'
-                          then succeeded
-                          else failed $ redText "r_y'x' is not equal to r'."
-
--- | patchAndInverseCommute   if   AB <--> B'A'   then   inv(A)B' <---> Binv(A')
-patchAndInverseCommute :: Patchy p =>
-                             (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
-                          -> (p :> p) C(a b) -> TestResult
-patchAndInverseCommute c (x :> y) =
-  case c (x :> y) of
-  Nothing -> rejected
-  Just (y' :> x') ->
-     case c (invert x :> y') of
-       Nothing -> failed (redText "failure in patchAndInverseCommute")
-       Just (y'' :> ix') ->
-           case y'' =\/= y of
-           NotEq -> failed (redText "y'' /= y" $$
-                            redText "x" $$ showPatch x $$
-                            redText "y" $$ showPatch y $$
-                            redText "x'" $$ showPatch x' $$
-                            redText "y'" $$ showPatch y' $$
-                            redText "y''" $$ showPatch y'' $$
-                            redText ":> x'" $$ showPatch x')
-           IsEq -> case x' =\/= invert ix' of
-                   NotEq -> failed (redText "x' /= invert ix'" $$
-                                    redText "y''" $$ showPatch y'' $$
-                                    redText ":> x'" $$ showPatch x' $$
-                                    redText "invert x" $$ showPatch (invert x) $$
-                                    redText ":> y" $$ showPatch y $$
-                                    redText "y'" $$ showPatch y' $$
-                                    redText "ix'" $$ showPatch ix')
-                   IsEq -> succeeded
-
-permutivity :: Patchy p => (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
-            -> (p :> p :> p) C(a b) -> TestResult
-permutivity c (x:>y:>z) =
-  case c (x :> y) of
-  Nothing -> rejected
-  Just (y1 :> x1) ->
-    case c (y :> z) of
-    Nothing -> rejected
-    Just (z2 :> y2) ->
-      case c (x :> z2) of
-      Nothing -> rejected
-      Just (z3 :> x3) ->
-        case c (x1 :> z) of
-          Nothing -> failed $ redText "permutivity1"
-          Just (z4 :> x4) ->
-            --traceDoc (greenText "third commuted" $$
-            --          greenText "about to commute" $$
-            --          greenText "y1" $$ showPatch y1 $$
-            --          greenText "z4" $$ showPatch z4) $
-            case c (y1 :> z4) of
-            Nothing -> failed $ redText "permutivity2"
-            Just (z3_ :> y4)
-                | IsEq <- z3_ =\/= z3 ->
-                     --traceDoc (greenText "passed z3") $ error "foobar test" $
-                     case c (y4 :> x4) of
-                     Nothing -> failed $ redText "permutivity5: input was" $$
-                                         redText "x" $$ showPatch x $$
-                                         redText "y" $$ showPatch y $$
-                                         redText "z" $$ showPatch z $$
-                                         redText "z3" $$ showPatch z3 $$
-                                         redText "failed commute of" $$
-                                         redText "y4" $$ showPatch y4 $$
-                                         redText "x4" $$ showPatch x4 $$
-                                         redText "whereas commute of x and y give" $$
-                                         redText "y1" $$ showPatch y1 $$
-                                         redText "x1" $$ showPatch x1
-                     Just (x3_ :> y2_)
-                          | NotEq <- x3_ =\/= x3 -> failed $ redText "permutivity6"
-                          | NotEq <- y2_ =/\= y2 -> failed $ redText "permutivity7"
-                          | otherwise -> succeeded
-                | otherwise ->
-                    failed $ redText "permutivity failed" $$
-                             redText "z3" $$ showPatch z3 $$
-                             redText "z3_" $$ showPatch z3_
-
-partialPermutivity :: Patchy p => (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
-                    -> (p :> p :> p) C(a b) -> TestResult
-partialPermutivity c (xx:>yy:>zz) = pp (xx:>yy:>zz) <&&> pp (invert zz:>invert yy:>invert xx)
-    where pp (x:>y:>z) =
-            case c (y :> z) of
-            Nothing -> rejected
-            Just (z1 :> y1) ->
-              case c (x :> z1) of
-              Nothing -> rejected
-              Just (_ :> x1) ->
-                case c (x :> y) of
-                  Just _ -> rejected -- this is covered by full permutivity test above
-                  Nothing ->
-                      case c (x1 :> y1) of
-                      Nothing -> succeeded
-                      Just _ -> failed $ greenText "partialPermutivity error" $$
-                                         greenText "x" $$ showPatch x $$
-                                         greenText "y" $$ showPatch y $$
-                                         greenText "z" $$ showPatch z
-
-mergeArgumentsConsistent :: Patchy p =>
-                              (FORALL(x y) p C(x y) -> Maybe Doc)
-                           -> (p :\/: p) C(a b) -> TestResult
-mergeArgumentsConsistent isConsistent (x :\/: y) =
-  fromMaybe $
-    msum [(\z -> redText "mergeArgumentsConsistent x" $$ showPatch x $$ z) `fmap` isConsistent x,
-          (\z -> redText "mergeArgumentsConsistent y" $$ showPatch y $$ z) `fmap` isConsistent y]
-
-mergeConsistent :: (Patchy p, Merge p) =>
-                           (FORALL(x y) p C(x y) -> Maybe Doc)
-                        -> (p :\/: p) C(a b) -> TestResult
-mergeConsistent isConsistent (x :\/: y) =
-    case merge (x :\/: y) of
-    y' :/\: x' ->
-      fromMaybe $
-        msum [(\z -> redText "mergeConsistent x" $$ showPatch x $$ z) `fmap` isConsistent x,
-              (\z -> redText "mergeConsistent y" $$ showPatch y $$ z) `fmap` isConsistent y,
-              (\z -> redText "mergeConsistent x'" $$ showPatch x' $$ z $$
-                     redText "where x' comes from x" $$ showPatch x $$
-                     redText "and y" $$ showPatch y) `fmap` isConsistent x',
-              (\z -> redText "mergeConsistent y'" $$ showPatch y' $$ z) `fmap` isConsistent y']
-
-mergeEitherWay :: (Patchy p, Merge p) => (p :\/: p) C(x y) -> TestResult
-mergeEitherWay (x :\/: y) =
-    case merge (x :\/: y) of
-    y' :/\: x' -> case merge (y :\/: x) of
-                  x'' :/\: y'' | IsEq <- x'' =\/= x',
-                                 IsEq <- y'' =\/= y' -> succeeded
-                               | otherwise -> failed $ redText "mergeEitherWay bug"
-
-mergeCommute :: (Patchy p, Merge p) => (p :\/: p) C(x y) -> TestResult
-mergeCommute (x :\/: y) =
-    case merge (x :\/: y) of
-    y' :/\: x' ->
-        case commute (x :> y') of
-        Nothing -> failed $ redText "mergeCommute 1" $$
-                            redText "x" $$ showPatch x $$
-                            redText "y" $$ showPatch y $$
-                            redText "x'" $$ showPatch x' $$
-                            redText "y'" $$ showPatch y'
-        Just (y_ :> x'_)
-            | IsEq <- y_ =\/= y,
-              IsEq <- x'_ =\/= x' ->
-                      case commute (y :> x') of
-                      Nothing -> failed $ redText "mergeCommute 2 failed" $$
-                                          redText "x" $$ showPatch x $$
-                                          redText "y" $$ showPatch y $$
-                                          redText "x'" $$ showPatch x' $$
-                                          redText "y'" $$ showPatch y'
-                      Just (x_ :> y'_)
-                           | IsEq <- x_ =\/= x,
-                             IsEq <- y'_ =\/= y' -> succeeded
-                           | otherwise -> failed $ redText "mergeCommute 3" $$
-                                                   redText "x" $$ showPatch x $$
-                                                   redText "y" $$ showPatch y $$
-                                                   redText "x'" $$ showPatch x' $$
-                                                   redText "y'" $$ showPatch y' $$
-                                                   redText "x_" $$ showPatch x_ $$
-                                                   redText "y'_" $$ showPatch y'_
-            | otherwise -> failed $ redText "mergeCommute 4" $$
-                                    redText "x" $$ showPatch x $$
-                                    redText "y" $$ showPatch y $$
-                                    redText "x'" $$ showPatch x' $$
-                                    redText "y'" $$ showPatch y' $$
-                                    redText "x'_" $$ showPatch x'_ $$
-                                    redText "y_" $$ showPatch y_
-
-
--- | join effect preserving
-joinEffectPreserving :: (FORALL(x y) (Prim :> Prim) C(x y) -> Maybe (FL Prim C(x y)))
-                      -> WithState RepoModel (Prim :> Prim) C(a b) -> TestResult
-joinEffectPreserving j (WithState r (a :> b) r') =
-  case j (a :> b) of
-       Nothing -> rejected
-       Just x  -> case applyPatch x r of
-                       Nothing  -> failed $ redText "x is not applicable to r."
-                       Just r_x -> if r_x == r'
-                                      then succeeded
-                                      else failed $ redText "r_x /= r'"
-
-joinCommute :: (FORALL(x y) (Prim :> Prim) C(x y) -> Maybe (FL Prim C(x y)))
-             -> (Prim :> Prim :> Prim) C(a b) -> TestResult
-joinCommute j (a :> b :> c) =
-    case j (b :> c) of
-    Nothing -> rejected
-    Just x  ->
-       case commuteFLorComplain (a :> b :>: c :>: NilFL) of
-        Right (b' :>: c' :>: NilFL :> a') ->
-           case commute (a:>:NilFL :> x) of
-             Just (x' :> a'':>:NilFL) ->
-                 case a'' =/\= a' of
-                 NotEq -> failed $ greenText "joinCommute 3"
-                 IsEq -> case j (b' :> c') of
-                         Nothing -> failed $ greenText "joinCommute 4"
-                         Just x'' -> case x' =\/= x'' of
-                                     NotEq -> failed $ greenText "joinCommute 5"
-                                     IsEq -> succeeded
-             _ -> failed $ greenText "joinCommute 1"
-        _ -> rejected
-
-show_read :: (Show2 p, Patchy p) => p C(a b) -> TestResult
-show_read p = let ps = renderPS (showPatch p)
-              in case readPatch ps of
-                 Nothing -> failed (redText "unable to read " $$ showPatch p)
-                 Just (Sealed p'  ) | IsEq <- p' =\/= p -> succeeded
-                                    | otherwise -> failed $ redText "trouble reading patch p" $$
-                                                            showPatch p $$
-                                                            redText "reads as p'" $$
-                                                            showPatch p' $$
-                                                            redText "aka" $$
-                                                            greenText (show2 p) $$
-                                                            redText "and" $$
-                                                            greenText (show2 p')
-
diff --git a/src/Darcs/Test/Patch/Properties/Check.hs b/src/Darcs/Test/Patch/Properties/Check.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/Properties/Check.hs
@@ -0,0 +1,111 @@
+module Darcs.Test.Patch.Properties.Check ( Check(..), checkAPatch ) where
+
+import Test.QuickCheck
+import Control.Applicative
+import Control.Monad ( liftM, liftM2, liftM3, liftM4, replicateM )
+
+import Darcs.Patch.Info ( PatchInfo, patchinfo )
+import Darcs.Test.Patch.Check ( PatchCheck,
+                                checkMove, removeDir, createDir,
+                                isValid, insertLine, fileEmpty, fileExists,
+                                deleteLine, modifyFile, createFile, removeFile,
+                                doCheck, doVerboseCheck, FileContents(..)
+                              )
+import Darcs.Patch.RegChars ( regChars )
+import ByteStringUtils ( linesPS )
+import qualified Data.ByteString as B ( ByteString, null, concat )
+import qualified Data.ByteString.Char8 as BC ( break, pack )
+import Darcs.Patch.FileName ( fn2fp )
+import qualified Data.Map as M ( mapMaybe )
+
+import Darcs.Patch ( addfile, adddir, move,
+                     hunk, tokreplace, binary,
+                     changepref, invert, merge,
+                     effect )
+import Darcs.Patch.Invert ( Invert )
+import Darcs.Patch.V1 ()
+import qualified Darcs.Patch.V1.Core as V1 ( Patch(..) )
+import Darcs.Patch.V1.Core ( isMerger )
+import Darcs.Patch.Prim.V1 ()
+import Darcs.Patch.Prim.V1.Core ( Prim(..), DirPatchType(..), FilePatchType(..) )
+import Darcs.Witnesses.Ordered
+import Darcs.Witnesses.Sealed ( Sealed(Sealed), unseal, mapSeal, Sealed2(..) )
+import Darcs.Witnesses.Unsafe
+
+#include "gadts.h"
+#include "impossible.h"
+
+type Patch = V1.Patch Prim
+
+class Check p where
+   checkPatch :: p C(x y) -> PatchCheck Bool
+
+instance Check p => Check (FL p) where
+   checkPatch NilFL = isValid
+   checkPatch (p :>: ps) = checkPatch p >> checkPatch ps
+
+checkAPatch :: (Invert p, Check p) => p C(x y) -> Bool
+checkAPatch p = doCheck $ do _ <- checkPatch p
+                             checkPatch $ invert p
+
+instance Check (V1.Patch Prim) where
+   checkPatch p | isMerger p = do
+     checkPatch $ effect p
+   checkPatch (V1.Merger _ _ _ _) = impossible
+   checkPatch (V1.Regrem _ _ _ _) = impossible
+   checkPatch (V1.PP p) = checkPatch p
+
+instance Check Prim where
+
+   checkPatch (FP f RmFile) = removeFile $ fn2fp f
+   checkPatch (FP f AddFile) =  createFile $ fn2fp f
+   checkPatch (FP f (Hunk line old new)) = do
+       _ <- fileExists $ fn2fp f
+       mapM_ (deleteLine (fn2fp f) line) old
+       mapM_ (insertLine (fn2fp f) line) (reverse new)
+       isValid
+   checkPatch (FP f (TokReplace t old new)) =
+       modifyFile (fn2fp f) (tryTokPossibly t old new)
+   -- note that the above isn't really a sure check, as it leaves PSomethings
+   -- and PNothings which may have contained new...
+   checkPatch (FP f (Binary o n)) = do
+       _ <- fileExists $ fn2fp f
+       mapM_ (deleteLine (fn2fp f) 1) (linesPS o)
+       _ <- fileEmpty $ fn2fp f
+       mapM_ (insertLine (fn2fp f) 1) (reverse $ linesPS n)
+       isValid
+
+   checkPatch (DP d AddDir) = createDir $ fn2fp d
+   checkPatch (DP d RmDir) = removeDir $ fn2fp d
+
+   checkPatch (Move f f') = checkMove (fn2fp f) (fn2fp f')
+   checkPatch (ChangePref _ _ _) = return True
+
+tryTokPossibly :: String -> String -> String
+                -> (Maybe FileContents) -> (Maybe FileContents)
+tryTokPossibly t o n = liftM $ \contents ->
+        let lines' = M.mapMaybe (liftM B.concat
+                                  . tryTokInternal t (BC.pack o) (BC.pack n))
+                                (fcLines contents)
+        in contents { fcLines = lines' }
+
+tryTokInternal :: String -> B.ByteString -> B.ByteString
+                 -> B.ByteString -> Maybe [B.ByteString]
+tryTokInternal _ _ _ s | B.null s = Just []
+tryTokInternal t o n s =
+    case BC.break (regChars t) s of
+    (before,s') ->
+        case BC.break (not . regChars t) s' of
+        (tok,after) ->
+            case tryTokInternal t o n after of
+            Nothing -> Nothing
+            Just rest ->
+                if tok == o
+                then Just $ before : n : rest
+                else if tok == n
+                     then Nothing
+                     else Just $ before : tok : rest
+
+verboseCheckAPatch :: (Invert p, Check p) => p C(x y) -> Bool
+verboseCheckAPatch p = doVerboseCheck $ do checkPatch p
+
diff --git a/src/Darcs/Test/Patch/Properties/Generic.hs b/src/Darcs/Test/Patch/Properties/Generic.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/Properties/Generic.hs
@@ -0,0 +1,369 @@
+--  Copyright (C) 2007 David Roundy
+--
+--  This program is free software; you can redistribute it and/or modify
+--  it under the terms of the GNU General Public License as published by
+--  the Free Software Foundation; either version 2, or (at your option)
+--  any later version.
+--
+--  This program is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+--  GNU General Public License for more details.
+--
+--  You should have received a copy of the GNU General Public License
+--  along with this program; see the file COPYING.  If not, write to
+--  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+--  Boston, MA 02110-1301, USA.
+
+{-# LANGUAGE CPP #-}
+{-# OPTIONS_GHC -fno-warn-deprecations -fno-warn-orphans #-}
+
+#include "gadts.h"
+
+module Darcs.Test.Patch.Properties.Generic
+    ( invertSymmetry, inverseComposition, invertRollback,
+      recommute, commuteInverses, effectPreserving,
+      permutivity, partialPermutivity,
+      patchAndInverseCommute, mergeEitherWay,
+      show_read,
+      mergeCommute, mergeConsistent, mergeArgumentsConsistent,
+      joinEffectPreserving, joinCommute, propIsMergeable
+    ) where
+
+import Darcs.Test.Util.TestResult ( TestResult, succeeded, failed, rejected,
+                                    (<&&>), fromMaybe )
+import Darcs.Test.Patch.RepoModel ( RepoModel, RepoState, repoApply, eqModel, showModel
+                                  , maybeFail, Fail )
+import Darcs.Test.Patch.WithState ( WithState(..), WithStartState(..) )
+import Darcs.Test.Patch.Arbitrary.Generic ( Tree, flattenOne )
+
+import Control.Monad ( msum )
+import Darcs.Witnesses.Show ( Show2(..), show2 )
+import Darcs.Patch.Patchy ( Patchy, showPatch, commute, invert )
+import Darcs.Patch.Prim.Class ( PrimPatch, PrimOf, FromPrim )
+import Darcs.Patch ()
+import Darcs.Patch.Apply ( ApplyState )
+import Darcs.Patch.Commute ( commuteFLorComplain )
+import Darcs.Patch.Merge ( Merge(merge) )
+import Darcs.Patch.Read ( readPatch )
+import Darcs.Patch.Invert ( invertFL )
+import Darcs.Witnesses.Eq ( MyEq(..), EqCheck(..), isIsEq )
+import Darcs.Witnesses.Ordered ( FL(..), (:>)(..), (:\/:)(..), (:/\:)(..), lengthFL, eqFL, reverseRL )
+import Darcs.Witnesses.Sealed ( Sealed(Sealed), seal2, Sealed2 )
+import Printer ( Doc, renderPS, redText, greenText, ($$), text )
+--import Darcs.ColorPrinter ( traceDoc )
+
+propIsMergeable :: forall model p C(x) . (FromPrim p, Merge p, RepoModel model)
+                  => Sealed (WithStartState model (Tree (PrimOf p)))
+                  -> Maybe (Tree p C(x))
+propIsMergeable (Sealed (WithStartState _ t))
+   = case flattenOne t of
+        Sealed ps -> let _ = seal2 ps :: Sealed2 (FL p)
+                     in case lengthFL ps of
+                       _ -> Nothing
+
+-- | invert symmetry   inv(inv(p)) = p
+invertSymmetry :: Patchy p => p C(a b) -> TestResult
+invertSymmetry p = case invert (invert p) =\/= p of
+                        IsEq  -> succeeded
+                        NotEq -> failed $ redText "p /= inv(inv(p))"
+
+inverseComposition :: Patchy p => (p :> p) C(x y) -> TestResult
+inverseComposition (a :> b) =
+    case eqFL (reverseRL (invertFL (a:>:b:>:NilFL))) (invert b:>:invert a:>:NilFL) of
+      IsEq -> succeeded
+      NotEq -> failed $ redText "inv(a :>: b :>: NilFL) /= inv(b) :>: inv(a) :>: NilFL"
+
+-- | invert rollback   if b = A(a) then a = A'(b)
+invertRollback :: (ApplyState p ~ RepoState model, Patchy p, RepoModel model)
+                => WithState model p C(a b) -> TestResult
+invertRollback (WithState a x b)
+  = case maybeFail $ repoApply b (invert x) of
+         Nothing -> failed $ redText "x' not applicable to b."
+         Just a1 -> if a1 `eqModel` a
+                       then succeeded
+                       else failed $ redText "a1: " $$ text (showModel a1)
+                                  $$ redText " ---- is not equals to a:" $$ text (showModel a)
+                                  $$ redText "where a was" $$ text (showModel b)
+                                  $$ redText "with (invert x) on top:" $$ showPatch (invert x)
+
+-- | recommute   AB ↔ B′A′ if and only if B′A′ ↔ AB
+recommute :: Patchy p => (FORALL(x y) ((p :> p) C(x y) -> Maybe ((p :> p) C(x y))))
+          -> (p :> p) C(a b) -> TestResult
+recommute c (x :> y) =
+    case c (x :> y) of
+    Nothing -> rejected
+    Just (y' :> x') ->
+       case c (y' :> x') of
+         Nothing -> failed (redText "failed" $$ showPatch y' $$ redText ":>" $$ showPatch x')
+         Just (x'' :> y'') ->
+             case y'' =/\= y of
+             NotEq -> failed (redText "y'' =/\\= y failed, where x" $$ showPatch x $$
+                              redText ":> y" $$ showPatch y $$
+                              redText "y'" $$ showPatch y' $$
+                              redText ":> x'" $$ showPatch x' $$
+                              redText "x''" $$ showPatch x'' $$
+                              redText ":> y''" $$ showPatch y'')
+             IsEq -> case x'' =/\= x of
+                     NotEq -> failed (redText "x'' /= x" $$ showPatch x'' $$ redText ":>" $$ showPatch y'')
+                     IsEq -> succeeded
+
+-- | commuteInverses   AB ↔ B′A′ if and only if B⁻¹A⁻¹ ↔ A′⁻¹B′⁻¹
+commuteInverses :: Patchy p => (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
+                 -> (p :> p) C(a b) -> TestResult
+commuteInverses c (x :> y) =
+    case c (x :> y) of
+    Nothing -> rejected
+    Just (y' :> x') ->
+        case c (invert y :> invert x) of
+        Nothing -> failed $ redText "second commute failed" $$
+                            redText "x" $$ showPatch x $$ redText "y" $$ showPatch y $$
+                            redText "y'" $$ showPatch y' $$ redText "x'" $$ showPatch x'
+        Just (ix' :> iy') ->
+            case invert ix' =/\= x' of
+            NotEq -> failed $ redText "invert ix' /= x'" $$
+                              redText "x" $$ showPatch x $$
+                              redText "y" $$ showPatch y $$
+                              redText "y'" $$ showPatch y' $$
+                              redText "x'" $$ showPatch x' $$
+                              redText "ix'" $$ showPatch ix' $$
+                              redText "iy'" $$ showPatch iy' $$
+                              redText "invert ix'" $$ showPatch (invert ix') $$
+                              redText "invert iy'" $$ showPatch (invert iy')
+            IsEq -> case y' =\/= invert iy' of
+                    NotEq -> failed $ redText "y' /= invert iy'" $$ showPatch iy' $$ showPatch y'
+                    IsEq -> succeeded
+
+-- | effect preserving  AB <--> B'A' then effect(AB) = effect(B'A')
+effectPreserving :: (Patchy p, RepoModel model, ApplyState p ~ RepoState model) =>
+                        (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
+                     -> WithState model (p :> p) C(a b) -> TestResult
+effectPreserving c (WithState r (x :> y) r')
+  = case c (x :> y) of
+    Nothing         -> rejected
+    Just (y' :> x') ->
+      case maybeFail $ repoApply r y' of
+      Nothing  -> failed $ redText "y' is not applicable to r."
+      Just r_y' ->
+        case maybeFail $ repoApply r_y' x' of
+        Nothing     -> failed $ redText "x' is not applicable to r_y'."
+        Just r_y'x' -> if r_y'x' `eqModel` r'
+                          then succeeded
+                          else failed $ redText "r_y'x' is not equal to r'."
+
+-- | patchAndInverseCommute   If AB ↔ B′A′ then A⁻¹B′ ↔ BA′⁻¹
+patchAndInverseCommute :: Patchy p =>
+                             (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
+                          -> (p :> p) C(a b) -> TestResult
+patchAndInverseCommute c (x :> y) =
+  case c (x :> y) of
+  Nothing -> rejected
+  Just (y' :> x') ->
+     case c (invert x :> y') of
+       Nothing -> failed (redText ""
+                          $$ redText "-------- original commute (x :> y):"
+                          $$ showPatch x $$ redText ":>" $$ showPatch y
+                          $$ redText "-------- result (y' :> x'):"
+                          $$ showPatch y' $$ redText ":>" $$ showPatch x'
+                          $$ redText "-------- bad commute (invert x :> y'):"
+                          $$ showPatch (invert x) $$ redText ":>" $$ showPatch y')
+       Just (y'' :> ix') ->
+           case y'' =\/= y of
+           NotEq -> failed (redText "y'' /= y" $$
+                            redText "x" $$ showPatch x $$
+                            redText "y" $$ showPatch y $$
+                            redText "x'" $$ showPatch x' $$
+                            redText "y'" $$ showPatch y' $$
+                            redText "y''" $$ showPatch y'' $$
+                            redText ":> x'" $$ showPatch x')
+           IsEq -> case x' =\/= invert ix' of
+                   NotEq -> failed (redText "x' /= invert ix'" $$
+                                    redText "y''" $$ showPatch y'' $$
+                                    redText ":> x'" $$ showPatch x' $$
+                                    redText "invert x" $$ showPatch (invert x) $$
+                                    redText ":> y" $$ showPatch y $$
+                                    redText "y'" $$ showPatch y' $$
+                                    redText "ix'" $$ showPatch ix')
+                   IsEq -> succeeded
+
+permutivity :: Patchy p => (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
+            -> (p :> p :> p) C(a b) -> TestResult
+permutivity c (x:>y:>z) =
+  case c (x :> y) of
+  Nothing -> rejected
+  Just (y1 :> x1) ->
+    case c (y :> z) of
+    Nothing -> rejected
+    Just (z2 :> y2) ->
+      case c (x :> z2) of
+      Nothing -> rejected
+      Just (z3 :> x3) ->
+        case c (x1 :> z) of
+          Nothing -> failed $ redText "permutivity1"
+          Just (z4 :> x4) ->
+            --traceDoc (greenText "third commuted" $$
+            --          greenText "about to commute" $$
+            --          greenText "y1" $$ showPatch y1 $$
+            --          greenText "z4" $$ showPatch z4) $
+            case c (y1 :> z4) of
+            Nothing -> failed $ redText "permutivity2"
+            Just (z3_ :> y4)
+                | IsEq <- z3_ =\/= z3 ->
+                     --traceDoc (greenText "passed z3") $ error "foobar test" $
+                     case c (y4 :> x4) of
+                     Nothing -> failed $ redText "permutivity5: input was" $$
+                                         redText "x" $$ showPatch x $$
+                                         redText "y" $$ showPatch y $$
+                                         redText "z" $$ showPatch z $$
+                                         redText "z3" $$ showPatch z3 $$
+                                         redText "failed commute of" $$
+                                         redText "y4" $$ showPatch y4 $$
+                                         redText "x4" $$ showPatch x4 $$
+                                         redText "whereas commute of x and y give" $$
+                                         redText "y1" $$ showPatch y1 $$
+                                         redText "x1" $$ showPatch x1
+                     Just (x3_ :> y2_)
+                          | NotEq <- x3_ =\/= x3 -> failed $ redText "permutivity6"
+                          | NotEq <- y2_ =/\= y2 -> failed $ redText "permutivity7"
+                          | otherwise -> succeeded
+                | otherwise ->
+                    failed $ redText "permutivity failed" $$
+                             redText "z3" $$ showPatch z3 $$
+                             redText "z3_" $$ showPatch z3_
+
+partialPermutivity :: Patchy p => (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
+                    -> (p :> p :> p) C(a b) -> TestResult
+partialPermutivity c (xx:>yy:>zz) = pp (xx:>yy:>zz) <&&> pp (invert zz:>invert yy:>invert xx)
+    where pp (x:>y:>z) =
+            case c (y :> z) of
+            Nothing -> rejected
+            Just (z1 :> y1) ->
+              case c (x :> z1) of
+              Nothing -> rejected
+              Just (_ :> x1) ->
+                case c (x :> y) of
+                  Just _ -> rejected -- this is covered by full permutivity test above
+                  Nothing ->
+                      case c (x1 :> y1) of
+                      Nothing -> succeeded
+                      Just _ -> failed $ greenText "partialPermutivity error" $$
+                                         greenText "x" $$ showPatch x $$
+                                         greenText "y" $$ showPatch y $$
+                                         greenText "z" $$ showPatch z
+
+mergeArgumentsConsistent :: Patchy p =>
+                              (FORALL(x y) p C(x y) -> Maybe Doc)
+                           -> (p :\/: p) C(a b) -> TestResult
+mergeArgumentsConsistent isConsistent (x :\/: y) =
+  fromMaybe $
+    msum [(\z -> redText "mergeArgumentsConsistent x" $$ showPatch x $$ z) `fmap` isConsistent x,
+          (\z -> redText "mergeArgumentsConsistent y" $$ showPatch y $$ z) `fmap` isConsistent y]
+
+mergeConsistent :: (Patchy p, Merge p) =>
+                           (FORALL(x y) p C(x y) -> Maybe Doc)
+                        -> (p :\/: p) C(a b) -> TestResult
+mergeConsistent isConsistent (x :\/: y) =
+    case merge (x :\/: y) of
+    y' :/\: x' ->
+      fromMaybe $
+        msum [(\z -> redText "mergeConsistent x" $$ showPatch x $$ z) `fmap` isConsistent x,
+              (\z -> redText "mergeConsistent y" $$ showPatch y $$ z) `fmap` isConsistent y,
+              (\z -> redText "mergeConsistent x'" $$ showPatch x' $$ z $$
+                     redText "where x' comes from x" $$ showPatch x $$
+                     redText "and y" $$ showPatch y) `fmap` isConsistent x',
+              (\z -> redText "mergeConsistent y'" $$ showPatch y' $$ z) `fmap` isConsistent y']
+
+mergeEitherWay :: (Patchy p, Merge p) => (p :\/: p) C(x y) -> TestResult
+mergeEitherWay (x :\/: y) =
+    case merge (x :\/: y) of
+    y' :/\: x' -> case merge (y :\/: x) of
+                  x'' :/\: y'' | IsEq <- x'' =\/= x',
+                                 IsEq <- y'' =\/= y' -> succeeded
+                               | otherwise -> failed $ redText "mergeEitherWay bug"
+
+mergeCommute :: (Patchy p, Merge p) => (p :\/: p) C(x y) -> TestResult
+mergeCommute (x :\/: y) =
+    case merge (x :\/: y) of
+    y' :/\: x' ->
+        case commute (x :> y') of
+        Nothing -> failed $ redText "mergeCommute 1" $$
+                            redText "x" $$ showPatch x $$
+                            redText "y" $$ showPatch y $$
+                            redText "x'" $$ showPatch x' $$
+                            redText "y'" $$ showPatch y'
+        Just (y_ :> x'_)
+            | IsEq <- y_ =\/= y,
+              IsEq <- x'_ =\/= x' ->
+                      case commute (y :> x') of
+                      Nothing -> failed $ redText "mergeCommute 2 failed" $$
+                                          redText "x" $$ showPatch x $$
+                                          redText "y" $$ showPatch y $$
+                                          redText "x'" $$ showPatch x' $$
+                                          redText "y'" $$ showPatch y'
+                      Just (x_ :> y'_)
+                           | IsEq <- x_ =\/= x,
+                             IsEq <- y'_ =\/= y' -> succeeded
+                           | otherwise -> failed $ redText "mergeCommute 3" $$
+                                                   redText "x" $$ showPatch x $$
+                                                   redText "y" $$ showPatch y $$
+                                                   redText "x'" $$ showPatch x' $$
+                                                   redText "y'" $$ showPatch y' $$
+                                                   redText "x_" $$ showPatch x_ $$
+                                                   redText "y'_" $$ showPatch y'_
+            | otherwise -> failed $ redText "mergeCommute 4" $$
+                                    redText "x" $$ showPatch x $$
+                                    redText "y" $$ showPatch y $$
+                                    redText "x'" $$ showPatch x' $$
+                                    redText "y'" $$ showPatch y' $$
+                                    redText "x'_" $$ showPatch x'_ $$
+                                    redText "y_" $$ showPatch y_
+
+
+-- | join effect preserving
+joinEffectPreserving :: (PrimPatch prim, RepoModel model, ApplyState prim ~ RepoState model )
+                     => (FORALL(x y) (prim :> prim) C(x y) -> Maybe (FL prim C(x y)))
+                      -> WithState model (prim :> prim) C(a b) -> TestResult
+joinEffectPreserving j (WithState r (a :> b) r') =
+  case j (a :> b) of
+       Nothing -> rejected
+       Just x  -> case maybeFail $ repoApply r x of
+                       Nothing  -> failed $ redText "x is not applicable to r."
+                       Just r_x -> if r_x `eqModel` r'
+                                      then succeeded
+                                      else failed $ redText "r_x /= r'"
+
+joinCommute :: (PrimPatch prim) => (FORALL(x y) (prim :> prim) C(x y) -> Maybe (FL prim C(x y)))
+             -> (prim :> prim :> prim) C(a b) -> TestResult
+joinCommute j (a :> b :> c) =
+    case j (b :> c) of
+    Nothing -> rejected
+    Just x  ->
+       case commuteFLorComplain (a :> b :>: c :>: NilFL) of
+        Right (b' :>: c' :>: NilFL :> a') ->
+           case commute (a:>:NilFL :> x) of
+             Just (x' :> a'':>:NilFL) ->
+                 case a'' =/\= a' of
+                 NotEq -> failed $ greenText "joinCommute 3"
+                 IsEq -> case j (b' :> c') of
+                         Nothing -> failed $ greenText "joinCommute 4"
+                         Just x'' -> case x' =\/= x'' of
+                                     NotEq -> failed $ greenText "joinCommute 5"
+                                     IsEq -> succeeded
+             _ -> failed $ greenText "joinCommute 1"
+        _ -> rejected
+
+show_read :: (Show2 p, Patchy p) => p C(a b) -> TestResult
+show_read p = let ps = renderPS (showPatch p)
+              in case readPatch ps of
+                 Nothing -> failed (redText "unable to read " $$ showPatch p)
+                 Just (Sealed p'  ) | IsEq <- p' =\/= p -> succeeded
+                                    | otherwise -> failed $ redText "trouble reading patch p" $$
+                                                            showPatch p $$
+                                                            redText "reads as p'" $$
+                                                            showPatch p' $$
+                                                            redText "aka" $$
+                                                            greenText (show2 p) $$
+                                                            redText "and" $$
+                                                            greenText (show2 p')
+
+-- vim: fileencoding=utf-8 :
diff --git a/src/Darcs/Test/Patch/Properties/GenericUnwitnessed.hs b/src/Darcs/Test/Patch/Properties/GenericUnwitnessed.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/Properties/GenericUnwitnessed.hs
@@ -0,0 +1,90 @@
+module Darcs.Test.Patch.Properties.GenericUnwitnessed where
+
+import qualified Darcs.Test.Patch.Properties.Generic as W
+     ( permutivity, partialPermutivity
+     , mergeConsistent, mergeArgumentsConsistent, mergeEitherWay
+     , mergeCommute, patchAndInverseCommute, joinCommute, commuteInverses
+     , recommute
+     , show_read )
+import Darcs.Test.Patch.Arbitrary.Generic ( Tree )
+import Darcs.Test.Patch.RepoModel( RepoModel, RepoState )
+import Darcs.Test.Patch.WithState( WithStartState )
+
+import qualified Darcs.Test.Patch.Properties.Real as W ( propConsistentTreeFlattenings )
+import Darcs.Test.Patch.WSub
+import Darcs.Test.Util.TestResult
+
+import Darcs.Patch.Prim.V1 ( Prim )
+import Darcs.Patch.Patchy ( showPatch )
+import Darcs.Witnesses.Show
+import Darcs.Witnesses.Eq
+import Darcs.Witnesses.Sealed( Sealed )
+import Darcs.Patch.Merge ( Merge )
+import Darcs.Patch ( Patchy )
+import Printer ( Doc, redText, ($$) )
+import qualified Storage.Hashed.Tree as HST ( Tree )
+
+#include "gadts.h"
+
+permutivity :: (Patchy wp, WSub wp p) => (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
+            -> (p :> p :> p) C(a b) -> TestResult
+permutivity f = W.permutivity (fmap toW . f . fromW) . toW
+
+partialPermutivity :: (Patchy wp, WSub wp p) => (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
+                    -> (p :> p :> p) C(a b) -> TestResult
+partialPermutivity f = W.partialPermutivity (fmap toW . f . fromW) . toW
+
+mergeEitherWay :: (Patchy wp, Merge wp, WSub wp p) => (p :\/: p) C(x y) -> TestResult
+mergeEitherWay = W.mergeEitherWay . toW
+
+commuteInverses :: (Patchy wp, WSub wp p) => (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
+                 -> (p :> p) C(a b) -> TestResult
+commuteInverses f = W.commuteInverses (fmap toW . f . fromW) . toW
+
+recommute :: (Patchy wp, WSub wp p) => (FORALL(x y) ((p :> p) C(x y) -> Maybe ((p :> p) C(x y))))
+          -> (p :> p) C(a b) -> TestResult
+recommute f = W.recommute (fmap toW . f . fromW) . toW
+
+mergeCommute :: (Patchy wp, Merge wp, WSub wp p) => (p :\/: p) C(x y) -> TestResult
+mergeCommute = W.mergeCommute . toW
+
+mergeConsistent :: (Patchy wp, Merge wp, WSub wp p) =>
+                           (FORALL(x y) p C(x y) -> Maybe Doc)
+                        -> (p :\/: p) C(a b) -> TestResult
+mergeConsistent f = W.mergeConsistent (f . fromW) . toW
+
+mergeArgumentsConsistent :: (Patchy wp, WSub wp p) =>
+                              (FORALL(x y) p C(x y) -> Maybe Doc)
+                           -> (p :\/: p) C(a b) -> TestResult
+mergeArgumentsConsistent f = W.mergeArgumentsConsistent (f . fromW) . toW
+
+show_read :: (Patchy p, Show2 p) => p C(x y) -> TestResult
+show_read = W.show_read
+
+patchAndInverseCommute :: (Patchy wp, WSub wp p) =>
+                             (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
+                          -> (p :> p) C(a b) -> TestResult
+patchAndInverseCommute f = W.patchAndInverseCommute (fmap toW . f . fromW) . toW
+
+
+joinCommute :: (FORALL(x y) (Prim :> Prim) C(x y) -> Maybe (FL Prim C(x y)))
+             -> (Prim :> Prim :> Prim) C(a b) -> TestResult
+joinCommute f = W.joinCommute (fmap toW . f . fromW) . toW
+
+consistentTreeFlattenings :: (RepoState model ~ HST.Tree, RepoModel model)
+                          => Sealed (WithStartState model (Tree Prim)) -> TestResult
+consistentTreeFlattenings = (\x -> if W.propConsistentTreeFlattenings x
+                                      then succeeded
+                                      else failed $ redText "oops")
+
+commuteFails :: (MyEq p, Patchy p)
+             => ((p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
+             -> (p :> p) C(x y)
+             -> TestResult
+commuteFails c (x :> y) = case c (x :> y) of
+                            Nothing -> succeeded
+                            Just (y' :> x') ->
+                              failed $ redText "x" $$ showPatch x $$
+                                       redText ":> y" $$ showPatch y $$
+                                       redText "y'" $$ showPatch y' $$
+                                       redText ":> x'" $$ showPatch x'
diff --git a/src/Darcs/Test/Patch/Properties/Real.hs b/src/Darcs/Test/Patch/Properties/Real.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/Properties/Real.hs
@@ -0,0 +1,35 @@
+module Darcs.Test.Patch.Properties.Real
+       ( propConsistentTreeFlattenings ) where
+
+import Darcs.Test.Patch.Arbitrary.Generic ( Tree, flattenTree, G2(..), mapTree )
+import Darcs.Test.Patch.WithState
+import Darcs.Test.Patch.RepoModel ( RepoModel, repoApply, showModel, eqModel, RepoState
+                                  , Fail, maybeFail )
+import qualified Storage.Hashed.Tree as HST ( Tree )
+
+import Darcs.Witnesses.Sealed( Sealed(..) )
+import Darcs.Patch.V2.Real( prim2real )
+import Darcs.Patch.Prim.V1 ( Prim )
+
+#include "gadts.h"
+#include "impossible.h"
+
+assertEqualFst :: (RepoModel a, Show b, Show c) => (Fail (a x), b) -> (Fail (a x), c) -> Bool
+assertEqualFst (x,bx) (y,by)
+    | Just x' <- maybeFail x, Just y' <- maybeFail y, x' `eqModel` y' = True
+    | Nothing <- maybeFail x, Nothing <- maybeFail y = True
+    | otherwise = error ("Not really equal:\n" ++ showx ++ "\nand\n" ++ showy
+                         ++ "\ncoming from\n" ++ show bx ++ "\nand\n" ++ show by)
+      where showx | Just x' <- maybeFail x = showModel x'
+                  | otherwise = "Nothing"
+            showy | Just y' <- maybeFail y = showModel y'
+                  | otherwise = "Nothing"
+
+propConsistentTreeFlattenings :: (RepoState model ~ HST.Tree, RepoModel model)
+                              => Sealed (WithStartState model (Tree Prim)) -> Bool
+propConsistentTreeFlattenings (Sealed (WithStartState start t))
+  = fromJust $
+    do Sealed (G2 flat) <- return $ flattenTree $ mapTree prim2real t
+       rms <- return $ map (start `repoApply`) flat
+       return $ and $ zipWith assertEqualFst (zip rms flat) (tail $ zip rms flat)
+
diff --git a/src/Darcs/Test/Patch/Properties/V1Set1.hs b/src/Darcs/Test/Patch/Properties/V1Set1.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/Properties/V1Set1.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE CPP #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Darcs.Test.Patch.Properties.V1Set1
+       ( checkMerge, checkMergeEquiv, checkMergeSwap, checkCanon
+       , checkCommute, checkCantCommute
+       , tShowRead
+       , tMergeEitherWayValid, tTestCheck ) where
+
+import Darcs.Patch
+     ( Patchy, commute, invert, merge, effect
+     , readPatch, showPatch
+     , fromPrim, canonize, sortCoalesceFL )
+import Darcs.Patch.Prim.V1 ( Prim )
+import Darcs.Patch.Merge ( Merge )
+import qualified Darcs.Patch.V1 as V1 ( Patch )
+import Darcs.Test.Patch.Properties.Check ( checkAPatch, Check )
+import Printer ( renderPS )
+import Darcs.Witnesses.Eq
+import Darcs.Witnesses.Ordered
+import Darcs.Witnesses.Show
+import Darcs.Witnesses.Sealed ( Sealed(Sealed) )
+import Darcs.Witnesses.Unsafe( unsafeCoercePEnd )
+import Darcs.Test.Util.TestResult
+import Printer ( text )
+
+#include "gadts.h"
+
+type Patch = V1.Patch Prim
+
+
+quickmerge :: (Patchy p, Merge p) => (p :\/: p ) C(x y) -> p C(y z)
+quickmerge (p1:\/:p2) = case merge (p1:\/:p2) of
+                        _ :/\: p1' -> unsafeCoercePEnd p1'
+
+instance Show2 p => Show ((p :/\: p) C(x y)) where
+   show (x :/\: y) = show2 x ++ " :/\\: " ++ show2 y
+instance Show2 p => Show ((p :< p) C(x y)) where
+   show (x :< y) = show2 x ++ " :< " ++ show2 y
+instance MyEq p => Eq ((p :/\: p) C(x y)) where
+   (x :/\: y) == (x' :/\: y') = isIsEq (x =\/= x') && isIsEq (y =\/= y')
+
+-- ----------------------------------------------------------------------------
+-- A number of "comparison" properties: these carry out some operation on
+-- inputs (first value in the pair) and compare the results with a known
+-- expected value (the second value in the pair).
+--
+
+checkMerge :: ((FL Patch:\/: FL Patch) C(x y), FL Patch C(y z)) -> TestResult
+checkMerge (p1:\/:p2,p1') =
+   case merge (p1:\/:p2) of
+   _ :/\: p1a ->
+       if isIsEq (p1a `eqFL` p1')
+       then succeeded
+       else failed $ text $ "Merge gave wrong value!\n"++show p1++show p2
+            ++"I expected\n"++show p1'
+            ++"but found instead\n"++show p1a
+
+checkMergeEquiv :: ((FL Patch:\/:FL Patch) C(x y),FL Patch C(y z)) -> TestResult
+checkMergeEquiv (p1:\/: p2, pe) =
+    case quickmerge (p1:\/:p2) of
+    p1' -> if checkAPatch (invert p1 :>: p2 :>: p1' :>: invert pe :>: NilFL)
+           then succeeded
+           else failed $ text $ "Oh no, merger isn't equivalent...\n"++show p1++"\n"++show p2
+                 ++"in other words\n" ++ show (p1 :\/: p2)
+                 ++"merges as\n" ++ show (merge $ p1 :\/: p2)
+                 ++"merges to\n" ++ show (quickmerge $ p1 :\/: p2)
+                 ++"which is equivalent to\n" ++ show (effect p1')
+                 ++ "should all work out to\n"
+                 ++ show pe
+
+checkMergeSwap :: (FL Patch C(x y), FL Patch C(x z)) -> TestResult
+checkMergeSwap (p1, p2) =
+    case merge (p2:\/:p1) of
+    _ :/\: p2' ->
+        case merge (p1:\/:p2) of
+        _ :/\: p1' ->
+            case commute (p1:>p2') of
+            Just (_:>p1'b) ->
+                if not $ p1'b `eqFLUnsafe` p1'
+                then failed $ text $ "Merge swapping problem with...\np1 "++
+                      show p1++"merged with\np2 "++
+                      show p2++"p1' is\np1' "++
+                      show p1'++"p1'b is\np1'b  "++
+                      show p1'b
+                else succeeded
+            Nothing -> failed $ text $ "Merge commuting problem with...\np1 "++
+                        show p1++"merged with\np2 "++
+                        show p2++"gives\np2' "++
+                        show p2'++"which doesn't commute with p1.\n"
+
+checkCanon :: FORALL(x y) (FL Patch C(x y), FL Patch C(x y)) -> TestResult
+checkCanon (p1,p2) =
+    if isIsEq $ eqFL p1_ p2
+    then succeeded
+    else failed $ text $ "Canonization failed:\n"++show p1++"canonized is\n"
+          ++show (p1_ :: FL Patch C(x y))
+          ++"which is not\n"++show p2
+    where p1_ = mapFL_FL fromPrim $ concatFL $ mapFL_FL canonize $ sortCoalesceFL $ effect p1
+
+checkCommute :: ((FL Patch:< FL Patch) C(x y), (FL Patch:< FL Patch) C(x y)) -> TestResult
+checkCommute (p1:<p2,p2':<p1') =
+   case commute (p2:>p1) of
+   Just (p1a:>p2a) ->
+       if (p2a:< p1a) == (p2':< p1')
+       then succeeded
+       else failed $ text $ "Commute gave wrong value!\n"++show p1++"\n"++show p2
+             ++"should be\n"++show p2'++"\n"++show p1'
+             ++"but is\n"++show p2a++"\n"++show p1a
+   Nothing -> failed $ text $ "Commute failed!\n"++show p1++"\n"++show p2
+   <&&>
+   case commute (p1':>p2') of
+   Just (p2a:>p1a) ->
+       if (p1a:< p2a) == (p1:< p2)
+       then succeeded
+       else failed $ text $ "Commute gave wrong value!\n"++show p2a++"\n"++show p1a
+             ++"should have been\n"++show p2'++"\n"++show p1'
+   Nothing -> failed $ text $ "Commute failed!\n"++show p2'++"\n"++show p1'
+
+checkCantCommute :: (FL Patch:< FL Patch) C(x y) -> TestResult
+checkCantCommute (p1:<p2) =
+    case commute (p2:>p1) of
+    Nothing -> succeeded
+    _ -> failed $ text $ show p1 ++ "\n\n" ++ show p2 ++
+          "\nArgh, these guys shouldn't commute!\n"
+
+-- ----------------------------------------------------------------------------
+-- A few "test" properties, doing things with input patches and giving a OK/not
+-- OK type of answer.
+
+tShowRead :: (Show2 p, Patchy p) => (FORALL(x y w z) p C(x y) -> p C(w z) -> Bool) -> FORALL(x y) p C(x y) -> TestResult
+tShowRead eq p =
+    case readPatch $ renderPS $ showPatch p of
+    Just (Sealed p') -> if p' `eq` p then succeeded
+                        else failed $ text $ "Failed to read shown:  "++(show2 p)++"\n"
+    Nothing -> failed $ text $ "Failed to read at all:  "++(show2 p)++"\n"
+
+tMergeEitherWayValid :: FORALL(x y p) (Check p, Show2 p, Merge p, Patchy p) => (p :\/: p) C(x y) -> TestResult
+tMergeEitherWayValid (p1 :\/: p2) =
+  case p2 :>: quickmerge (p1:\/: p2) :>: NilFL of
+  combo2 ->
+    case p1 :>: quickmerge (p2:\/: p1) :>: NilFL of
+    combo1 ->
+      if not $ checkAPatch combo1
+      then failed $ text $ "oh my combo1 invalid:\n"++show2 p1++"and...\n"++show2 p2++show combo1
+      else
+        if checkAPatch (invert combo1 :>: combo2 :>: NilFL)
+        then succeeded
+        else failed $ text $ "merge both ways invalid:\n"++show2 p1++"and...\n"++show2 p2++
+              show combo1++
+              show combo2
+
+tTestCheck :: FORALL(x y) FL Patch C(x y) -> TestResult
+tTestCheck p = if checkAPatch p
+                 then succeeded
+                 else failed $ text $ "Failed the check:  "++show p++"\n"
diff --git a/src/Darcs/Test/Patch/Properties/V1Set2.hs b/src/Darcs/Test/Patch/Properties/V1Set2.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/Properties/V1Set2.hs
@@ -0,0 +1,315 @@
+-- Copyright (C) 2002-2003,2007 David Roundy
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 2, or (at your option)
+-- any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program; see the file COPYING.  If not, write to
+-- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+-- Boston, MA 02110-1301, USA.
+
+{-# LANGUAGE CPP #-}
+
+#include "gadts.h"
+
+module Darcs.Test.Patch.Properties.V1Set2
+    ( propCommuteInverse, propPatchAndInverseIsIdentity
+    , propSimpleSmartMergeGoodEnough, propCommuteEquivalency
+    , propMergeValid, propInverseValid, propOtherInverseValid
+    , propCommuteEitherOrder
+    , propCommuteEitherWay, propCommuteTwice
+    , propMergeIsCommutableAndCorrect, propMergeIsSwapable
+
+    , checkSubcommutes
+    , subcommutesInverse, subcommutesNontrivialInverse, subcommutesFailure
+
+    , propReadShow
+    -- TODO: these are exported temporarily to mark them as used
+    -- Figure out whether to enable or remove the tests.
+    , propUnravelThreeMerge, propUnravelSeqMerge
+    , propUnravelOrderIndependent, propResolveConflictsValid
+    ) where
+
+import Prelude hiding ( pi )
+import Test.QuickCheck
+import Test.Framework.Providers.QuickCheck2 ( testProperty )
+import Test.Framework ( Test )
+import Data.Maybe ( isJust )
+
+import Darcs.Test.Patch.Properties.Check ( Check, checkAPatch )
+
+import Darcs.Patch ( invert, commute, merge,
+                     readPatch, resolveConflicts,
+                     fromPrim, showPatch )
+import Darcs.Patch.Commute ( Commute )
+import Darcs.Patch.Invert ( Invert, invertFL )
+import qualified Darcs.Patch.V1 as V1 ( Patch )
+import Darcs.Patch.V1.Commute ( unravel, merger )
+import Darcs.Patch.Prim.V1 ()
+import Darcs.Patch.Prim.V1.Core ( Prim(..) )
+import Darcs.Patch.Prim.V1.Commute ( WrappedCommuteFunction(..), Perhaps(..),
+                                     subcommutes )
+import Printer ( renderPS )
+import Darcs.Witnesses.Eq
+import Darcs.Witnesses.Ordered
+import Darcs.Witnesses.Sealed ( Sealed(Sealed), unsafeUnseal, unseal, mapSeal, Sealed2(..) )
+import Darcs.Witnesses.Unsafe
+
+#include "impossible.h"
+
+type Patch = V1.Patch Prim
+
+
+-- | Groups a set of tests by giving them the same prefix in their description.
+--   When this is called as @checkSubcommutes subcoms expl@, the prefix for a
+--   test becomes @"Checking " ++ expl ++ " for subcommute "@.
+checkSubcommutes :: Testable a => [(String, a)] -> String
+                                                 -> [Test]
+checkSubcommutes subcoms expl = map check_subcommute subcoms
+  where check_subcommute (name, test) =
+            let testName = expl ++ " for subcommute " ++ name
+            in testProperty testName test
+
+propInverseValid :: Sealed2 (FL Patch) -> Bool
+propInverseValid (Sealed2 p1) = checkAPatch (invert p1:>:p1:>:NilFL)
+propOtherInverseValid :: Sealed2 (FL Patch) -> Bool
+propOtherInverseValid (Sealed2 p1) = checkAPatch (p1:>:invert p1:>:NilFL)
+
+propCommuteTwice :: Sealed2 (FL Patch :> FL Patch) -> Property
+propCommuteTwice (Sealed2 (p1:>p2)) =
+    (doesCommute p1 p2) ==> (Just (p1:>p2) == (commute (p1:>p2) >>= commute))
+doesCommute :: (MyEq p, Invert p, Commute p, Check p) => p C(x y) -> p C(y z) -> Bool
+doesCommute p1 p2 =
+    commute (p1:>p2) /= Nothing && checkAPatch (p1:>:p2:>:NilFL)
+propCommuteEquivalency :: Sealed2 (FL Patch :> FL Patch) -> Property
+propCommuteEquivalency (Sealed2 (p1:>p2)) =
+    (doesCommute p1 p2) ==>
+    case commute (p1:>p2) of
+    Just (p2':>p1') -> checkAPatch (p1:>:p2:>:invert p1':>:invert p2':>:NilFL)
+    _ -> impossible
+
+propCommuteEitherWay :: Sealed2 (FL Patch :> FL Patch) -> Property
+propCommuteEitherWay (Sealed2 (p1:>p2)) =
+    doesCommute p1 p2 ==> doesCommute (invert p2) (invert p1)
+
+propCommuteEitherOrder :: Sealed2 (FL Patch :> FL Patch :> FL Patch) -> Property
+propCommuteEitherOrder (Sealed2 (p1:>p2:>p3)) =
+    checkAPatch (p1:>:p2:>:p3:>:NilFL) &&
+    doesCommute p1 (p2+>+p3) &&
+    doesCommute p2 p3 ==>
+    case commute (p1:>p2) of
+    Nothing -> False
+    Just (p2':>p1') ->
+        case commute (p1':>p3) of
+        Nothing -> False
+        Just (p3':>_) ->
+            case commute (p2':>p3') of
+            Nothing -> False
+            Just (p3'' :> _) ->
+                case commute (p2:>p3) of
+                Nothing -> False
+                Just (p3'a:>_) ->
+                    case commute (p1:>p3'a) of
+                    Just (p3''a:>_) -> isIsEq (p3''a =\/= p3'')
+                    Nothing -> False
+
+propPatchAndInverseIsIdentity :: Sealed2 (FL Patch :> FL Patch) -> Property
+propPatchAndInverseIsIdentity (Sealed2 (p1:>p2)) =
+    checkAPatch (p1:>:p2:>:NilFL) && (commute (p1:>p2) /= Nothing) ==>
+    case commute (p1:>p2) of
+    Just (p2':>_) -> case commute (invert p1:>p2') of
+                    Nothing -> True -- This is a subtle distinction.
+                    Just (p2'':>_) -> isIsEq (p2'' =\/= p2)
+    Nothing -> impossible
+
+propMergeIsCommutableAndCorrect :: Sealed2 (FL Patch :\/: FL Patch) -> Property
+propMergeIsCommutableAndCorrect (Sealed2 (p1:\/:p2)) =
+    checkAPatch (invert p1:>:p2:>:NilFL) ==>
+    case merge (p2:\/:p1) of
+    p1' :/\: p2' ->
+        case commute (p1:>p2') of
+        Nothing -> False
+        Just (p2'':>p1'') -> isIsEq (p2'' =\/= p2) && isIsEq (p1' =/\= p1'')
+propMergeIsSwapable :: Sealed2 (FL Patch :\/: FL Patch) -> Property
+propMergeIsSwapable (Sealed2 (p1:\/:p2)) =
+    checkAPatch (invert p1:>:p2:>:NilFL) ==>
+    case merge (p2:\/:p1) of
+    p1' :/\: p2' ->
+           case merge (p1:\/:p2) of
+           p2''' :/\: p1''' -> isIsEq (p1' =\/= p1''') && isIsEq (p2' =\/= p2''')
+
+propMergeValid :: Sealed2 (FL Patch :\/: FL Patch) -> Property
+propMergeValid (Sealed2 (p1:\/:p2)) =
+    checkAPatch (invert p1:>:p2:>:NilFL) ==>
+    case merge (p2:\/:p1) of
+    _ :/\: p2' ->
+        checkAPatch (invert p1:>:p2:>:invert p2:>:p1:>:p2':>:NilFL)
+
+propSimpleSmartMergeGoodEnough :: Sealed2 (FL Patch :\/: FL Patch) -> Property
+propSimpleSmartMergeGoodEnough (Sealed2 (p1:\/:p2)) =
+    checkAPatch (invert p1:>:p2:>:NilFL) ==>
+    case simpleSmartMerge (p1 :\/: p2) of
+      Nothing -> True
+      Just (Sealed p1'a)
+       -> isJust ((do
+                    p1o :> _ <- commute (p2 :> p1'a)
+                    IsEq <- return $ p1o =\/= p1
+                    Sealed p2'a <- simpleSmartMerge (p2 :\/: p1)
+                    p2b :> p1'b <- commute (p1 :> p2'a)
+                    IsEq <- return $ p2 =\/= p2b
+                    IsEq <- return $ p1'a =\/= p1'b
+                    return ()) :: Maybe ())
+
+simpleSmartMerge :: (Commute p, Invert p) => (p :\/: p) C(x y) -> Maybe (Sealed (p C(y)))
+simpleSmartMerge (p1 :\/: p2) =
+  case commute (invert p2 :> p1) of
+  Just (p1':>_) -> Just (Sealed p1')
+  Nothing -> Nothing
+
+-- | The conflict resolution code (glump) begins by "unravelling" the merger
+-- into a set of sequences of patches.  Each sequence of patches corresponds
+-- to one non-conflicted patch that got merged together with the others.  The
+-- result of the unravelling of a series of merges must obviously be
+-- independent of the order in which those merges are performed.  This
+-- unravelling code (which uses the unwind code mentioned above) uses probably
+-- the second most complicated algorithm.  Fortunately, if we can successfully
+-- unravel the merger, almost any function of the unravelled merger satisfies
+-- the two constraints mentioned above that the conflict resolution code must
+-- satisfy.
+propUnravelThreeMerge :: Patch C(x y) -> Patch C(x z) -> Patch C(x w) -> Property
+propUnravelThreeMerge p1 p2 p3 =
+    checkAPatch (invert p1:>:p2:>:invert p2:>:p3:>:NilFL) ==>
+    (unravel $ unsafeUnseal $ merger "0.0" (unsafeUnseal (merger "0.0" p2 p3)) (unsafeUnseal (merger "0.0" p2 p1))) ==
+    (unravel $ unsafeUnseal $ merger "0.0" (unsafeUnseal (merger "0.0" p1 p3)) (unsafeUnseal (merger "0.0" p1 p2)))
+
+propUnravelSeqMerge :: Patch C(x y) -> Patch C(x z) -> Patch C(z w) -> Property
+propUnravelSeqMerge p1 p2 p3 =
+    checkAPatch (invert p1:>:p2:>:p3:>:NilFL) ==>
+    (unravel $ unsafeUnseal $ merger "0.0" p3 $ unsafeUnseal $ merger "0.0" p2 p1) ==
+    (unravel $ unsafeUnseal $ merger "0.0" (unsafeUnseal $ merger "0.0" p2 p1) p3)
+
+propUnravelOrderIndependent :: Patch C(x y) -> Patch C(x z) -> Property
+propUnravelOrderIndependent p1 p2 =
+    checkAPatch (invert p1:>:p2:>:NilFL) ==>
+    (unravel $ unsafeCoercePStart $ unsafeUnseal $ merger "0.0" p2 p1) == (unravel $ unsafeUnseal $ merger "0.0" p1 p2)
+
+propResolveConflictsValid :: Patch C(x y) -> Patch C(x z) -> Property
+propResolveConflictsValid p1 p2 =
+ case merge (p1:\/:p2) of
+ _ :/\: p1' ->
+   let p = p2:>:p1':>:NilFL in
+    checkAPatch (invert p1:>:p2:>:NilFL) ==>
+    and $ map (\l -> (\ml -> checkAPatch (p+>+ml)) `unseal` mergeList l)
+            $ resolveConflicts p
+
+mergeList :: [Sealed (FL Prim C(x))] -> Sealed (FL Patch C(x))
+mergeList patches = mapFL_FL fromPrim `mapSeal` doml NilFL patches
+    where doml :: FL Prim C(x y) -> [Sealed (FL Prim C(x))] -> Sealed (FL Prim C(x))
+          doml mp (Sealed p:ps) =
+              case commute (invert p :> mp) of
+              Just (mp' :> _) -> doml (p +>+ mp') ps
+              Nothing -> doml mp ps -- This shouldn't happen for "good" resolutions.
+          doml mp [] = Sealed mp
+
+propReadShow :: FL Patch C(x y) -> Bool
+propReadShow p = case readPatch $ renderPS $ showPatch p of
+                   Just (Sealed p') -> isIsEq (p' =\/= p)
+                   Nothing -> False
+
+-- |In order for merges to work right with commuted patches, inverting a patch
+-- past a patch and its inverse had golly well better give you the same patch
+-- back again.
+propCommuteInverse :: Sealed2 (FL Patch :> FL Patch) -> Property
+propCommuteInverse (Sealed2 (p1 :> p2)) =
+    doesCommute p1 p2 ==> case commute (p1 :> p2) of
+                           Nothing -> impossible
+                           Just (_ :> p1') ->
+                               case commute (p1' :> invert p2) of
+                               Nothing -> False
+                               Just (_ :> p1'') -> isIsEq (p1'' =/\= p1)
+
+type CommuteProperty = Sealed2 (Prim :> Prim) -> Property
+
+subcommutesInverse :: [(String, CommuteProperty)]
+subcommutesInverse = zip names (map prop_subcommute cs)
+    where (names, cs) = unzip subcommutes
+          prop_subcommute c (Sealed2 (p1:>p2)) =
+              does c p1 p2 ==>
+              case runWrappedCommuteFunction c (p2:< p1) of
+              Succeeded (p1':<p2') ->
+                  case runWrappedCommuteFunction c (invert p2:< p1') of
+                  Succeeded (p1'':<ip2x') -> isIsEq (p1'' =/\= p1) &&
+                      case runWrappedCommuteFunction c (invert p1:< invert p2) of
+                      Succeeded (ip2':< ip1') ->
+                          case runWrappedCommuteFunction c (p2':< invert p1) of
+                          Succeeded (ip1o':< p2o) -> isJust ((do
+                                 IsEq <- return $ invert ip1' =/\= p1'
+                                 IsEq <- return $ invert ip2' =/\= p2'
+                                 IsEq <- return $ ip1o' =/\= ip1'
+                                 IsEq <- return $ p2o =\/= p2
+                                 IsEq <- return $ p1'' =/\= p1
+                                 IsEq <- return $ ip2x' =\/= ip2'
+                                 return ()) :: Maybe ())
+                          _ -> False
+                      _ -> False
+                  _ -> False
+              _ -> False
+
+subcommutesNontrivialInverse :: [(String, CommuteProperty)]
+subcommutesNontrivialInverse = zip names (map prop_subcommute cs)
+    where (names, cs) = unzip subcommutes
+          prop_subcommute c (Sealed2 (p1 :> p2)) =
+              nontrivial c p1 p2 ==>
+              case runWrappedCommuteFunction c (p2:< p1) of
+              Succeeded (p1':<p2') ->
+                  case runWrappedCommuteFunction c (invert p2:< p1') of
+                  Succeeded (p1'':<ip2x') -> isIsEq (p1'' =/\= p1) &&
+                      case runWrappedCommuteFunction c (invert p1:< invert p2) of
+                      Succeeded (ip2':< ip1') ->
+                          case runWrappedCommuteFunction c (p2':< invert p1) of
+                          Succeeded (ip1o':< p2o) -> isJust ((do
+                              IsEq <- return $ invert ip1' =/\= p1'
+                              IsEq <- return $ invert ip2' =/\= p2'
+                              IsEq <- return $ ip1o' =/\= ip1'
+                              IsEq <- return $ p2o =\/= p2
+                              IsEq <- return $ p1'' =/\= p1
+                              IsEq <- return $ ip2x' =\/= ip2'
+                              return ()) :: Maybe ())
+                          _ -> False
+                      _ -> False
+                  _ -> False
+              _ -> False
+
+subcommutesFailure :: [(String, CommuteProperty)]
+subcommutesFailure = zip names (map prop cs)
+    where (names, cs) = unzip subcommutes
+          prop c (Sealed2 (p1 :> p2)) =
+              doesFail c p1 p2 ==>
+                case runWrappedCommuteFunction c (invert p1 :< invert p2) of
+                 Failed -> True
+                 _ -> False
+
+doesFail :: WrappedCommuteFunction -> Prim C(x y) -> Prim C(y z) -> Bool
+doesFail c p1 p2 =
+    fails (runWrappedCommuteFunction c (p2:<p1)) && checkAPatch (p1 :>: p2 :>: NilFL)
+        where fails Failed = True
+              fails _ = False
+
+does :: WrappedCommuteFunction -> Prim C(x y) -> Prim C(y z) -> Bool
+does c p1 p2 =
+    succeeds (runWrappedCommuteFunction c (p2:<p1)) && checkAPatch (p1 :>: p2 :>: NilFL)
+        where succeeds (Succeeded _) = True
+              succeeds _ = False
+
+nontrivial :: WrappedCommuteFunction -> Prim C(x y) -> Prim C(y z) -> Bool
+nontrivial c p1 p2 =
+    succeeds (runWrappedCommuteFunction c (p2:<p1)) && checkAPatch (p1 :>: p2 :>: NilFL)
+        where succeeds (Succeeded (p1' :< p2')) = not (p1' `unsafeCompare` p1 && p2' `unsafeCompare` p2)
+              succeeds _ = False
diff --git a/src/Darcs/Test/Patch/Properties2.hs b/src/Darcs/Test/Patch/Properties2.hs
deleted file mode 100644
--- a/src/Darcs/Test/Patch/Properties2.hs
+++ /dev/null
@@ -1,343 +0,0 @@
--- Copyright (C) 2002-2003,2007 David Roundy
---
--- This program is free software; you can redistribute it and/or modify
--- it under the terms of the GNU General Public License as published by
--- the Free Software Foundation; either version 2, or (at your option)
--- any later version.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with this program; see the file COPYING.  If not, write to
--- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
--- Boston, MA 02110-1301, USA.
-
-{-# LANGUAGE CPP #-}
-
-#include "gadts.h"
-
-module Darcs.Test.Patch.Properties2
-    ( patchPropertyTests
-    -- TODO: these are exported temporarily to mark them as used
-    -- Figure out whether to enable or remove the tests.
-    , propUnravelThreeMerge, propUnravelSeqMerge
-    , propUnravelOrderIndependent, propResolveConflictsValid
-    ) where
-
-import Prelude hiding ( pi )
-import Test.QuickCheck
-import Test.Framework.Providers.QuickCheck2 ( testProperty )
-import Test.Framework ( Test )
-import Data.Maybe ( isJust )
-
-import Darcs.Test.Patch.Test ( Check, checkAPatch )
-
-import Darcs.Patch ( invert, commute, merge,
-                     readPatch, resolveConflicts,
-                     fromPrim, showPatch )
-import Darcs.Patch.Commute ( Commute )
-import Darcs.Patch.Invert ( Invert, invertFL )
-import qualified Darcs.Patch.V1 as V1 ( Patch )
-import Darcs.Patch.V1.Commute ( unravel, merger )
-import Darcs.Patch.Prim.V1 ()
-import Darcs.Patch.Prim.V1.Core ( Prim(..) )
-import Darcs.Patch.Prim.V1.Commute ( WrappedCommuteFunction(..), Perhaps(..),
-                                     subcommutes )
-import Printer ( renderPS )
-import Darcs.Witnesses.Eq
-import Darcs.Witnesses.Ordered
-import Darcs.Witnesses.Sealed ( Sealed(Sealed), unsafeUnseal, unseal, mapSeal, Sealed2(..) )
-import Darcs.Witnesses.Unsafe
-
-#include "impossible.h"
-
-type Patch = V1.Patch Prim
-
-patchPropertyTests :: [Test]
-patchPropertyTests
- =
-        [
-         testProperty "Checking that show and read work right" (unseal propReadShow)
-        ]
-        ++ checkSubcommutes subcommutesInverse "patch and inverse both commute"
-        ++ checkSubcommutes subcommutesNontrivialInverse "nontrivial commutes are correct"
-        ++ checkSubcommutes subcommutesFailure "inverses fail"
-        ++
-        [testProperty "Checking that commuting by patch and its inverse is ok" propCommuteInverse,
-         --putStr "Checking that conflict resolution is valid... "
-         --runQuickCheckTest returnval propResolveConflictsValid
-         testProperty "Checking that a patch followed by its inverse is identity" propPatchAndInverseIsIdentity,
-         testProperty "Checking 'simple smart merge'" propSimpleSmartMergeGoodEnough,
-         testProperty "Checking that commutes are equivalent" propCommuteEquivalency,
-         testProperty "Checking that merges are valid" propMergeValid,
-         testProperty "Checking inverses being valid" propInverseValid,
-         testProperty "Checking other inverse being valid" propOtherInverseValid,
-         -- The patch generator isn't smart enough to generate correct test
-         -- cases for the following: (which will be obsoleted soon, anyhow)
-         --putStr "Checking the order dependence of unravel... "
-         --runQuickCheckTest returnval propUnravelOrderIndependent
-         --putStr "Checking the unravelling of three merges... "
-         --runQuickCheckTest returnval propUnravelThreeMerge
-         --putStr "Checking the unravelling of a merge of a sequence... "
-         --runQuickCheckTest returnval propUnravelSeqMerge
-         testProperty "Checking inverse of inverse" propInverseComposition,
-         testProperty "Checking the order of commutes" propCommuteEitherOrder,
-         testProperty "Checking commute either way" propCommuteEitherWay,
-         testProperty "Checking the double commute" propCommuteTwice,
-         testProperty "Checking that merges commute and are well behaved" propMergeIsCommutableAndCorrect,
-         testProperty "Checking that merges can be swapped" propMergeIsSwapable,
-         testProperty "Checking again that merges can be swapped (I'm paranoid) " propMergeIsSwapable]
-
--- | Groups a set of tests by giving them the same prefix in their description.
---   When this is called as @checkSubcommutes subcoms expl@, the prefix for a
---   test becomes @"Checking " ++ expl ++ " for subcommute "@.
-checkSubcommutes :: Testable a => [(String, a)] -> String
-                                                 -> [Test]
-checkSubcommutes subcoms expl = map check_subcommute subcoms
-  where check_subcommute (name, test) =
-            let testName = expl ++ " for subcommute " ++ name
-            in testProperty testName test
-
-propInverseComposition :: Sealed2 (FL Patch :> FL Patch) -> Bool
-propInverseComposition (Sealed2 (p1 :> p2)) =
-    isIsEq $ eqFL (reverseRL (invertFL (p1:>:p2:>:NilFL))) (invert p2:>:invert p1:>:NilFL)
-
-propInverseValid :: Sealed2 (FL Patch) -> Bool
-propInverseValid (Sealed2 p1) = checkAPatch (invert p1:>:p1:>:NilFL)
-propOtherInverseValid :: Sealed2 (FL Patch) -> Bool
-propOtherInverseValid (Sealed2 p1) = checkAPatch (p1:>:invert p1:>:NilFL)
-
-propCommuteTwice :: Sealed2 (FL Patch :> FL Patch) -> Property
-propCommuteTwice (Sealed2 (p1:>p2)) =
-    (doesCommute p1 p2) ==> (Just (p1:>p2) == (commute (p1:>p2) >>= commute))
-doesCommute :: (MyEq p, Invert p, Commute p, Check p) => p C(x y) -> p C(y z) -> Bool
-doesCommute p1 p2 =
-    commute (p1:>p2) /= Nothing && checkAPatch (p1:>:p2:>:NilFL)
-propCommuteEquivalency :: Sealed2 (FL Patch :> FL Patch) -> Property
-propCommuteEquivalency (Sealed2 (p1:>p2)) =
-    (doesCommute p1 p2) ==>
-    case commute (p1:>p2) of
-    Just (p2':>p1') -> checkAPatch (p1:>:p2:>:invert p1':>:invert p2':>:NilFL)
-    _ -> impossible
-
-propCommuteEitherWay :: Sealed2 (FL Patch :> FL Patch) -> Property
-propCommuteEitherWay (Sealed2 (p1:>p2)) =
-    doesCommute p1 p2 ==> doesCommute (invert p2) (invert p1)
-
-propCommuteEitherOrder :: Sealed2 (FL Patch :> FL Patch :> FL Patch) -> Property
-propCommuteEitherOrder (Sealed2 (p1:>p2:>p3)) =
-    checkAPatch (p1:>:p2:>:p3:>:NilFL) &&
-    doesCommute p1 (p2+>+p3) &&
-    doesCommute p2 p3 ==>
-    case commute (p1:>p2) of
-    Nothing -> False
-    Just (p2':>p1') ->
-        case commute (p1':>p3) of
-        Nothing -> False
-        Just (p3':>_) ->
-            case commute (p2':>p3') of
-            Nothing -> False
-            Just (p3'' :> _) ->
-                case commute (p2:>p3) of
-                Nothing -> False
-                Just (p3'a:>_) ->
-                    case commute (p1:>p3'a) of
-                    Just (p3''a:>_) -> isIsEq (p3''a =\/= p3'')
-                    Nothing -> False
-
-propPatchAndInverseIsIdentity :: Sealed2 (FL Patch :> FL Patch) -> Property
-propPatchAndInverseIsIdentity (Sealed2 (p1:>p2)) =
-    checkAPatch (p1:>:p2:>:NilFL) && (commute (p1:>p2) /= Nothing) ==>
-    case commute (p1:>p2) of
-    Just (p2':>_) -> case commute (invert p1:>p2') of
-                    Nothing -> True -- This is a subtle distinction.
-                    Just (p2'':>_) -> isIsEq (p2'' =\/= p2)
-    Nothing -> impossible
-
-propMergeIsCommutableAndCorrect :: Sealed2 (FL Patch :\/: FL Patch) -> Property
-propMergeIsCommutableAndCorrect (Sealed2 (p1:\/:p2)) =
-    checkAPatch (invert p1:>:p2:>:NilFL) ==>
-    case merge (p2:\/:p1) of
-    p1' :/\: p2' ->
-        case commute (p1:>p2') of
-        Nothing -> False
-        Just (p2'':>p1'') -> isIsEq (p2'' =\/= p2) && isIsEq (p1' =/\= p1'')
-propMergeIsSwapable :: Sealed2 (FL Patch :\/: FL Patch) -> Property
-propMergeIsSwapable (Sealed2 (p1:\/:p2)) =
-    checkAPatch (invert p1:>:p2:>:NilFL) ==>
-    case merge (p2:\/:p1) of
-    p1' :/\: p2' ->
-           case merge (p1:\/:p2) of
-           p2''' :/\: p1''' -> isIsEq (p1' =\/= p1''') && isIsEq (p2' =\/= p2''')
-
-propMergeValid :: Sealed2 (FL Patch :\/: FL Patch) -> Property
-propMergeValid (Sealed2 (p1:\/:p2)) =
-    checkAPatch (invert p1:>:p2:>:NilFL) ==>
-    case merge (p2:\/:p1) of
-    _ :/\: p2' ->
-        checkAPatch (invert p1:>:p2:>:invert p2:>:p1:>:p2':>:NilFL)
-
-propSimpleSmartMergeGoodEnough :: Sealed2 (FL Patch :\/: FL Patch) -> Property
-propSimpleSmartMergeGoodEnough (Sealed2 (p1:\/:p2)) =
-    checkAPatch (invert p1:>:p2:>:NilFL) ==>
-    case simpleSmartMerge (p1 :\/: p2) of
-      Nothing -> True
-      Just (Sealed p1'a)
-       -> isJust ((do
-                    p1o :> _ <- commute (p2 :> p1'a)
-                    IsEq <- return $ p1o =\/= p1
-                    Sealed p2'a <- simpleSmartMerge (p2 :\/: p1)
-                    p2b :> p1'b <- commute (p1 :> p2'a)
-                    IsEq <- return $ p2 =\/= p2b
-                    IsEq <- return $ p1'a =\/= p1'b
-                    return ()) :: Maybe ())
-
-simpleSmartMerge :: (Commute p, Invert p) => (p :\/: p) C(x y) -> Maybe (Sealed (p C(y)))
-simpleSmartMerge (p1 :\/: p2) =
-  case commute (invert p2 :> p1) of
-  Just (p1':>_) -> Just (Sealed p1')
-  Nothing -> Nothing
-
--- | The conflict resolution code (glump) begins by "unravelling" the merger
--- into a set of sequences of patches.  Each sequence of patches corresponds
--- to one non-conflicted patch that got merged together with the others.  The
--- result of the unravelling of a series of merges must obviously be
--- independent of the order in which those merges are performed.  This
--- unravelling code (which uses the unwind code mentioned above) uses probably
--- the second most complicated algorithm.  Fortunately, if we can successfully
--- unravel the merger, almost any function of the unravelled merger satisfies
--- the two constraints mentioned above that the conflict resolution code must
--- satisfy.
-propUnravelThreeMerge :: Patch C(x y) -> Patch C(x z) -> Patch C(x w) -> Property
-propUnravelThreeMerge p1 p2 p3 =
-    checkAPatch (invert p1:>:p2:>:invert p2:>:p3:>:NilFL) ==>
-    (unravel $ unsafeUnseal $ merger "0.0" (unsafeUnseal (merger "0.0" p2 p3)) (unsafeUnseal (merger "0.0" p2 p1))) ==
-    (unravel $ unsafeUnseal $ merger "0.0" (unsafeUnseal (merger "0.0" p1 p3)) (unsafeUnseal (merger "0.0" p1 p2)))
-
-propUnravelSeqMerge :: Patch C(x y) -> Patch C(x z) -> Patch C(z w) -> Property
-propUnravelSeqMerge p1 p2 p3 =
-    checkAPatch (invert p1:>:p2:>:p3:>:NilFL) ==>
-    (unravel $ unsafeUnseal $ merger "0.0" p3 $ unsafeUnseal $ merger "0.0" p2 p1) ==
-    (unravel $ unsafeUnseal $ merger "0.0" (unsafeUnseal $ merger "0.0" p2 p1) p3)
-
-propUnravelOrderIndependent :: Patch C(x y) -> Patch C(x z) -> Property
-propUnravelOrderIndependent p1 p2 =
-    checkAPatch (invert p1:>:p2:>:NilFL) ==>
-    (unravel $ unsafeCoercePStart $ unsafeUnseal $ merger "0.0" p2 p1) == (unravel $ unsafeUnseal $ merger "0.0" p1 p2)
-
-propResolveConflictsValid :: Patch C(x y) -> Patch C(x z) -> Property
-propResolveConflictsValid p1 p2 =
- case merge (p1:\/:p2) of
- _ :/\: p1' ->
-   let p = p2:>:p1':>:NilFL in
-    checkAPatch (invert p1:>:p2:>:NilFL) ==>
-    and $ map (\l -> (\ml -> checkAPatch (p+>+ml)) `unseal` mergeList l)
-            $ resolveConflicts p
-
-mergeList :: [Sealed (FL Prim C(x))] -> Sealed (FL Patch C(x))
-mergeList patches = mapFL_FL fromPrim `mapSeal` doml NilFL patches
-    where doml :: FL Prim C(x y) -> [Sealed (FL Prim C(x))] -> Sealed (FL Prim C(x))
-          doml mp (Sealed p:ps) =
-              case commute (invert p :> mp) of
-              Just (mp' :> _) -> doml (p +>+ mp') ps
-              Nothing -> doml mp ps -- This shouldn't happen for "good" resolutions.
-          doml mp [] = Sealed mp
-
-propReadShow :: FL Patch C(x y) -> Bool
-propReadShow p = case readPatch $ renderPS $ showPatch p of
-                   Just (Sealed p') -> isIsEq (p' =\/= p)
-                   Nothing -> False
-
--- |In order for merges to work right with commuted patches, inverting a patch
--- past a patch and its inverse had golly well better give you the same patch
--- back again.
-propCommuteInverse :: Sealed2 (FL Patch :> FL Patch) -> Property
-propCommuteInverse (Sealed2 (p1 :> p2)) =
-    doesCommute p1 p2 ==> case commute (p1 :> p2) of
-                           Nothing -> impossible
-                           Just (_ :> p1') ->
-                               case commute (p1' :> invert p2) of
-                               Nothing -> False
-                               Just (_ :> p1'') -> isIsEq (p1'' =/\= p1)
-
-type CommuteProperty = Sealed2 (Prim :> Prim) -> Property
-
-subcommutesInverse :: [(String, CommuteProperty)]
-subcommutesInverse = zip names (map prop_subcommute cs)
-    where (names, cs) = unzip subcommutes
-          prop_subcommute c (Sealed2 (p1:>p2)) =
-              does c p1 p2 ==>
-              case runWrappedCommuteFunction c (p2:< p1) of
-              Succeeded (p1':<p2') ->
-                  case runWrappedCommuteFunction c (invert p2:< p1') of
-                  Succeeded (p1'':<ip2x') -> isIsEq (p1'' =/\= p1) &&
-                      case runWrappedCommuteFunction c (invert p1:< invert p2) of
-                      Succeeded (ip2':< ip1') ->
-                          case runWrappedCommuteFunction c (p2':< invert p1) of
-                          Succeeded (ip1o':< p2o) -> isJust ((do
-                                 IsEq <- return $ invert ip1' =/\= p1'
-                                 IsEq <- return $ invert ip2' =/\= p2'
-                                 IsEq <- return $ ip1o' =/\= ip1'
-                                 IsEq <- return $ p2o =\/= p2
-                                 IsEq <- return $ p1'' =/\= p1
-                                 IsEq <- return $ ip2x' =\/= ip2'
-                                 return ()) :: Maybe ())
-                          _ -> False
-                      _ -> False
-                  _ -> False
-              _ -> False
-
-subcommutesNontrivialInverse :: [(String, CommuteProperty)]
-subcommutesNontrivialInverse = zip names (map prop_subcommute cs)
-    where (names, cs) = unzip subcommutes
-          prop_subcommute c (Sealed2 (p1 :> p2)) =
-              nontrivial c p1 p2 ==>
-              case runWrappedCommuteFunction c (p2:< p1) of
-              Succeeded (p1':<p2') ->
-                  case runWrappedCommuteFunction c (invert p2:< p1') of
-                  Succeeded (p1'':<ip2x') -> isIsEq (p1'' =/\= p1) &&
-                      case runWrappedCommuteFunction c (invert p1:< invert p2) of
-                      Succeeded (ip2':< ip1') ->
-                          case runWrappedCommuteFunction c (p2':< invert p1) of
-                          Succeeded (ip1o':< p2o) -> isJust ((do
-                              IsEq <- return $ invert ip1' =/\= p1'
-                              IsEq <- return $ invert ip2' =/\= p2'
-                              IsEq <- return $ ip1o' =/\= ip1'
-                              IsEq <- return $ p2o =\/= p2
-                              IsEq <- return $ p1'' =/\= p1
-                              IsEq <- return $ ip2x' =\/= ip2'
-                              return ()) :: Maybe ())
-                          _ -> False
-                      _ -> False
-                  _ -> False
-              _ -> False
-
-subcommutesFailure :: [(String, CommuteProperty)]
-subcommutesFailure = zip names (map prop cs)
-    where (names, cs) = unzip subcommutes
-          prop c (Sealed2 (p1 :> p2)) =
-              doesFail c p1 p2 ==>
-                case runWrappedCommuteFunction c (invert p1 :< invert p2) of
-                 Failed -> True
-                 _ -> False
-
-doesFail :: WrappedCommuteFunction -> Prim C(x y) -> Prim C(y z) -> Bool
-doesFail c p1 p2 =
-    fails (runWrappedCommuteFunction c (p2:<p1)) && checkAPatch (p1 :>: p2 :>: NilFL)
-        where fails Failed = True
-              fails _ = False
-
-does :: WrappedCommuteFunction -> Prim C(x y) -> Prim C(y z) -> Bool
-does c p1 p2 =
-    succeeds (runWrappedCommuteFunction c (p2:<p1)) && checkAPatch (p1 :>: p2 :>: NilFL)
-        where succeeds (Succeeded _) = True
-              succeeds _ = False
-
-nontrivial :: WrappedCommuteFunction -> Prim C(x y) -> Prim C(y z) -> Bool
-nontrivial c p1 p2 =
-    succeeds (runWrappedCommuteFunction c (p2:<p1)) && checkAPatch (p1 :>: p2 :>: NilFL)
-        where succeeds (Succeeded (p1' :< p2')) = not (p1' `unsafeCompare` p1 && p2' `unsafeCompare` p2)
-              succeeds _ = False
diff --git a/src/Darcs/Test/Patch/QuickCheck.hs b/src/Darcs/Test/Patch/QuickCheck.hs
deleted file mode 100644
--- a/src/Darcs/Test/Patch/QuickCheck.hs
+++ /dev/null
@@ -1,296 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-deprecations -fno-warn-orphans #-}
-{-# LANGUAGE CPP, UndecidableInstances, ScopedTypeVariables, MultiParamTypeClasses,
-             FlexibleInstances, ViewPatterns #-}
-
-#include "gadts.h"
-module Darcs.Test.Patch.QuickCheck ( Tree(..), TreeWithFlattenPos(..),
-                                     propConsistentTreeFlattenings, propFail,
-                                     propIsMergeable,
-                                     flattenOne,
-                                     commutePairFromTree, mergePairFromTree,
-                                     commuteTripleFromTree, mergePairFromCommutePair,
-                                     commutePairFromTWFP, mergePairFromTWFP, getPairs, getTriples,
-                                     patchFromTree,
-                                     canonizeTree,
-                                     quickCheck
-                                   ) where
-
-import Control.Monad ( liftM )
-import Test.QuickCheck
-import Darcs.Test.Patch.RepoModel ( RepoModel, applyPatch, aSmallRepo )
-import Darcs.Test.Patch.WithState
-import Darcs.Test.Patch.Prim.V1 ()
-import Darcs.Test.Util.QuickCheck ( bSized )
-import Darcs.Witnesses.Sealed
-import Darcs.Witnesses.Eq
-import Darcs.Witnesses.Unsafe
-import Darcs.Witnesses.Ordered
-import Darcs.Patch.Merge ( Merge(..) )
-import Darcs.Patch.Patchy ( Invert(..), Commute(..) )
-import Darcs.Patch.Prim ( PrimOf, PrimPatch, PrimPatchBase, FromPrim(..), move )
-import Darcs.Patch.Prim.V1 ()
-import Darcs.Patch.Prim.V1.Core ( Prim(..), FilePatchType(..), isIdentity )
-import Darcs.Patch.V2 ( RealPatch, prim2real )
-#ifdef GADT_WITNESSES
-import Darcs.Patch.Set ( Origin )
-#endif
---import Darcs.ColorPrinter ( errorDoc )
---import Darcs.ColorPrinter ( traceDoc )
-import Darcs.Witnesses.Show
---import Printer ( greenText, ($$) )
-
-#include "impossible.h"
-
-
--- | Generate a patch to a certain state.
-class ArbitraryStateIn s p where
-  arbitraryStateIn :: s C(x) -> Gen (p C(x))
-
-
-instance Arbitrary (Sealed2 (FL (WithState RepoModel Prim))) where
-  arbitrary = do repo <- aSmallRepo
-                 liftM (unseal (seal2 . wesPatch)) $ arbitraryState repo
-
-propConsistentTreeFlattenings :: Sealed (WithStartState RepoModel (Tree Prim)) -> Bool
-propConsistentTreeFlattenings (Sealed (WithStartState start t))
-  = fromJust $
-    do Sealed (G2 flat) <- return $ flattenTree $ mapTree prim2real t
-       rms <- return $ map (`applyPatch` start) flat
-       return $ and $ zipWith assertEqualFst (zip rms flat) (tail $ zip rms flat)
-
-assertEqualFst :: (Eq a, Show a, Show b, Show c) => (a, b) -> (a, c) -> Bool
-assertEqualFst (x,bx) (y,by)
-    | x == y = True
-    | otherwise = error ("Not really equal:\n" ++ show x ++ "\nand\n" ++ show y
-                         ++ "\ncoming from\n" ++ show bx ++ "\nand\n" ++ show by)
-
-
--- WithState and propFail are handy for debugging arbitrary code
-propFail :: Int -> Tree Prim C(x) -> Bool
-propFail n xs = sizeTree xs < n
-
-
-data Tree p C(x) where
-   NilTree :: Tree p C(x)
-   SeqTree :: p C(x y) -> Tree p C(y) -> Tree p C(x)
-   ParTree :: Tree p C(x) -> Tree p C(x) -> Tree p C(x)
-
-mapTree :: (FORALL(y z) p C(y z) -> q C(y z)) -> Tree p C(x) -> Tree q C(x)
-mapTree _ NilTree = NilTree
-mapTree f (SeqTree p t) = SeqTree (f p) (mapTree f t)
-mapTree f (ParTree t1 t2) = ParTree (mapTree f t1) (mapTree f t2)
-
-instance Show2 p => Show (Tree p C(x)) where
-   showsPrec _ NilTree = showString "NilTree"
-   showsPrec d (SeqTree a t) = showParen (d > appPrec) $ showString "SeqTree " .
-                               showsPrec2 (appPrec + 1) a . showString " " .
-                               showsPrec (appPrec + 1) t
-   showsPrec d (ParTree t1 t2) = showParen (d > appPrec) $ showString "ParTree " .
-                                 showsPrec (appPrec + 1) t1 . showString " " .
-                                 showsPrec (appPrec + 1) t2
-
-instance Show2 p => Show1 (Tree p) where
-    showDict1 = ShowDictClass
-
-sizeTree :: Tree p C(x) -> Int
-sizeTree NilTree = 0
-sizeTree (SeqTree _ t) = 1 + sizeTree t
-sizeTree (ParTree t1 t2) = 1 + sizeTree t1 + sizeTree t2
-
--- newtype G1 l p C(x) = G1 { _unG1 :: l (p C(x)) }
-newtype G2 l p C(x y) = G2 { unG2 :: l (p C(x y)) }
-
-flattenTree :: (Merge p) => Tree p C(z) -> Sealed (G2 [] (FL p) C(z))
-flattenTree NilTree = seal $ G2 $ return NilFL
-flattenTree (SeqTree p t) = mapSeal (G2 . map (p :>:) . unG2) $ flattenTree t
-flattenTree (ParTree (flattenTree -> Sealed gpss1) (flattenTree -> Sealed gpss2))
-                            = seal $ G2 $
-                              do ps1 <- unG2 gpss1
-                                 ps2 <- unG2 gpss2
-                                 ps2' :/\: ps1' <- return $ merge (ps1 :\/: ps2)
-                                 -- We can't prove that the existential type in the result
-                                 -- of merge will be the same for each pair of
-                                 -- ps1 and ps2.
-                                 map unsafeCoerceP [ps1 +>+ ps2', ps2 +>+ ps1']
-
-instance ArbitraryState s p => ArbitraryStateIn s (Tree p) where
-  -- Don't generate trees deeper than 6 with default QuickCheck size (0..99).
-  -- Note if we don't put a non-zero lower bound the first generated trees will always have depth 0.
-  arbitraryStateIn rm = bSized 3 0.035 9 $ \depth -> arbitraryTree rm depth
-
--- | Generate a tree of patches, bounded by the depth @maxDepth@.
-arbitraryTree :: ArbitraryState s p => s C(x) -> Int -> Gen (Tree p C(x))
-arbitraryTree rm depth
-    | depth == 0 = return NilTree
-                      -- Note a probability of N for NilTree would imply ~(100*N)% of empty trees.
-                      -- For the purpose of this module empty trees are useless, but even when
-                      -- NilTree case is omitted there is still a small percentage of empty trees
-                      -- due to the generation of null-patches (empty-hunks) and the use of canonizeTree.
-    | otherwise  = frequency [(1, do Sealed (WithEndState p rm') <- arbitraryState rm
-                                     t <- arbitraryTree rm' (depth - 1)
-                                     return (SeqTree p t))
-                             ,(3, do t1 <- arbitraryTree rm (depth - 1)
-                                     t2 <- arbitraryTree rm (depth - 1)
-                                     return (ParTree t1 t2))]
-
-
-class NullPatch p where
-  nullPatch :: p C(x y) -> EqCheck C(x y)
-
-class (ArbitraryState RepoModel prim, NullPatch prim, PrimPatch prim) => ArbitraryPrim prim
-instance ArbitraryPrim Prim
-
--- a hack introduced after Identity was removed from Prim
--- WARNING: localIdentity does not commute with itself!
-localIdentity :: PrimPatch prim => prim C(x x)
-localIdentity = let fp = "./dummy" in move fp fp
-
-
-instance NullPatch Prim where
-  nullPatch (FP _ fp) = nullPatch fp
-  nullPatch p | IsEq <- isIdentity p = IsEq
-  nullPatch _ = NotEq
-
-instance NullPatch FilePatchType where
-  nullPatch (Hunk _ [] []) = unsafeCoerceP IsEq -- is this safe?
-  nullPatch _ = NotEq
-
--- canonize a tree, removing any dead branches
-canonizeTree :: NullPatch p => Tree p C(x) -> Tree p C(x)
-canonizeTree NilTree = NilTree
-canonizeTree (ParTree t1 t2)
-    | NilTree <- canonizeTree t1 = canonizeTree t2
-    | NilTree <- canonizeTree t2 = canonizeTree t1
-    | otherwise = ParTree (canonizeTree t1) (canonizeTree t2)
-canonizeTree (SeqTree p t) | IsEq <- nullPatch p = canonizeTree t
-                           | otherwise = SeqTree p (canonizeTree t)
-
-
-instance ArbitraryPrim prim => Arbitrary (Sealed (WithStartState RepoModel (Tree prim))) where
-  arbitrary = do repo <- aSmallRepo
-                 Sealed (WithStartState rm tree) <-
-                     liftM (seal . WithStartState repo) (arbitraryStateIn repo)
-                 return $ Sealed $ WithStartState rm (canonizeTree tree)
-
-propIsMergeable :: forall p C(x) . (FromPrim p, Merge p)
-                  => Sealed (WithStartState RepoModel (Tree (PrimOf p)))
-                  -> Maybe (Tree p C(x))
-propIsMergeable (Sealed (WithStartState _ t))
-   = case flattenOne t of
-        Sealed ps -> let _ = seal2 ps :: Sealed2 (FL p)
-                     in case lengthFL ps of
-                       _ -> Nothing
-
-flattenOne :: (FromPrim p, Merge p) => Tree (PrimOf p) C(x) -> Sealed (FL p C(x))
-flattenOne NilTree = seal NilFL
-flattenOne (SeqTree p (flattenOne -> Sealed ps)) = seal (fromPrim p :>: ps)
-flattenOne (ParTree (flattenOne -> Sealed ps1) (flattenOne -> Sealed ps2)) =
-    --traceDoc (greenText "flattening two parallel series: ps1" $$ showPatch ps1 $$
-    --          greenText "ps2" $$ showPatch ps2) $
-    case merge (ps1 :\/: ps2) of
-      ps2' :/\: _ -> seal (ps1 +>+ ps2')
-
-instance ArbitraryPrim prim => Arbitrary (Sealed2 (FL (RealPatch prim))) where
-    arbitrary = do Sealed (WithStartState _ tree) <- arbitrary :: Gen (Sealed (WithStartState RepoModel (Tree prim)))
-                   return $ unseal seal2 (flattenOne tree)
-
-instance ArbitraryPrim prim => Arbitrary (Sealed2 (RealPatch prim)) where
-    arbitrary = do Sealed (WithStartState _ tree) <- arbitrary :: Gen (Sealed (WithStartState RepoModel (Tree prim)))
-                   case mapFL seal2 `unseal` flattenOne tree of
-                     [] -> return $ seal2 $ fromPrim localIdentity
-                     ps -> elements ps
-
-data TreeWithFlattenPos p C(x) = TWFP Int (Tree p C(x))
-
-commutePairFromTWFP :: (FromPrim p, Merge p, PrimPatchBase p)
-                    => (FORALL (y z) (p :> p) C(y z) -> t)
-                    -> (WithStartState RepoModel (TreeWithFlattenPos (PrimOf p)) C(x) -> t)
-commutePairFromTWFP handlePair (WithStartState _ (TWFP n t))
-    = unseal2 handlePair $
-      let xs = unseal getPairs (flattenOne t)
-      in if length xs > n && n >= 0 then xs!!n else seal2 (fromPrim localIdentity :> fromPrim localIdentity)
-
-commutePairFromTree :: (FromPrim p, Merge p, PrimPatchBase p)
-                    => (FORALL (y z) (p :> p) C(y z) -> t)
-                    -> (WithStartState RepoModel (Tree (PrimOf p)) C(x) -> t)
-commutePairFromTree handlePair (WithStartState _ t)
-   = unseal2 handlePair $
-     case flattenOne t of
-       Sealed ps ->
-         let xs = --traceDoc (greenText "I'm flattening one to get:" $$ showPatch ps) $
-                 getPairs ps
-         in if null xs then seal2 (fromPrim localIdentity :> fromPrim localIdentity) else last xs
-
-commuteTripleFromTree :: (FromPrim p, Merge p, PrimPatchBase p)
-                      => (FORALL (y z) (p :> p :> p) C(y z) -> t)
-                      -> (WithStartState RepoModel (Tree (PrimOf p)) C(x) -> t)
-commuteTripleFromTree handle (WithStartState _ t)
-   = unseal2 handle $
-     case flattenOne t of
-       Sealed ps ->
-         let xs = --traceDoc (greenText "I'm flattening one to get:" $$ showPatch ps) $
-                  getTriples ps
-         in if null xs
-            then seal2 (fromPrim localIdentity :> fromPrim localIdentity :> fromPrim localIdentity)
-            else last xs
-
-mergePairFromCommutePair :: (Commute p, Invert p)
-                         => (FORALL (y z) (p :\/: p) C(y z) -> t)
-                         -> (FORALL (y z) (p :>   p) C(y z) -> t)
-mergePairFromCommutePair handlePair (a :> b)
- = case commute (a :> b) of
-     Just (b' :> _) -> handlePair (a :\/: b')
-     Nothing -> handlePair (b :\/: b)
-
--- impredicativity problems mean we can't use (.) in the definitions below
-
-mergePairFromTWFP :: (FromPrim p, Merge p, Invert p, PrimPatchBase p)
-                  => (FORALL (y z) (p :\/: p) C(y z) -> t)
-                  -> (WithStartState RepoModel (TreeWithFlattenPos (PrimOf p)) C(x) -> t)
-mergePairFromTWFP x = commutePairFromTWFP (mergePairFromCommutePair x)
-
-mergePairFromTree :: (FromPrim p, Merge p, Invert p, PrimPatchBase p)
-                  => (FORALL (y z) (p :\/: p) C(y z) -> t)
-                  -> (WithStartState RepoModel (Tree (PrimOf p)) C(x) -> t)
-mergePairFromTree x = commutePairFromTree (mergePairFromCommutePair x)
-
-patchFromCommutePair :: (Commute p, Invert p)
-                     => (FORALL (y z) p C(y z) -> t)
-                     -> (FORALL (y z) (p :> p) C(y z) -> t)
-patchFromCommutePair handle (_ :> b) = handle b
-
-patchFromTree :: (FromPrim p, Merge p, Invert p, PrimPatchBase p)
-              => (FORALL (y z) p C(y z) -> t)
-              -> (WithStartState RepoModel (Tree (PrimOf p)) C(x) -> t)
-patchFromTree x = commutePairFromTree (patchFromCommutePair x)
-
-
-instance Show2 p => Show (TreeWithFlattenPos p C(x)) where
-   showsPrec d (TWFP n t) = showParen (d > appPrec) $ showString "TWFP " .
-                            showsPrec (appPrec + 1) n . showString " " .
-                            showsPrec1 (appPrec + 1) t
-
-instance Show1 (TreeWithFlattenPos Prim) where
-   showDict1 = ShowDictClass
-
-instance Arbitrary (Sealed (WithStartState RepoModel (TreeWithFlattenPos Prim))) where
-   arbitrary = do Sealed (WithStartState rm t) <- arbitrary
-                  let num = unseal (length . getPairs) (flattenOneRP t)
-                  if num == 0 then return $ Sealed $ WithStartState rm $ TWFP 0 NilTree
-                    else do n <- choose (0, num - 1)
-                            return $ Sealed $ WithStartState rm $ TWFP n t
-                    where -- just used to get the length. In principle this should be independent of the patch type.
-                          flattenOneRP :: Tree Prim C(x) -> Sealed (FL (RealPatch Prim) C(x))
-                          flattenOneRP = flattenOne
-
-
-getPairs :: FL p C(x y) -> [Sealed2 (p :> p)]
-getPairs NilFL = []
-getPairs (_:>:NilFL) = []
-getPairs (a:>:b:>:c) = seal2 (a:>b) : getPairs (b:>:c)
-
-getTriples :: FL p C(x y) -> [Sealed2 (p :> p :> p)]
-getTriples NilFL = []
-getTriples (_:>:NilFL) = []
-getTriples (_:>:_:>:NilFL) = []
-getTriples (a:>:b:>:c:>:d) = seal2 (a:>b:>c) : getTriples (b:>:c:>:d)
diff --git a/src/Darcs/Test/Patch/RepoModel.hs b/src/Darcs/Test/Patch/RepoModel.hs
--- a/src/Darcs/Test/Patch/RepoModel.hs
+++ b/src/Darcs/Test/Patch/RepoModel.hs
@@ -1,291 +1,21 @@
-{-# LANGUAGE CPP #-}
-
-#include "gadts.h"
-
--- | Repository model
-module Darcs.Test.Patch.RepoModel
-  ( module Storage.Hashed.AnchoredPath
-  , RepoModel, repoTree
-  , RepoItem, File, Dir, Content
-  , makeRepo, emptyRepo
-  , makeFile, emptyFile
-  , emptyDir
-  , nullRepo
-  , isFile, isDir
-  , fileContent, dirContent
-  , isEmpty
-  , root
-  , filterFiles, filterDirs
-  , find
-  , list
-  , ap2fp
-  , applyPatch
-  , aFilename, aDirname
-  , aLine, aContent
-  , aFile, aDir
-  , aRepo, aSmallRepo
-  ) where
-
-
-import Darcs.Test.Util.QuickCheck ( alpha, uniques, bSized )
-
-import Darcs.Patch.Apply( Apply(..), applyToTree )
-import Darcs.Witnesses.Sealed ( Sealed, seal )
-import Darcs.Witnesses.Show
-
-import Storage.Hashed.AnchoredPath
-import Storage.Hashed.Tree( Tree, TreeItem )
-import Storage.Hashed.Darcs ( darcsUpdateHashes )
-import qualified Storage.Hashed.Tree as T
-
-import Control.Applicative ( (<$>) )
-import Control.Arrow ( second )
-import qualified Data.ByteString as B
-import qualified Data.ByteString.Char8 as BC
-import qualified Data.ByteString.Lazy as BL
-import qualified Data.ByteString.Lazy.Char8 as BLC
-import Data.List ( intercalate )
-import qualified Data.Map as M
-import Data.Maybe ( fromJust )
-import Test.QuickCheck
-  ( Arbitrary(..)
-  , Gen, choose, vectorOf, frequency )
-
-
-
-----------------------------------------------------------------------
--- * Model definition
-
--- | A repository is an abstraction build in top of a 'Tree'.
--- NB: Repository preferences are not supported yet.
-newtype RepoModel C(x) = RepoModel {
-                           repoTree :: Tree Maybe
-                         }
-
--- | Repository items may be text files or directories.
--- NB: Binary files are not supported yet.
-newtype RepoItem = RepoItem {
-                      treeItem :: TreeItem Maybe
-                   }
-
-type File = RepoItem
-type Dir  = RepoItem
-
-type Content = [B.ByteString]
-
-----------------------------------------
--- Instances
-
-instance Show (RepoModel C(x)) where
-  show repo = "RepoModel{ " 
-            ++ intercalate " " (map showEntry $ list repo)
-            ++ " }"
-    where
-        showPath = show . flatten
-        showContent content = "[" ++ intercalate " " (map show content) ++ "]"
-        showEntry (path,item)
-          | isDir item  = showPath path
-          | isFile item = showPath path ++ showContent (fileContent item)
-
-instance Show1 RepoModel where
-  showDict1 = ShowDictClass
-
-----------------------------------------
--- Utils
-
-bs2lbs :: B.ByteString -> BL.ByteString
-bs2lbs bs = BL.fromChunks [bs]
-
-lbs2bs :: BL.ByteString -> B.ByteString
-lbs2bs = B.concat . BL.toChunks
-
-content2lbs :: Content -> BL.ByteString
-content2lbs = BLC.unlines . map bs2lbs
-
-lbs2content :: BL.ByteString -> Content
-lbs2content = map lbs2bs . BLC.lines
-
-----------------------------------------------------------------------
--- ** Path conversion
-
-ap2fp :: AnchoredPath -> FilePath
-ap2fp = anchorPath ""
-
-----------------------------------------------------------------------
--- * Constructors
-
-makeRepo :: [(Name, RepoItem)] -> RepoModel C(x)
-makeRepo = RepoModel . T.makeTree . map (second treeItem)
-
-emptyRepo :: RepoModel C(x)
-emptyRepo = RepoModel T.emptyTree
-
-makeFile :: Content -> File
-makeFile = RepoItem . T.File . T.makeBlob . content2lbs
-
-emptyFile :: File
-emptyFile = RepoItem $ T.File T.emptyBlob
-
-emptyDir :: Dir
-emptyDir = RepoItem $ T.SubTree T.emptyTree
-
-----------------------------------------------------------------------
--- * Queries
-
-nullRepo :: RepoModel C(x) -> Bool
-nullRepo = M.null . T.items . repoTree
-
-isFile :: RepoItem -> Bool
-isFile (RepoItem (T.File _)) = True
-isFile _other                = False
-
-isDir :: RepoItem -> Bool
-isDir (RepoItem (T.SubTree _)) = True
-isDir _other                   = False
-
-fileContent :: File -> Content
-fileContent (RepoItem (T.File blob)) 
-  = case T.readBlob blob of
-         Nothing -> error "fileContent: No content."
-         Just c  -> lbs2content c
-fileContent _other
-  = error "fileContent: Not a file."
-
-dirContent :: Dir -> [(Name, RepoItem)]
-dirContent (RepoItem (T.SubTree subtree)) 
-  = map (second RepoItem) $ M.toList $ T.items subtree
-dirContent _other
-  = error "dirContent: Not a directory."
-
--- | @isEmpty file@ <=> file content is empty
---   @isEmpty dir@  <=> dir has no child
-isEmpty :: RepoItem -> Bool
-isEmpty item
-  | isFile item = null $ fileContent item
-  | isDir item  = null $ dirContent item
-  | otherwise   = undefined
-
--- | The root directory of a repository.
-root :: RepoModel C(x) -> Dir
-root = RepoItem . T.SubTree . repoTree
-
-find :: RepoModel C(x) -> AnchoredPath -> Maybe RepoItem
-find (RepoModel tree) path = RepoItem <$> T.find tree path
-
--- | List repository items.
--- NB: It does not include the root directory.
-list :: RepoModel C(x) -> [(AnchoredPath, RepoItem)]
-list (RepoModel tree) = map (second RepoItem) $ T.list tree
-
-----------------------------------------------------------------------
--- ** Filtering
-
-filterFiles :: [(n, RepoItem)] -> [(n, File)]
-filterFiles = filter (isFile . snd)
-
-filterDirs :: [(n, RepoItem)] -> [(n, Dir)]
-filterDirs = filter (isDir . snd)
-
-----------------------------------------------------------------------
--- * Comparing repositories
-
-diffRepos :: RepoModel C(x) -> RepoModel C(y) -> (RepoModel C(u), RepoModel C(v))
-diffRepos repo1 repo2 = 
-  let Just (diff1,diff2) = T.diffTrees hashedTree1 hashedTree2
-    in (RepoModel diff1, RepoModel diff2)
-  where
-      hashedTree1 = fromJust $ darcsUpdateHashes $ repoTree repo1
-      hashedTree2 = fromJust $ darcsUpdateHashes $ repoTree repo2
-
-
-instance Eq (RepoModel C(x)) where
-  repo1 == repo2 = let (diff1,diff2) = diffRepos repo1 repo2
-                     in nullRepo diff1 && nullRepo diff2
-
-----------------------------------------------------------------------
--- * Patch application
-
-applyPatch :: Apply p => p C(x y) -> RepoModel C(x) -> Maybe (RepoModel C(y))
-applyPatch patch (RepoModel tree) 
-  = RepoModel <$> applyToTree patch tree
-
-----------------------------------------------------------------------
--- * QuickCheck generators
-
--- Testing code assumes that aFilename and aDirname generators 
--- will always be able to generate a unique name given a list of
--- existing names. This should be OK as long as the number of possible
--- file/dirnames is much bigger than the number of files/dirs per repository.
-
--- 'Arbitrary' 'RepoModel' instance is based on the 'aSmallRepo' generator.
-
-
--- | Files are distinguish by ending their names with ".txt".
-aFilename :: Gen Name
-aFilename = do len <- choose (1,maxLength)
-               name <- vectorOf len alpha
-               return $ makeName (name ++ ".txt")
-  where
-      maxLength = 3
-
-aDirname :: Gen Name
-aDirname = do len <- choose (1,maxLength)
-              name <- vectorOf len alpha
-              return $ makeName name
-  where
-      maxLength = 3
-
-aWord :: Gen B.ByteString
-aWord = do c <- alpha
-           return $ BC.pack[c]
-
-aLine :: Gen B.ByteString
-aLine = do wordsNo <- choose (1,2)
-           ws <- vectorOf wordsNo aWord
-           return $ BC.unwords ws
-
-aContent :: Gen Content
-aContent = bSized 0 0.5 80 $ \k ->
-             do n <- choose (0,k)
-                vectorOf n aLine
+module Darcs.Test.Patch.RepoModel where
+import Darcs.Patch.Apply ( Apply, ApplyState )
+import Darcs.Witnesses.Show( Show1 )
+import Test.QuickCheck ( Gen )
 
-aFile :: Gen File
-aFile = makeFile <$> aContent
+type Fail = Either String
+unFail (Right x) = x
+unFail (Left err) = error $ "unFail failed: " ++ err
 
--- | See 'aRepo', the same applies for 'aDir'.
-aDir :: Int                -- ^ Maximum number of files
-        -> Int             -- ^ Maximum number of directories
-        -> Gen Dir
-aDir filesL dirL = root <$> aRepo filesL dirL
+maybeFail (Right x) = Just x
+maybeFail _ = Nothing
 
--- | @aRepo filesNo dirsNo@ produces repositories with *at most* 
--- @filesNo@ files and @dirsNo@ directories. 
--- The structure of the repository is aleatory.
-aRepo :: Int                -- ^ Maximum number of files
-        -> Int              -- ^ Maximum number of directories
-        -> Gen (RepoModel C(x))
-aRepo maxFiles maxDirs
-  = do let minFiles = if maxDirs == 0 && maxFiles > 0 then 1 else 0
-       filesNo <- choose (minFiles,maxFiles)
-       let minDirs = if filesNo == 0 && maxDirs > 0 then 1 else 0
-       dirsNo <- choose (minDirs,maxDirs)
-            -- NB: Thanks to laziness we don't need to care about division by zero
-            -- since if dirsNo == 0 then neither filesPerDirL nor subdirsPerDirL will
-            -- be evaluated.
-       let filesPerDirL   = (maxFiles-filesNo) `div` dirsNo
-           subdirsPerDirL = (maxDirs-dirsNo) `div` dirsNo
-       files <- vectorOf filesNo aFile
-       filenames <- uniques filesNo aFilename
-       dirs <- vectorOf dirsNo (aDir filesPerDirL subdirsPerDirL)
-       dirnames <- uniques dirsNo aDirname
-       return $ makeRepo (filenames `zip` files ++ dirnames `zip` dirs)
+class RepoModel model where
+  type RepoState model :: (* -> *) -> *
+  showModel :: model x -> String
+  eqModel :: model x -> model x -> Bool
+  aSmallRepo :: Gen (model x)
+  repoApply :: (Apply p, ApplyState p ~ RepoState model) => model x -> p x y -> Fail (model y)
 
--- | Generate small repositories.
--- Small repositories help generating (potentially) conflicting patches.
-aSmallRepo :: Gen (RepoModel C(x))
-aSmallRepo = do filesNo <- frequency [(3, return 1), (1, return 2)]
-                dirsNo <- frequency [(3, return 1), (1, return 0)]
-                aRepo filesNo dirsNo
+type family ModelOf (patch :: * -> * -> *) :: * -> *
 
-instance Arbitrary (Sealed RepoModel) where
-  arbitrary = seal <$> aSmallRepo
diff --git a/src/Darcs/Test/Patch/Test.hs b/src/Darcs/Test/Patch/Test.hs
deleted file mode 100644
--- a/src/Darcs/Test/Patch/Test.hs
+++ /dev/null
@@ -1,371 +0,0 @@
--- Copyright (C) 2002-2003,2007 David Roundy
---
--- This program is free software; you can redistribute it and/or modify
--- it under the terms of the GNU General Public License as published by
--- the Free Software Foundation; either version 2, or (at your option)
--- any later version.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with this program; see the file COPYING.  If not, write to
--- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
--- Boston, MA 02110-1301, USA.
-
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE CPP, FlexibleInstances, TypeSynonymInstances #-}
-
-#include "gadts.h"
-
-module Darcs.Test.Patch.Test
-             (
-               Check, checkPatch, checkAPatch, verboseCheckAPatch
-             ) where
-
-import Prelude hiding ( pi )
-import System.IO.Unsafe ( unsafePerformIO )
-import Test.QuickCheck
-import Control.Applicative
-import Control.Monad ( liftM, liftM2, liftM3, liftM4, replicateM )
-
-import Darcs.Patch.Info ( PatchInfo, patchinfo )
-import Darcs.Test.Patch.Check ( PatchCheck,
-                                checkMove, removeDir, createDir,
-                                isValid, insertLine, fileEmpty, fileExists,
-                                deleteLine, modifyFile, createFile, removeFile,
-                                doCheck, doVerboseCheck, FileContents(..)
-                              )
-import Darcs.Patch.RegChars ( regChars )
-import ByteStringUtils ( linesPS )
-import qualified Data.ByteString as B ( ByteString, null, concat )
-import qualified Data.ByteString.Char8 as BC ( break, pack )
-import Darcs.Patch.FileName ( fn2fp )
-import qualified Data.Map as M ( mapMaybe )
-
-import Darcs.Patch ( addfile, adddir, move,
-                     hunk, tokreplace, binary,
-                     changepref, invert, merge,
-                     effect )
-import Darcs.Patch.Invert ( Invert )
-import Darcs.Patch.V1 ()
-import qualified Darcs.Patch.V1.Core as V1 ( Patch(..) )
-import Darcs.Patch.V1.Core ( isMerger )
-import Darcs.Patch.Prim.V1 ()
-import Darcs.Patch.Prim.V1.Core ( Prim(..), DirPatchType(..), FilePatchType(..) )
-import Darcs.Witnesses.Ordered
-import Darcs.Witnesses.Sealed ( Sealed(Sealed), unseal, mapSeal, Sealed2(..) )
-import Darcs.Witnesses.Unsafe
-
-#include "impossible.h"
-
-type Patch = V1.Patch Prim
-
-class ArbitraryP p where
-    arbitraryP :: Gen (Sealed (p C(x)))
-
-{-
-TODO: there is a lot of overlap in testing between between this module
-and Darcs.Test.Patch.QuickCheck
-
-This module tests Prim and V1 patches, and Darcs.Test.Patch.QuickCheck
-tests Prim and V2 patches
-
-This module's generator covers a wider set of patch types, but is less
-likely to generate conflicts than Darcs.Test.Patch.QuickCheck.
-
-Until this is cleaned up, we take some care that the Arbitrary instances
-do not overlap and are only used for tests from the respective
-modules.
-
-(There are also tests in other modules that probably depend on the
-Arbitrary instances in this module.)
--}
-
-instance Arbitrary (Sealed (Prim C(x))) where
-    arbitrary = arbitraryP
-
-instance Arbitrary (Sealed (FL Patch C(x))) where
-    arbitrary = arbitraryP
-
-instance Arbitrary (Sealed2 (Prim :> Prim)) where
-    arbitrary = unseal Sealed2 <$> arbitraryP
-
-instance Arbitrary (Sealed2 (FL Patch)) where
-    arbitrary = unseal Sealed2 <$> arbitraryP
-
-instance Arbitrary (Sealed2 (FL Patch :\/: FL Patch)) where
-    arbitrary = unseal Sealed2 <$> arbitraryP
-
-instance Arbitrary (Sealed2 (FL Patch :> FL Patch)) where
-    arbitrary = unseal Sealed2 <$> arbitraryP
-
-instance Arbitrary (Sealed2 (FL Patch :> FL Patch :> FL Patch)) where
-    arbitrary = unseal Sealed2 <$> arbitraryP
-
-
-instance (ArbitraryP p1, ArbitraryP p2) => ArbitraryP (p1 :> p2) where
-    arbitraryP = do Sealed p1 <- arbitraryP
-                    Sealed p2 <- arbitraryP
-                    return (Sealed (p1 :> p2))
-
-instance (ArbitraryP p1, ArbitraryP p2) => ArbitraryP (p1 :\/: p2) where
-    arbitraryP = do Sealed p1 <- arbitraryP
-                    Sealed p2 <- arbitraryP
-                    return (Sealed (unsafeCoercePEnd p1 :\/: p2))
-
-instance ArbitraryP (FL Patch) where
-    arbitraryP = sized arbpatch
-
-instance ArbitraryP Prim where
-    arbitraryP = onepatchgen
-
-hunkgen :: Gen (Sealed (Prim C(x)))
-hunkgen = do
-  i <- frequency [(1,choose (0,5)),(1,choose (0,35)),
-                  (2,return 0),(3,return 1),(2,return 2),(1,return 3)]
-  j <- frequency [(1,choose (0,5)),(1,choose (0,35)),
-                  (2,return 0),(3,return 1),(2,return 2),(1,return 3)]
-  if i == 0 && j == 0 then hunkgen
-    else Sealed <$>
-            liftM4 hunk filepathgen linenumgen
-                (replicateM i filelinegen)
-                (replicateM j filelinegen)
-
-tokreplacegen :: Gen (Sealed (Prim C(x)))
-tokreplacegen = do
-  f <- filepathgen
-  o <- tokengen
-  n <- tokengen
-  if o == n
-     then return $ Sealed $ tokreplace f "A-Za-z" "old" "new"
-     else return $ Sealed $ tokreplace f "A-Za-z_" o n
-
-twofilegen :: (FORALL(y) FilePath -> FilePath -> Prim C(x y)) -> Gen (Sealed (Prim C(x)))
-twofilegen p = do
-  n1 <- filepathgen
-  n2 <- filepathgen
-  if n1 /= n2 && checkAPatch (p n1 n2)
-     then return $ Sealed $ p n1 n2
-     else twofilegen p
-
-chprefgen :: Gen (Sealed (Prim C(x)))
-chprefgen = do
-  f <- oneof [return "color", return "movie"]
-  o <- tokengen
-  n <- tokengen
-  if o == n then return $ Sealed $ changepref f "old" "new"
-            else return $ Sealed $ changepref f o n
-
-simplepatchgen :: Gen (Sealed (Prim C(x)))
-simplepatchgen = frequency [(1,liftM (Sealed . addfile) filepathgen),
-                            (1,liftM (Sealed . adddir) filepathgen),
-                            (1,liftM3 (\x y z -> Sealed (binary x y z)) filepathgen arbitrary arbitrary),
-                            (1,twofilegen move),
-                            (1,tokreplacegen),
-                            (1,chprefgen),
-                            (7,hunkgen)
-                           ]
-
-onepatchgen :: Gen (Sealed (Prim C(x)))
-onepatchgen = oneof [simplepatchgen, mapSeal (invert . unsafeCoerceP) `fmap` simplepatchgen]
-
-norecursgen :: Int -> Gen (Sealed (FL Patch C(x)))
-norecursgen 0 = mapSeal (\p -> V1.PP p :>: NilFL) `fmap` onepatchgen
-norecursgen n = oneof [mapSeal (\p -> V1.PP p :>: NilFL) `fmap` onepatchgen,flatcompgen n]
-
-arbpatch :: Int -> Gen (Sealed (FL Patch C(x)))
-arbpatch 0 = mapSeal (\p -> V1.PP p :>: NilFL) `fmap` onepatchgen
-arbpatch n = frequency [(3,mapSeal (\p -> V1.PP p :>: NilFL) `fmap` onepatchgen),
-                        (2,flatcompgen n),
-                        (0,rawMergeGen n),
-                        (0,mergegen n),
-                        (1,mapSeal (\p -> V1.PP p :>: NilFL) `fmap` onepatchgen)
-                       ]
-
--- | Generate an arbitrary list of at least one element
-unempty :: Arbitrary a => Gen [a]
-unempty = do
-  a <- arbitrary
-  as <- arbitrary
-  return (a:as)
-
-rawMergeGen :: Int -> Gen (Sealed (FL Patch C(x)))
-rawMergeGen n =   do Sealed p1 <- arbpatch len
-                     Sealed p2 <- arbpatch len
-                     if checkAPatch (invert p1:>:p2:>:NilFL) &&
-                        checkAPatch (invert p2:>:p1:>:NilFL)
-                        then case merge (p2 :\/: p1) of
-                             _ :/\: p2' -> return (Sealed (unsafeCoercePStart p2'))
-                        else rawMergeGen n
-    where len = if n < 15 then n`div`3 else 3
-
-mergegen :: Int -> Gen (Sealed (FL Patch C(x)))
-mergegen n = do
-  Sealed p1 <- norecursgen len
-  Sealed p2 <- norecursgen len
-  if checkAPatch (invert p1:>:p2:>:NilFL) &&
-         checkAPatch (invert p2:>:p1:>:NilFL)
-     then case merge (p2:\/:p1) of
-          _ :/\: p2' ->
-              if checkAPatch (p1+>+p2')
-              then return $ Sealed $ p1+>+p2'
-              else impossible
-     else mergegen n
-  where len = if n < 15 then n`div`3 else 3
-
-arbpi :: Gen PatchInfo
-arbpi = do n <- unempty
-           a <- unempty
-           l <- unempty
-           d <- unempty
-           return $ unsafePerformIO $ patchinfo n d a l
-
-instance Arbitrary PatchInfo where
-    arbitrary = arbpi
-
-instance Arbitrary B.ByteString where
-    arbitrary = liftM BC.pack arbitrary
-
-flatlistgen :: Int -> Gen (Sealed (FL Patch C(x)))
-flatlistgen 0 = return $ Sealed NilFL
-flatlistgen n = do Sealed x <- onepatchgen
-                   Sealed xs <- flatlistgen (n-1)
-                   return (Sealed (V1.PP x :>: xs))
-
-flatcompgen :: Int -> Gen (Sealed (FL Patch C(x)))
-flatcompgen n = do
-  Sealed ps <- flatlistgen n
-  let myp = regularizePatches $ ps
-  if checkAPatch myp
-     then return $ Sealed myp
-     else flatcompgen n
-
--- resize to size 25, that means we'll get line numbers no greater
--- than 1025 using QuickCheck 2.1
-linenumgen :: Gen Int
-linenumgen = frequency [(1,return 1), (1,return 2), (1,return 3),
-                    (3,liftM (\n->1+abs n) (resize 25 arbitrary)) ]
-
-tokengen :: Gen String
-tokengen = oneof [return "hello", return "world", return "this",
-                  return "is", return "a", return "silly",
-                  return "token", return "test"]
-
-toklinegen :: Gen String
-toklinegen = liftM unwords $ replicateM 3 tokengen
-
-filelinegen :: Gen B.ByteString
-filelinegen = liftM BC.pack $
-              frequency [(1,map fromSafeChar `fmap` arbitrary),(5,toklinegen),
-                         (1,return ""), (1,return "{"), (1,return "}") ]
-
-filepathgen :: Gen String
-filepathgen = liftM fixpath badfpgen
-
-fixpath :: String -> String
-fixpath "" = "test"
-fixpath p = fpth p
-
-fpth :: String -> String
-fpth ('/':'/':cs) = fpth ('/':cs)
-fpth (c:cs) = c : fpth cs
-fpth [] = []
-
-newtype SafeChar = SS Char
-instance Arbitrary SafeChar where
-    arbitrary = oneof $ map (return . SS) (['a'..'z']++['A'..'Z']++['1'..'9']++"0")
-
-fromSafeChar :: SafeChar -> Char
-fromSafeChar (SS s) = s
-
-badfpgen :: Gen String
-badfpgen =  frequency [(1,return "test"), (1,return "hello"), (1,return "world"),
-                       (1,map fromSafeChar `fmap` arbitrary),
-                       (1,liftM2 (\a b-> a++"/"++b) filepathgen filepathgen) ]
-
-class Check p where
-   checkPatch :: p C(x y) -> PatchCheck Bool
-
-instance Check p => Check (FL p) where
-   checkPatch NilFL = isValid
-   checkPatch (p :>: ps) = checkPatch p >> checkPatch ps
-
-checkAPatch :: (Invert p, Check p) => p C(x y) -> Bool
-checkAPatch p = doCheck $ do _ <- checkPatch p
-                             checkPatch $ invert p
-
-verboseCheckAPatch :: (Invert p, Check p) => p C(x y) -> Bool
-verboseCheckAPatch p = doVerboseCheck $ do checkPatch p
-
-instance Check Patch where
-   checkPatch p | isMerger p = do
-     checkPatch $ effect p
-   checkPatch (V1.Merger _ _ _ _) = impossible
-   checkPatch (V1.Regrem _ _ _ _) = impossible
-   checkPatch (V1.PP p) = checkPatch p
-
-instance Check Prim where
-
-   checkPatch (FP f RmFile) = removeFile $ fn2fp f
-   checkPatch (FP f AddFile) =  createFile $ fn2fp f
-   checkPatch (FP f (Hunk line old new)) = do
-       _ <- fileExists $ fn2fp f
-       mapM_ (deleteLine (fn2fp f) line) old
-       mapM_ (insertLine (fn2fp f) line) (reverse new)
-       isValid
-   checkPatch (FP f (TokReplace t old new)) =
-       modifyFile (fn2fp f) (tryTokPossibly t old new)
-   -- note that the above isn't really a sure check, as it leaves PSomethings
-   -- and PNothings which may have contained new...
-   checkPatch (FP f (Binary o n)) = do
-       _ <- fileExists $ fn2fp f
-       mapM_ (deleteLine (fn2fp f) 1) (linesPS o)
-       _ <- fileEmpty $ fn2fp f
-       mapM_ (insertLine (fn2fp f) 1) (reverse $ linesPS n)
-       isValid
-
-   checkPatch (DP d AddDir) = createDir $ fn2fp d
-   checkPatch (DP d RmDir) = removeDir $ fn2fp d
-
-   checkPatch (Move f f') = checkMove (fn2fp f) (fn2fp f')
-   checkPatch (ChangePref _ _ _) = return True
-
-regularizePatches :: FL Patch C(x y) -> FL Patch C(x y)
-regularizePatches patches = rpint (unsafeCoerceP NilFL) patches
-    where -- this reverses the list, which seems odd and causes
-          -- the witness unsafety
-          rpint :: FL Patch C(x y) -> FL Patch C(a b) -> FL Patch C(x y)
-          rpint ok_ps NilFL = ok_ps
-          rpint ok_ps (p:>:ps) =
-            if checkAPatch (unsafeCoerceP p:>:ok_ps)
-            then rpint (unsafeCoerceP p:>:ok_ps) ps
-            else rpint ok_ps ps
-
-tryTokPossibly :: String -> String -> String
-                -> (Maybe FileContents) -> (Maybe FileContents)
-tryTokPossibly t o n = liftM $ \contents ->
-        let lines' = M.mapMaybe (liftM B.concat
-                                  . tryTokInternal t (BC.pack o) (BC.pack n))
-                                (fcLines contents)
-        in contents { fcLines = lines' }
-
-tryTokInternal :: String -> B.ByteString -> B.ByteString
-                 -> B.ByteString -> Maybe [B.ByteString]
-tryTokInternal _ _ _ s | B.null s = Just []
-tryTokInternal t o n s =
-    case BC.break (regChars t) s of
-    (before,s') ->
-        case BC.break (not . regChars t) s' of
-        (tok,after) ->
-            case tryTokInternal t o n after of
-            Nothing -> Nothing
-            Just rest ->
-                if tok == o
-                then Just $ before : n : rest
-                else if tok == n
-                     then Nothing
-                     else Just $ before : tok : rest
-
diff --git a/src/Darcs/Test/Patch/Unit.hs b/src/Darcs/Test/Patch/Unit.hs
deleted file mode 100644
--- a/src/Darcs/Test/Patch/Unit.hs
+++ /dev/null
@@ -1,468 +0,0 @@
--- Copyright (C) 2007 David Roundy
---
--- This program is free software; you can redistribute it and/or modify
--- it under the terms of the GNU General Public License as published by
--- the Free Software Foundation; either version 2, or (at your option)
--- any later version.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with this program; see the file COPYING.  If not, write to
--- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
--- Boston, MA 02110-1301, USA.
-
-{-# OPTIONS_GHC -fno-warn-deprecations -fno-warn-orphans #-}
-{-# LANGUAGE CPP, MultiParamTypeClasses, FunctionalDependencies, UndecidableInstances, NoMonomorphismRestriction #-}
-
-#include "gadts.h"
-
-module Darcs.Test.Patch.Unit ( patchUnitTests ) where
-
-import Darcs.Test.Util.TestResult ( TestResult, succeeded, failed, isOk )
-
-import Data.Maybe ( catMaybes )
-import qualified Data.ByteString.Char8 as BC ( pack )
-import Darcs.Witnesses.Sealed
-import Darcs.Patch ( Patchy, invert, showPatch, hunk )
-import qualified Darcs.Patch as W ( commute )
-import Darcs.Patch.Merge ( Merge )
-import qualified Darcs.Patch.Merge as W ( merge, mergeFL )
-import Darcs.Patch.Patchy ( Commute, Invert(..) )
-import Darcs.Patch.Prim ( PrimPatch )
-import Darcs.Patch.Prim.V1 ( Prim )
-import Darcs.Patch.V2 ( RealPatch )
-import Darcs.Patch.V2.Real ( prim2real, isConsistent, isForward )
--- import Darcs.Test.Patch.Test () -- for instance Eq Patch
-import qualified Darcs.Test.Patch.Properties as W
-     ( permutivity, partialPermutivity
-     , mergeConsistent, mergeArgumentsConsistent, mergeEitherWay
-     , mergeCommute, patchAndInverseCommute, joinCommute, commuteInverses
-     , recommute
-     , show_read
-     )
-import qualified Darcs.Test.Patch.QuickCheck as W
-     ( getPairs, getTriples )
-import qualified Darcs.Test.Patch.Examples2 as W
-     ( mergeExamples, commuteExamples, tripleExamples
-     , realPatchLoopExamples
-     )
-import Darcs.Test.Patch.QuickCheck
-     ( Tree
-     , propConsistentTreeFlattenings
-     )
-import Darcs.Test.Patch.RepoModel ( RepoModel )
-import Darcs.Test.Patch.WithState ( WithStartState )
-import Darcs.Witnesses.Eq
-import qualified Darcs.Witnesses.Ordered as W
-import Darcs.Witnesses.Show
-import Darcs.Witnesses.Unsafe ( unsafeCoerceP, unsafeCoercePStart, unsafeCoercePEnd )
-import qualified Darcs.Test.Patch.Unit2 as W ( notDuplicatestriple )
-import qualified Darcs.Patch.Prim as W ( join )
-import Printer ( Doc, redText, ($$) )
---import Printer ( greenText )
---import Darcs.ColorPrinter ( traceDoc )
---import Darcs.ColorPrinter ( errorDoc )
-import Darcs.ColorPrinter () -- for instance Show Doc
-import Test.HUnit ( assertBool )
-import Test.Framework.Providers.HUnit ( testCase )
-import Test.Framework ( Test )
-
--- import Debug.Trace
--- #include "impossible.h"
-
-{-
-This module builds a lot of test cases by pattern matching
-on the results of merge/commute in where clauses. This would
-be very painful to switch to using witnesses properly, because
-we'd have to make them use case in series.
-
-So instead we give up on witnesses for this module, but instead
-of preprocessor hacks which make incompatible code with the rest
-of darcs, we build a fresh set of witnesses constructors (FL etc)
-which aren't actually GADTs or existentials. So the pattern matching
-works as before, but we need to translate back and forth a lot.
-
-We call the normal darcs constructors the 'W' variants.
--}
-
-infixr 5 :>:
-infixr 5 +>+
-infixr 1 :>
-infix 1 :/\:
-infix 1 :\/:
-
-data FL p C(x y) where
-   NilFL :: FL p C(x y)
-   (:>:) :: p C(x y) -> FL p C(x y) -> FL p C(x y)
-
-(+>+) :: FL p C(x y) -> FL p C(x y) -> FL p C(x y)
-NilFL +>+ ps = ps
-(p :>: ps) +>+ qs = p :>: (ps +>+ qs)
-
-data (p :> q) C(x y) where
-   (:>) :: p C(x y) -> q C(x y) -> (p :> q) C(x y)
-
-data (p :\/: q) C(x y) where
-   (:\/:) :: p C(x y) -> q C(x y) -> (p :\/: q) C(x y)
-
-data (p :/\: q) C(x y) where
-   (:/\:) :: p C(x y) -> q C(x y) -> (p :/\: q) C(x y)
-
-class WSub wp p | p -> wp, wp -> p where
-   fromW :: wp C(x y) -> p C(x y)
-   toW :: p C(x y) -> wp C(x y)
-
-instance (WSub wp1 p1, WSub wp2 p2) => WSub (wp1 W.:\/: wp2) (p1 :\/: p2) where
-   fromW (x W.:\/: y) = unsafeCoerceP (fromW x) :\/: unsafeCoerceP (fromW y)
-   toW (x :\/: y) = unsafeCoerceP (toW x) W.:\/: unsafeCoerceP (toW y)
-
-instance (WSub wp1 p1, WSub wp2 p2) => WSub (wp1 W.:/\: wp2) (p1 :/\: p2) where
-   fromW (x W.:/\: y) = unsafeCoerceP (fromW x) :/\: unsafeCoerceP (fromW y)
-   toW (x :/\: y) = unsafeCoerceP (toW x) W.:/\: unsafeCoerceP (toW y)
-
-instance (WSub wp1 p1, WSub wp2 p2) => WSub (wp1 W.:> wp2) (p1 :> p2) where
-   fromW (x W.:> y) = unsafeCoercePEnd (fromW x) :> unsafeCoercePStart (fromW y)
-   toW (x :> y) = unsafeCoercePEnd (toW x) W.:> unsafeCoercePStart (toW y)
-
-instance WSub wp p => WSub (W.FL wp) (FL p) where
-   fromW W.NilFL = unsafeCoerceP NilFL
-   fromW (x W.:>: xs) = unsafeCoercePEnd (fromW x) :>: unsafeCoercePStart (fromW xs)
-
-   toW NilFL = unsafeCoerceP W.NilFL
-   toW (x :>: xs) = unsafeCoercePEnd (toW x) W.:>: unsafeCoercePStart (toW xs)
-
-instance WSub prim prim => WSub (RealPatch prim) (RealPatch prim) where
-   fromW = id
-   toW = id
-
-instance WSub Prim Prim where
-   fromW = id
-   toW = id
-
-instance (WSub wp p, WSub wq q, Show2 wp, Show2 wq) => Show ((p :> q) C(x y)) where
-   show = show . toW
-
-instance (WSub wp p, WSub wq q, Show2 wp, Show2 wq) => Show2 (p :> q) where
-   showDict2 = ShowDictClass
-
-instance (WSub wp p, WSub wq q, Show2 wp, Show2 wq) => Show ((p :\/: q) C(x y)) where
-   show = show . toW
-
-instance (WSub wp p, WSub wq q, Show2 wp, Show2 wq) => Show2 (p :\/: q) where
-   showDict2 = ShowDictClass
-
-instance (WSub wp p, Show2 wp) => Show (FL p C(x y)) where
-   show = show . toW
-
-instance (WSub wp p, Show2 wp) => Show2 (FL p) where
-   showDict2 = ShowDictClass
-
-instance (WSub wp p, Commute wp, MyEq wp) => MyEq (FL p) where
-   unsafeCompare x y = unsafeCompare (toW x) (toW y)
-
-instance (WSub wp p, Commute wp, Invert wp) => Invert (FL p) where
-   invert = fromW . invert . toW
-
-instance (WSub wp p, Commute wp) => Commute (FL p) where
-   commute (xs W.:> ys) = do ys' W.:> xs' <- W.commute (toW xs W.:> toW ys)
-                             return (fromW ys' W.:> fromW xs')
-
-mergeFL :: (WSub wp p, Merge wp) => (p :\/: FL p) C(x y) -> (FL p :/\: p) C(x y)
-mergeFL = fromW . W.mergeFL . toW
-
-merge :: (WSub wp p, Merge wp) => (p :\/: p) C(x y) -> (p :/\: p) C(x y)
-merge = fromW . W.merge . toW
-
-commute :: (WSub wp p, Commute wp) => (p :> p) C(x y) -> Maybe ((p :> p) C(x y))
-commute = fmap fromW . W.commute . toW
-
-
-getPairs :: FL (RealPatch Prim) C(x y) -> [Sealed2 (RealPatch Prim :> RealPatch Prim)]
-getPairs = map (mapSeal2 fromW) . W.getPairs . toW
-
-getTriples :: FL (RealPatch Prim) C(x y) -> [Sealed2 (RealPatch Prim :> RealPatch Prim :> RealPatch Prim)]
-getTriples = map (mapSeal2 fromW) . W.getTriples . toW
-
-mergeExamples :: [Sealed2 (RealPatch Prim :\/: RealPatch Prim)]
-mergeExamples = map (mapSeal2 fromW) W.mergeExamples
-
-realPatchLoopExamples :: [Sealed (WithStartState RepoModel (Tree Prim))]
-realPatchLoopExamples = W.realPatchLoopExamples
-
-commuteExamples :: [Sealed2 (RealPatch Prim :> RealPatch Prim)]
-commuteExamples = map (mapSeal2 fromW) W.commuteExamples
-
-tripleExamples :: [Sealed2 (RealPatch Prim :> RealPatch Prim :> RealPatch Prim)]
-tripleExamples = map (mapSeal2 fromW) W.tripleExamples
-
-join :: (Prim :> Prim) C(x y) -> Maybe (FL Prim C(x y))
-join = fmap fromW . W.join . toW
-
-joinCommute :: (FORALL(x y) (Prim :> Prim) C(x y) -> Maybe (FL Prim C(x y)))
-             -> (Prim :> Prim :> Prim) C(a b) -> TestResult
-joinCommute f = W.joinCommute (fmap toW . f . fromW) . toW
-
-permutivity :: (Patchy wp, WSub wp p) => (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
-            -> (p :> p :> p) C(a b) -> TestResult
-permutivity f = W.permutivity (fmap toW . f . fromW) . toW
-
-partialPermutivity :: (Patchy wp, WSub wp p) => (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
-                    -> (p :> p :> p) C(a b) -> TestResult
-partialPermutivity f = W.partialPermutivity (fmap toW . f . fromW) . toW
-
-mergeEitherWay :: (Patchy wp, Merge wp, WSub wp p) => (p :\/: p) C(x y) -> TestResult
-mergeEitherWay = W.mergeEitherWay . toW
-
-commuteInverses :: (Patchy wp, WSub wp p) => (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
-                 -> (p :> p) C(a b) -> TestResult
-commuteInverses f = W.commuteInverses (fmap toW . f . fromW) . toW
-
-recommute :: (Patchy wp, WSub wp p) => (FORALL(x y) ((p :> p) C(x y) -> Maybe ((p :> p) C(x y))))
-          -> (p :> p) C(a b) -> TestResult
-recommute f = W.recommute (fmap toW . f . fromW) . toW
-
-mergeCommute :: (Patchy wp, Merge wp, WSub wp p) => (p :\/: p) C(x y) -> TestResult
-mergeCommute = W.mergeCommute . toW
-
-mergeConsistent :: (Patchy wp, Merge wp, WSub wp p) =>
-                           (FORALL(x y) p C(x y) -> Maybe Doc)
-                        -> (p :\/: p) C(a b) -> TestResult
-mergeConsistent f = W.mergeConsistent (f . fromW) . toW
-
-mergeArgumentsConsistent :: (Patchy wp, WSub wp p) =>
-                              (FORALL(x y) p C(x y) -> Maybe Doc)
-                           -> (p :\/: p) C(a b) -> TestResult
-mergeArgumentsConsistent f = W.mergeArgumentsConsistent (f . fromW) . toW
-
-show_read :: (Patchy p, Show2 p) => p C(x y) -> TestResult
-show_read = W.show_read
-
-patchAndInverseCommute :: (Patchy wp, WSub wp p) =>
-                             (FORALL(x y) (p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
-                          -> (p :> p) C(a b) -> TestResult
-patchAndInverseCommute f = W.patchAndInverseCommute (fmap toW . f . fromW) . toW
-
-notDuplicatestriple :: (RealPatch Prim :> RealPatch Prim :> RealPatch Prim) C(x y) -> Bool
-notDuplicatestriple = W.notDuplicatestriple . toW
-
-{- end of W<->nonW translation code -}
-
--- | The unit tests defined about patches
-patchUnitTests :: [Test]
-patchUnitTests = [
-                    runPrimitiveTests "join commute" (joinCommute join) primPermutables,
-                    runPrimitiveTests "prim recommute" (recommute commute) $ map mergeable2commutable mergeables,
-                    runPrimitiveTests "prim patch and inverse commute" (patchAndInverseCommute commute) $ map mergeable2commutable mergeables,
-                    runPrimitiveTests "prim inverses commute" (commuteInverses commute) $ map mergeable2commutable mergeables,
-                    runPrimitiveTests "FL prim recommute" (recommute commute) $ map mergeable2commutable mergeablesFL,
-                    runPrimitiveTests "FL prim patch and inverse commute" (patchAndInverseCommute commute) $ map mergeable2commutable mergeablesFL,
-                    runPrimitiveTests "FL prim inverses commute" (commuteInverses commute) $ map mergeable2commutable mergeablesFL,
-                    runPrimitiveTests "fails" (commuteFails commute) ([] :: [(Prim :> Prim) C(x y)]),
-                    runPrimitiveTests "read and show work on Prim" show_read primPatches,
-                    runPrimitiveTests "read and show work on RealPatch" show_read realPatches,
-                    runPrimitiveTests "example flattenings work"
-                                        (\x -> if propConsistentTreeFlattenings x
-                                                 then succeeded
-                                                 else failed $ redText "oops")
-                                        realPatchLoopExamples,
-                    runPrimitiveTests "real merge input consistent" (mergeArgumentsConsistent isConsistent) realMergeables,
-                    runPrimitiveTests "real merge input is forward" (mergeArgumentsConsistent isForward) realMergeables,
-                    runPrimitiveTests "real merge output is forward" (mergeConsistent isForward) realMergeables,
-                    runPrimitiveTests "real merge output consistent" (mergeConsistent isConsistent) realMergeables,
-                    runPrimitiveTests "real merge either way" mergeEitherWay realMergeables,
-                    runPrimitiveTests "real merge and commute" mergeCommute realMergeables,
-
-                    runPrimitiveTests "real recommute" (recommute commute) realCommutables,
-                    runPrimitiveTests "real inverses commute" (commuteInverses commute) realCommutables,
-                    runPrimitiveTests "real permutivity" (permutivity commute) $ filter (notDuplicatestriple) realTriples,
-                    runPrimitiveTests "real partial permutivity" (partialPermutivity commute) $ filter (notDuplicatestriple) realTriples
-
-                   ]
-
--- | Run a test function on a set of data, using HUnit. The test function should
---   return @Nothing@ upon success and a @Just x@ upon failure.
-runPrimitiveTests :: Show a => String               -- ^ The test name
-                              -> (a -> TestResult)  -- ^ The test function
-                              -> [a]                -- ^ The test data
-                              -> Test
-runPrimitiveTests name test datas = testCase name (assertBool assertName res)
-    where assertName = "Boolean assertion for \"" ++ name ++ "\""
-          res        = and $ map (isOk . test) datas
-
-quickhunk :: PrimPatch prim => Int -> String -> String -> prim C(x y)
-quickhunk l o n = hunk "test" l (map (\c -> BC.pack [c]) o)
-                                (map (\c -> BC.pack [c]) n)
-
-primPermutables :: [(Prim :> Prim :> Prim) C(x y)]
-primPermutables =
-    [quickhunk 0 "e" "bo" :> quickhunk 3 "" "x" :> quickhunk 2 "f" "qljo"]
-
-mergeables :: [(Prim :\/: Prim) C(x y)]
-mergeables = [quickhunk 1 "a" "b" :\/: quickhunk 1 "a" "c",
-              quickhunk 1 "a" "b" :\/: quickhunk 3 "z" "c",
-              quickhunk 0 "" "a" :\/: quickhunk 1 "" "b",
-              quickhunk 0 "a" "" :\/: quickhunk 1 "" "b",
-              quickhunk 0 "a" "" :\/: quickhunk 1 "b" "",
-              quickhunk 0 "" "a" :\/: quickhunk 1 "b" ""
-             ]
-
-mergeablesFL :: [(FL Prim :\/: FL Prim) C(x y)]
-mergeablesFL = map (\ (x:\/:y) -> (x :>: NilFL) :\/: (y :>: NilFL)) mergeables ++
-           [] --    [(quickhunk 1 "a" "b" :>: quickhunk 3 "z" "c" :>: NilFL)
-              --  :\/: (quickhunk 1 "a" "z" :>: NilFL),
-              --  (quickhunk 1 "a" "b" :>: quickhunk 1 "b" "c" :>: NilFL)
-              --  :\/: (quickhunk 1 "a" "z" :>: NilFL)]
-
-mergeable2commutable :: Invert p => (p :\/: p) C(x y) -> (p :> p) C(x y)
-mergeable2commutable (x :\/: y) = unsafeCoerceP (invert x) :> y
-
-primPatches :: [Prim C(x y)]
-primPatches = concatMap mergeable2patches mergeables
-    where mergeable2patches (x:\/:y) = [x,y]
-
-realPatches :: [RealPatch Prim C(x y)]
-realPatches = concatMap commutable2patches realCommutables
-    where commutable2patches (x:>y) = [x,y]
-
-realTriples :: [(RealPatch Prim :> RealPatch Prim :> RealPatch Prim) C(x y)]
-realTriples = [ob' :> oa2 :> a2'',
-                oa' :> oa2 :> a2'']
-               ++ map unsafeUnseal2 tripleExamples
-               ++ map unsafeUnseal2 (concatMap getTriples realFLs)
-    where oa = prim2real $ quickhunk 1 "o" "aa"
-          oa2 = oa
-          a2 = prim2real $ quickhunk 2 "a34" "2xx"
-          ob = prim2real $ quickhunk 1 "o" "bb"
-          ob' :/\: oa' = merge (oa :\/: ob)
-          a2' :/\: _ = merge (ob' :\/: a2)
-          a2'' :/\: _ = merge (oa2 :\/: a2')
-
-realFLs :: [FL (RealPatch Prim) C(x y)]
-realFLs = [oa :>: invert oa :>: oa :>: invert oa :>: ps +>+ oa :>: invert oa :>: NilFL]
-    where oa = prim2real $ quickhunk 1 "o" "a"
-          ps :/\: _ = merge (oa :>: invert oa :>: NilFL :\/: oa :>: invert oa :>: NilFL)
-
-realCommutables :: [(RealPatch Prim :> RealPatch Prim) C(x y)]
-realCommutables = map unsafeUnseal2 commuteExamples++
-                   map mergeable2commutable realMergeables++
-                   [invert oa :> ob'] ++ map unsafeUnseal2 (concatMap getPairs realFLs)
-    where oa = prim2real $ quickhunk 1 "o" "a"
-          ob = prim2real $ quickhunk 1 "o" "b"
-          _ :/\: ob' = mergeFL (ob :\/: oa :>: invert oa :>: NilFL)
-
-realMergeables :: [(RealPatch Prim :\/: RealPatch Prim) C(x y)]
-realMergeables = map (\ (x :\/: y) -> prim2real x :\/: prim2real y) mergeables
-                        ++ realIglooMergeables
-                        ++ realQuickcheckMergeables
-                        ++ map unsafeUnseal2 mergeExamples
-                        ++ catMaybes (map pair2m (concatMap getPairs realFLs))
-                        ++ [(oa :\/: od),
-                            (oa :\/: a2'),
-                            (ob' :\/: od''),
-                            (oe :\/: od),
-                            (of' :\/: oe'),
-                            (ob' :\/: oe'),
-                            (oa :\/: oe'),
-                            (ob' :\/: oc'),
-                            (b2' :\/: oc'''),
-                            (ob' :\/: a2),
-                            (b2' :\/: og'''),
-                            (oc''' :\/: og'''),
-                            (oc'' :\/: og''),
-                            (ob'' :\/: og''),
-                            (ob'' :\/: oc''),
-                            (oc' :\/: od'')]
-    where oa = prim2real $ quickhunk 1 "o" "aa"
-          a2 = prim2real $ quickhunk 2 "a34" "2xx"
-          og = prim2real $ quickhunk 3 "4" "g"
-          ob = prim2real $ quickhunk 1 "o" "bb"
-          b2 = prim2real $ quickhunk 2 "b" "2"
-          oc = prim2real $ quickhunk 1 "o" "cc"
-          od = prim2real $ quickhunk 7 "x" "d"
-          oe = prim2real $ quickhunk 7 "x" "e"
-          pf = prim2real $ quickhunk 7 "x" "f"
-          od'' = prim2real $ quickhunk 8 "x" "d"
-          ob' :>: b2' :>: NilFL :/\: _ = mergeFL (oa :\/: ob :>: b2 :>: NilFL)
-          a2' :/\: _ = merge (ob' :\/: a2)
-          ob'' :/\: _ = merge (a2 :\/: ob')
-          og' :/\: _ = merge (oa :\/: og)
-          og'' :/\: _ = merge (a2 :\/: og')
-          og''' :/\: _ = merge (ob' :\/: og')
-          oc' :/\: _ = merge (oa :\/: oc)
-          oc'' :/\: _ = merge (a2 :\/: oc)
-          oc''' :/\: _ = merge (ob' :\/: oc')
-          oe' :/\: _ = merge (od :\/: oe)
-          of' :/\: _ = merge (od :\/: pf)
-          pair2m :: Sealed2 (RealPatch Prim :> RealPatch Prim)
-                 -> Maybe ((RealPatch Prim :\/: RealPatch Prim) C(x y))
-          pair2m (Sealed2 (xx :> y)) = do y' :> _ <- commute (xx :> y)
-                                          return $ unsafeCoerceP (xx :\/: y')
-
-realIglooMergeables :: [(RealPatch Prim :\/: RealPatch Prim) C(x y)]
-realIglooMergeables = [(a :\/: b),
-                    (b :\/: c),
-                    (a :\/: c),
-                    (x :\/: a),
-                    (y :\/: b),
-                    (z :\/: c),
-                    (x' :\/: y'),
-                    (z' :\/: y'),
-                    (x' :\/: z'),
-                    (a :\/: a)]
-    where a = prim2real $ quickhunk 1 "1" "A"
-          b = prim2real $ quickhunk 2 "2" "B"
-          c = prim2real $ quickhunk 3 "3" "C"
-          x = prim2real $ quickhunk 1 "1BC" "xbc"
-          y = prim2real $ quickhunk 1 "A2C" "ayc"
-          z = prim2real $ quickhunk 1 "AB3" "abz"
-          x' :/\: _ = merge (a :\/: x)
-          y' :/\: _ = merge (b :\/: y)
-          z' :/\: _ = merge (c :\/: z)
-
-realQuickcheckMergeables :: [(RealPatch Prim :\/: RealPatch Prim) C(x y)]
-realQuickcheckMergeables = [-- invert k1 :\/: n1
-                             --, invert k2 :\/: n2
-                               hb :\/: k
-                             , b' :\/: b'
-                             , n' :\/: n'
-                             , b :\/: d
-                             , k' :\/: k'
-                             , k3 :\/: k3
-                             ] ++ catMaybes (map pair2m pairs)
-    where hb = prim2real $ quickhunk 0 "" "hb"
-          k = prim2real $ quickhunk 0 "" "k"
-          n = prim2real $ quickhunk 0 "" "n"
-          b = prim2real $ quickhunk 1 "b" ""
-          d = prim2real $ quickhunk 2 "" "d"
-          d':/\:_ = merge (b :\/: d)
-          --k1 :>: n1 :>: NilFL :/\: _ = mergeFL (hb :\/: k :>: n :>: NilFL)
-          --k2 :>: n2 :>: NilFL :/\: _ =
-          --    merge (hb :>: b :>: NilFL :\/: k :>: n :>: NilFL)
-          k' :>: n' :>: NilFL :/\: _ :>: b' :>: _ = merge (hb :>: b :>: d' :>: NilFL :\/: k :>: n :>: NilFL)
-          pairs = getPairs (hb :>: b :>: d' :>: k' :>: n' :>: NilFL)
-          pair2m :: Sealed2 (RealPatch Prim :> RealPatch Prim)
-                 -> Maybe ((RealPatch Prim :\/: RealPatch Prim) C(x y))
-          pair2m (Sealed2 (xx :> y)) = do y' :> _ <- commute (xx :> y)
-                                          return $ unsafeCoerceP (xx :\/: y')
-
-          i = prim2real $ quickhunk 0 "" "i"
-          x = prim2real $ quickhunk 0 "" "x"
-          xi = prim2real $ quickhunk 0 "xi" ""
-          d3 :/\: _ = merge (xi :\/: d)
-          _ :/\: k3 = mergeFL (k :\/: i :>: x :>: xi :>: d3 :>: NilFL)
-
-commuteFails :: (MyEq p, Patchy p)
-             => ((p :> p) C(x y) -> Maybe ((p :> p) C(x y)))
-             -> (p :> p) C(x y)
-             -> TestResult
-commuteFails c (x :> y) = case c (x :> y) of
-                            Nothing -> succeeded
-                            Just (y' :> x') ->
-                              failed $ redText "x" $$ showPatch x $$
-                                       redText ":> y" $$ showPatch y $$
-                                       redText "y'" $$ showPatch y' $$
-                                       redText ":> x'" $$ showPatch x'
diff --git a/src/Darcs/Test/Patch/Unit2.hs b/src/Darcs/Test/Patch/Unit2.hs
deleted file mode 100644
--- a/src/Darcs/Test/Patch/Unit2.hs
+++ /dev/null
@@ -1,244 +0,0 @@
--- Copyright (C) 2007 David Roundy
---
--- This program is free software; you can redistribute it and/or modify
--- it under the terms of the GNU General Public License as published by
--- the Free Software Foundation; either version 2, or (at your option)
--- any later version.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with this program; see the file COPYING.  If not, write to
--- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
--- Boston, MA 02110-1301, USA.
-
-{-# LANGUAGE CPP #-}
-
-#include "gadts.h"
-
--- This module was split out from Darcs.Test.Patch.Unit to assist with
--- adding witnesses.
-module Darcs.Test.Patch.Unit2 ( patchUnitTests2, notDuplicatestriple ) where
-
-
-import Darcs.Test.Util.TestResult ( TestResult, fromMaybe )
-
-import Darcs.Patch.FileHunk ( FileHunk(..), IsHunk(..) )
-import Darcs.Patch.Prim ( PrimPatch, PrimOf, join )
-import Darcs.Patch.Prim.V1 ( Prim )
-import Darcs.Patch.Merge ( Merge(..) )
-import Darcs.Patch.Patchy ( Patchy, Commute(..) )
-import Darcs.Patch.RepoPatch ( RepoPatch )
-import Darcs.Patch.V2 ( RealPatch )
-import Darcs.Patch.V2.Real ( isConsistent, isDuplicate )
-import Darcs.Test.Patch.Prim.V1 () -- Arbitrary instances
-import Darcs.Test.Patch.Properties
-     ( invertSymmetry, invertRollback
-     , recommute, commuteInverses, effectPreserving
-     , permutivity, partialPermutivity
-     , mergeEitherWay, show_read
-     , joinEffectPreserving, joinCommute
-     )
-import Darcs.Test.Patch.QuickCheck
-     ( Tree, TreeWithFlattenPos
-     , propIsMergeable, propConsistentTreeFlattenings
-     )
-import qualified Darcs.Test.Patch.QuickCheck as T
-     ( commuteTripleFromTree, commutePairFromTree, commutePairFromTWFP
-     , mergePairFromTree, mergePairFromTWFP
-     , patchFromTree
-     )
-import Darcs.Test.Patch.Utils ( testConditional )
-import Darcs.Test.Patch.RepoModel ( RepoModel )
-import Darcs.Test.Patch.WithState ( WithState(..), WithStartState )
-import Darcs.Witnesses.Eq ( unsafeCompare )
-import Darcs.Witnesses.Ordered ( (:>)(..), (:/\:)(..), (:\/:)(..), FL, allFL )
-import Darcs.Witnesses.Sealed ( Sealed, unseal, Sealed2, unseal2 )
-
-import Data.Maybe ( isNothing )
-import Test.Framework ( Test )
-import Test.Framework.Providers.QuickCheck2 ( testProperty )
-
-patchFromTree :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) p C(y z) -> t) -> WithStartState RepoModel (Tree Prim) C(x) -> t
-patchFromTree = T.patchFromTree
-
-mergePairFromTree :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :\/: p) C(y z) -> t) -> WithStartState RepoModel (Tree Prim) C(x) -> t
-mergePairFromTree = T.mergePairFromTree
-
-mergePairFromTWFP :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :\/: p) C(y z) -> t) -> WithStartState RepoModel (TreeWithFlattenPos Prim) C(x) -> t
-mergePairFromTWFP = T.mergePairFromTWFP
-
-commutePairFromTWFP :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :> p) C(y z) -> t) -> WithStartState RepoModel (TreeWithFlattenPos Prim) C(x) -> t
-commutePairFromTWFP = T.commutePairFromTWFP
-
-commutePairFromTree :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :> p) C(y z) -> t) -> WithStartState RepoModel (Tree Prim) C(x) -> t
-commutePairFromTree = T.commutePairFromTree
-
-commuteTripleFromTree :: (RepoPatch p, PrimOf p ~ Prim) => (FORALL(y z) (p :> p :> p) C(y z) -> t) -> WithStartState RepoModel (Tree Prim) C(x) -> t
-commuteTripleFromTree = T.commuteTripleFromTree
-
-
-patchUnitTests2 :: [Test]
-patchUnitTests2 = [ testProperty "Checking Prim invert symmetry..."
-                        (unseal2 $ invertSymmetry :: Sealed2 Prim -> TestResult),
-                    testProperty "Checking FL Prim invert symmetry..."
-                        (unseal2 $ invertSymmetry :: Sealed2 (FL Prim) -> TestResult),
-                    testProperty "Checking Prim invert rollback..."
-                        (unseal2 $ invertRollback :: Sealed2 (WithState RepoModel Prim) -> TestResult),
-                    testProperty "Checking FL Prim invert rollback..."
-                        (unseal2 $ invertRollback :: Sealed2 (WithState RepoModel (FL Prim)) -> TestResult),
-                    testConditional "Checking Prim effect preserving..."
-                        (unseal2 $ nonEmptyHunksPair . wsPatch)
-                        (unseal2 $ effectPreserving commute :: Sealed2 (WithState RepoModel (Prim :> Prim)) -> TestResult),
-                    testConditional "Checking FL Prim effect preserving..."
-                        (unseal2 $ nonEmptyHunksFLPair . wsPatch)
-                        (unseal2 $ effectPreserving commute :: Sealed2 (WithState RepoModel (FL Prim :> FL Prim)) -> TestResult),
-                    testProperty "Checking Prim recommute..."
-                        (unseal2 $ recommute commute :: Sealed2 (Prim :> Prim) -> TestResult),
-                    testProperty "Checking FL Prim recommute..."
-                        (unseal2 $ recommute commute :: Sealed2 (FL Prim :> FL Prim) -> TestResult),
-                    testProperty "Checking Prim inverses commute..."
-                        (unseal2 $ commuteInverses commute :: Sealed2 (Prim :> Prim) -> TestResult),
-                    testProperty "Checking FL Prim inverses commute..."
-                        (unseal2 $ commuteInverses commute :: Sealed2 (FL Prim :> FL Prim) -> TestResult),
-                    --do putStr "Checking with quickcheck that real patches have consistent flattenings... "
-                    --   quickCheck (not . isBottomTimeOut (Just 10) . propConsistentTreeFlattenings) >> return 0
-                    -- The following fails because of setpref patches...
-                    --,do putStr "Checking prim inverse doesn't commute using QuickCheck... "
-                    --    simpleCheck (inverseDoesntCommute :: Prim -> Maybe Doc)
-                    testProperty "Checking prim join effect preserving... "
-                       (unseal2 (joinEffectPreserving join)),
-                    testConditional "Checking prim join commute using QuickCheck... "
-                        (unseal2 nonEmptyHunksTriple)
-                        (unseal2 (joinCommute join)),
-                    --,do putStr "Checking prim recommute using QuickCheck... "
-                    --    simpleCheck (recommute
-                    --                 (commute :: Prim :> Prim
-                    --                          -> Maybe (Prim :> Prim)))
-                    testProperty "Checking that readPatch and showPatch work on RealPatch... "
-                                 (unseal $ patchFromTree $ (show_read :: RealPatch Prim C(x y) -> TestResult)),
-                    testProperty "Checking that readPatch and showPatch work on FL RealPatch... "
-                                 (unseal2 $ (show_read :: FL (RealPatch Prim) C(x y) -> TestResult)),
-                    testProperty "Checking that tree flattenings are consistent... " propConsistentTreeFlattenings,
-                    testProperty "Checking with quickcheck that real patches are consistent... "
-                                 (unseal $ patchFromTree $ fromMaybe . isConsistent),
-
-                    testProperty "Checking we can do merges using QuickCheck"
-                                 (isNothing . (propIsMergeable ::
-                                                Sealed (WithStartState RepoModel (Tree Prim))
-                                                -> Maybe (Tree (RealPatch Prim) C(x)))),
-                    testProperty "Checking recommute using QuickCheck Tree generator"
-                                 (unseal $ commutePairFromTree
-                                    (recommute commuteReals)),
-                    testProperty "Checking recommute using QuickCheck TWFP generator"
-                                 (unseal $ commutePairFromTWFP
-                                    (recommute commuteReals)),
-                    testConditional "Checking nontrivial recommute"
-                                    (unseal $ commutePairFromTree $ nontrivialReals)
-                                    (unseal $ commutePairFromTree $
-                                      (recommute commuteReals)),
-                    testConditional "Checking nontrivial recommute using TWFP"
-                                    (unseal $ commutePairFromTWFP $ nontrivialReals)
-                                    (unseal $ commutePairFromTWFP $
-                                      (recommute commuteReals)),
-
-                    testProperty "Checking inverses commute using QuickCheck Tree generator"
-                                 (unseal $ commutePairFromTree $
-                                    (commuteInverses commuteReals)),
-                    testProperty "Checking inverses commute using QuickCheck TWFP generator"
-                                 (unseal $ commutePairFromTWFP $
-                                    (commuteInverses commuteReals)),
-                    testConditional "Checking nontrivial inverses commute"
-                                    (unseal $ commutePairFromTree $ nontrivialReals)
-                                    (unseal $ commutePairFromTree $
-                                        (commuteInverses commuteReals)),
-                    testConditional "Checking nontrivial inverses commute using TWFP"
-                                    (unseal $ commutePairFromTWFP $ nontrivialReals)
-                                    (unseal $ commutePairFromTWFP $
-                                        (commuteInverses commuteReals)),
-
-                    testProperty "Checking merge either way using QuickCheck TWFP generator"
-                                 (unseal $ mergePairFromTWFP $ mergeEitherWayReals),
-                    testProperty "Checking merge either way using QuickCheck Tree generator"
-                                 (unseal $ mergePairFromTree $ mergeEitherWayReals),
-                    testConditional "Checking nontrivial merge either way"
-                                    (unseal $ mergePairFromTree $ nontrivialMergeReals)
-                                    (unseal $ mergePairFromTree $ mergeEitherWayReals),
-                    testConditional "Checking nontrivial merge either way using TWFP"
-                                    (unseal $ mergePairFromTWFP $ nontrivialMergeReals)
-                                    (unseal $ mergePairFromTWFP $ mergeEitherWayReals),
-
-                    testConditional "Checking permutivity"
-                                    (unseal $ commuteTripleFromTree notDuplicatestriple)
-                                    (unseal $ commuteTripleFromTree $ permutivity commuteReals),
-                    testConditional "Checking partial permutivity"
-                                    (unseal $ commuteTripleFromTree notDuplicatestriple)
-                                    (unseal $ commuteTripleFromTree $ partialPermutivity commuteReals),
-                    testConditional "Checking nontrivial permutivity"
-                                    (unseal $ commuteTripleFromTree
-                                               (\t -> nontrivialTriple t && notDuplicatestriple t))
-                                    (unseal $ commuteTripleFromTree $
-                                                   (permutivity commuteReals))
-                   ]
-
-notDuplicatestriple :: (RealPatch prim :> RealPatch prim :> RealPatch prim) C(x y) -> Bool
-notDuplicatestriple (a :> b :> c) = not (isDuplicate a || isDuplicate b || isDuplicate c)
-
---not_duplicates_pair :: RealPatch prim :> RealPatch prim -> Bool
---not_duplicates_pair (a :> b) = not $ any isDuplicate [a,b]
-
-nontrivialTriple :: PrimPatch prim => (RealPatch prim :> RealPatch prim :> RealPatch prim) C(x y) -> Bool
-nontrivialTriple (a :> b :> c) =
-    case commute (a :> b) of
-    Nothing -> False
-    Just (b' :> a') ->
-      case commute (a' :> c) of
-      Nothing -> False
-      Just (c'' :> a'') ->
-        case commute (b :> c) of
-        Nothing -> False
-        Just (c' :> b'') -> (not (a `unsafeCompare` a') || not (b `unsafeCompare` b')) &&
-                            (not (c' `unsafeCompare` c) || not (b'' `unsafeCompare` b)) &&
-                            (not (c'' `unsafeCompare` c) || not (a'' `unsafeCompare` a'))
-
-
-nonEmptyHunk :: (IsHunk p) => p C(x y) -> Bool
-nonEmptyHunk p
-  | Just (FileHunk _ _ [] []) <- isHunk p = False
-  | otherwise                             = True
-
-nonEmptyHunksPair :: (IsHunk p) => (p :> p) C(x y) -> Bool
-nonEmptyHunksPair (p1 :> p2) = nonEmptyHunk p1 && nonEmptyHunk p2
-
-nonEmptyHunksTriple :: (IsHunk p) => (p :> p :> p) C(x y) -> Bool
-nonEmptyHunksTriple (p1 :> p2 :> p3) = nonEmptyHunk p1 && nonEmptyHunk p2 && nonEmptyHunk p3
-
-nonEmptyHunksFLPair :: (IsHunk p) => (FL p :> FL p) C(x y) -> Bool
-nonEmptyHunksFLPair (ps :> qs) = allFL nonEmptyHunk ps && allFL nonEmptyHunk qs
-
-commuteReals :: PrimPatch prim => (RealPatch prim :> RealPatch prim) C(x y) -> Maybe ((RealPatch prim :> RealPatch prim) C(x y))
-commuteReals = commute
-
-mergeEitherWayReals :: PrimPatch prim => (RealPatch prim :\/: RealPatch prim) C(x y) -> TestResult
-mergeEitherWayReals = mergeEitherWay
-
-nontrivialReals :: PrimPatch prim => (RealPatch prim :> RealPatch prim) C(x y) -> Bool
-nontrivialReals = nontrivialCommute
-
-nontrivialCommute :: Patchy p => (p :> p) C(x y) -> Bool
-nontrivialCommute (x :> y) = case commute (x :> y) of
-                              Just (y' :> x') -> not (y' `unsafeCompare` y) ||
-                                                 not (x' `unsafeCompare` x)
-                              Nothing -> False
-
-nontrivialMergeReals :: PrimPatch prim => (RealPatch prim :\/: RealPatch prim) C(x y) -> Bool
-nontrivialMergeReals = nontrivialMerge
-
-nontrivialMerge :: (Patchy p, Merge p) => (p :\/: p) C(x y) -> Bool
-nontrivialMerge (x :\/: y) = case merge (x :\/: y) of
-                              y' :/\: x' -> not (y' `unsafeCompare` y) ||
-                                            not (x' `unsafeCompare` x)
-
diff --git a/src/Darcs/Test/Patch/V1Model.hs b/src/Darcs/Test/Patch/V1Model.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/V1Model.hs
@@ -0,0 +1,288 @@
+{-# LANGUAGE CPP #-}
+
+#include "gadts.h"
+
+-- | Repository model
+module Darcs.Test.Patch.V1Model
+  ( module Storage.Hashed.AnchoredPath
+  , V1Model, repoTree
+  , RepoItem, File, Dir, Content
+  , makeRepo, emptyRepo
+  , makeFile, emptyFile
+  , emptyDir
+  , nullRepo
+  , isFile, isDir
+  , fileContent, dirContent
+  , isEmpty
+  , root
+  , filterFiles, filterDirs
+  , find
+  , list
+  , ap2fp
+  , aFilename, aDirname
+  , aLine, aContent
+  , aFile, aDir
+  , aRepo
+  ) where
+
+
+import Darcs.Test.Util.QuickCheck ( alpha, uniques, bSized )
+import Darcs.Test.Patch.RepoModel
+
+import Darcs.Patch.Apply( Apply(..), applyToTree )
+import Darcs.Witnesses.Sealed ( Sealed, seal )
+import Darcs.Witnesses.Show
+
+import Storage.Hashed.AnchoredPath
+import Storage.Hashed.Tree( Tree, TreeItem )
+import Storage.Hashed.Darcs ( darcsUpdateHashes )
+import qualified Storage.Hashed.Tree as T
+
+import Control.Applicative ( (<$>) )
+import Control.Arrow ( second )
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Char8 as BC
+import qualified Data.ByteString.Lazy as BL
+import qualified Data.ByteString.Lazy.Char8 as BLC
+import Data.List ( intercalate )
+import qualified Data.Map as M
+import Test.QuickCheck
+  ( Arbitrary(..)
+  , Gen, choose, vectorOf, frequency )
+
+#include "impossible.h"
+
+
+----------------------------------------------------------------------
+-- * Model definition
+
+-- | A repository is an abstraction build in top of a 'Tree'.
+-- NB: Repository preferences are not supported yet.
+newtype V1Model C(x) = V1Model {
+                           repoTree :: Tree Fail
+                         }
+
+-- | Repository items may be text files or directories.
+-- NB: Binary files are not supported yet.
+newtype RepoItem = RepoItem {
+                      treeItem :: TreeItem Fail
+                   }
+
+type File = RepoItem
+type Dir  = RepoItem
+
+type Content = [B.ByteString]
+
+----------------------------------------
+-- Instances
+
+instance Show (V1Model C(x)) where
+  show repo = "V1Model{ " 
+            ++ intercalate " " (map showEntry $ list repo)
+            ++ " }"
+    where
+        showPath = show . flatten
+        showContent content = "[" ++ intercalate " " (map show content) ++ "]"
+        showEntry (path,item)
+          | isDir item  = showPath path
+          | isFile item = showPath path ++ showContent (fileContent item)
+        showEntry _ = impossible
+
+instance Show1 V1Model where
+  showDict1 = ShowDictClass
+
+----------------------------------------
+-- Utils
+
+bs2lbs :: B.ByteString -> BL.ByteString
+bs2lbs bs = BL.fromChunks [bs]
+
+lbs2bs :: BL.ByteString -> B.ByteString
+lbs2bs = B.concat . BL.toChunks
+
+content2lbs :: Content -> BL.ByteString
+content2lbs = BLC.unlines . map bs2lbs
+
+lbs2content :: BL.ByteString -> Content
+lbs2content = map lbs2bs . BLC.lines
+
+----------------------------------------------------------------------
+-- ** Path conversion
+
+ap2fp :: AnchoredPath -> FilePath
+ap2fp = anchorPath ""
+
+----------------------------------------------------------------------
+-- * Constructors
+
+makeRepo :: [(Name, RepoItem)] -> V1Model C(x)
+makeRepo = V1Model . T.makeTree . map (second treeItem)
+
+emptyRepo :: V1Model C(x)
+emptyRepo = V1Model T.emptyTree
+
+makeFile :: Content -> File
+makeFile = RepoItem . T.File . T.makeBlob . content2lbs
+
+emptyFile :: File
+emptyFile = RepoItem $ T.File T.emptyBlob
+
+emptyDir :: Dir
+emptyDir = RepoItem $ T.SubTree T.emptyTree
+
+----------------------------------------------------------------------
+-- * Queries
+
+nullRepo :: V1Model C(x) -> Bool
+nullRepo = M.null . T.items . repoTree
+
+isFile :: RepoItem -> Bool
+isFile (RepoItem (T.File _)) = True
+isFile _other                = False
+
+isDir :: RepoItem -> Bool
+isDir (RepoItem (T.SubTree _)) = True
+isDir _other                   = False
+
+fileContent :: File -> Content
+fileContent (RepoItem (T.File blob)) 
+  = lbs2content $ unFail $ T.readBlob blob
+fileContent _other
+  = error "fileContent: Not a file."
+
+dirContent :: Dir -> [(Name, RepoItem)]
+dirContent (RepoItem (T.SubTree subtree)) 
+  = map (second RepoItem) $ M.toList $ T.items subtree
+dirContent _other
+  = error "dirContent: Not a directory."
+
+-- | @isEmpty file@ <=> file content is empty
+--   @isEmpty dir@  <=> dir has no child
+isEmpty :: RepoItem -> Bool
+isEmpty item
+  | isFile item = null $ fileContent item
+  | isDir item  = null $ dirContent item
+  | otherwise   = undefined
+
+-- | The root directory of a repository.
+root :: V1Model C(x) -> Dir
+root = RepoItem . T.SubTree . repoTree
+
+find :: V1Model C(x) -> AnchoredPath -> Maybe RepoItem
+find (V1Model tree) path = RepoItem <$> T.find tree path
+
+-- | List repository items.
+-- NB: It does not include the root directory.
+list :: V1Model C(x) -> [(AnchoredPath, RepoItem)]
+list (V1Model tree) = map (second RepoItem) $ T.list tree
+
+----------------------------------------------------------------------
+-- ** Filtering
+
+filterFiles :: [(n, RepoItem)] -> [(n, File)]
+filterFiles = filter (isFile . snd)
+
+filterDirs :: [(n, RepoItem)] -> [(n, Dir)]
+filterDirs = filter (isDir . snd)
+
+----------------------------------------------------------------------
+-- * Comparing repositories
+
+diffRepos :: V1Model C(x) -> V1Model C(y) -> (V1Model C(u), V1Model C(v))
+diffRepos repo1 repo2 = 
+  let (diff1,diff2) = unFail $ T.diffTrees hashedTree1 hashedTree2
+    in (V1Model diff1, V1Model diff2)
+  where
+      hashedTree1, hashedTree2 :: Tree Fail
+      hashedTree1 = unFail $ darcsUpdateHashes $ repoTree repo1
+      hashedTree2 = unFail $ darcsUpdateHashes $ repoTree repo2
+
+
+----------------------------------------------------------------------
+-- * Patch application
+
+----------------------------------------------------------------------
+-- * QuickCheck generators
+
+-- Testing code assumes that aFilename and aDirname generators 
+-- will always be able to generate a unique name given a list of
+-- existing names. This should be OK as long as the number of possible
+-- file/dirnames is much bigger than the number of files/dirs per repository.
+
+-- 'Arbitrary' 'V1Model' instance is based on the 'aSmallRepo' generator.
+
+
+-- | Files are distinguish by ending their names with ".txt".
+aFilename :: Gen Name
+aFilename = do len <- choose (1,maxLength)
+               name <- vectorOf len alpha
+               return $ makeName (name ++ ".txt")
+  where
+      maxLength = 3
+
+aDirname :: Gen Name
+aDirname = do len <- choose (1,maxLength)
+              name <- vectorOf len alpha
+              return $ makeName name
+  where
+      maxLength = 3
+
+aWord :: Gen B.ByteString
+aWord = do c <- alpha
+           return $ BC.pack[c]
+
+aLine :: Gen B.ByteString
+aLine = do wordsNo <- choose (1,2)
+           ws <- vectorOf wordsNo aWord
+           return $ BC.unwords ws
+
+aContent :: Gen Content
+aContent = bSized 0 0.5 80 $ \k ->
+             do n <- choose (0,k)
+                vectorOf n aLine
+
+aFile :: Gen File
+aFile = makeFile <$> aContent
+
+-- | See 'aRepo', the same applies for 'aDir'.
+aDir :: Int                -- ^ Maximum number of files
+        -> Int             -- ^ Maximum number of directories
+        -> Gen Dir
+aDir filesL dirL = root <$> aRepo filesL dirL
+
+-- | @aRepo filesNo dirsNo@ produces repositories with *at most* 
+-- @filesNo@ files and @dirsNo@ directories. 
+-- The structure of the repository is aleatory.
+aRepo :: Int                -- ^ Maximum number of files
+        -> Int              -- ^ Maximum number of directories
+        -> Gen (V1Model C(x))
+aRepo maxFiles maxDirs
+  = do let minFiles = if maxDirs == 0 && maxFiles > 0 then 1 else 0
+       filesNo <- choose (minFiles,maxFiles)
+       let minDirs = if filesNo == 0 && maxDirs > 0 then 1 else 0
+       dirsNo <- choose (minDirs,maxDirs)
+            -- NB: Thanks to laziness we don't need to care about division by zero
+            -- since if dirsNo == 0 then neither filesPerDirL nor subdirsPerDirL will
+            -- be evaluated.
+       let filesPerDirL   = (maxFiles-filesNo) `div` dirsNo
+           subdirsPerDirL = (maxDirs-dirsNo) `div` dirsNo
+       files <- vectorOf filesNo aFile
+       filenames <- uniques filesNo aFilename
+       dirs <- vectorOf dirsNo (aDir filesPerDirL subdirsPerDirL)
+       dirnames <- uniques dirsNo aDirname
+       return $ makeRepo (filenames `zip` files ++ dirnames `zip` dirs)
+
+-- | Generate small repositories.
+-- Small repositories help generating (potentially) conflicting patches.
+instance RepoModel V1Model where
+  type RepoState V1Model = Tree
+  aSmallRepo = do filesNo <- frequency [(3, return 1), (1, return 2)]
+                  dirsNo <- frequency [(3, return 1), (1, return 0)]
+                  aRepo filesNo dirsNo
+  repoApply (V1Model tree) patch = V1Model <$> applyToTree patch tree
+  eqModel repo1 repo2 = let (diff1,diff2) = diffRepos repo1 repo2
+                         in nullRepo diff1 && nullRepo diff2
+
+
+instance Arbitrary (Sealed V1Model) where
+  arbitrary = seal <$> aSmallRepo
diff --git a/src/Darcs/Test/Patch/V3Model.hs b/src/Darcs/Test/Patch/V3Model.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/V3Model.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE CPP, OverloadedStrings, MultiParamTypeClasses, StandaloneDeriving #-}
+
+#include "gadts.h"
+
+-- | Repository model
+module Darcs.Test.Patch.V3Model
+  ( module Storage.Hashed.AnchoredPath
+  , V3Model
+  , Object(..)
+  , repoApply
+  , emptyFile
+  , emptyDir
+  , nullRepo
+  , isEmpty
+  , root, repoObjects
+  , aFilename, aDirname
+  , aLine, aContent
+  , aFile, aDir
+  , aRepo
+  , anUUID
+  ) where
+
+
+import Darcs.Test.Util.QuickCheck ( alpha, uniques, bSized )
+import Darcs.Test.Patch.RepoModel
+
+import Darcs.Patch.Apply( Apply(..), applyToState )
+import Darcs.Patch.ApplyMonad( ApplyMonad(..) )
+import Darcs.Patch.Prim.V3.Core( UUID(..), Hunk(..), Prim(..), Object(..) )
+import Darcs.Patch.Prim.V3.Apply( ObjectMap(..) )
+import Darcs.Witnesses.Sealed ( Sealed, seal )
+import Darcs.Witnesses.Show
+
+import Storage.Hashed.AnchoredPath
+import Storage.Hashed.Tree( Tree, TreeItem )
+import Storage.Hashed.Darcs ( darcsUpdateHashes )
+import Storage.Hashed.Hash( Hash(..) )
+import qualified Storage.Hashed.Tree as T
+
+import Control.Applicative ( (<$>) )
+import Control.Arrow ( second )
+import qualified Data.ByteString as BS
+import qualified Data.ByteString.Char8 as BC
+import qualified Data.ByteString.Lazy as BL
+import qualified Data.ByteString.Lazy.Char8 as BLC
+import Data.List ( intercalate, sort )
+import qualified Data.Map as M
+import Test.QuickCheck
+  ( Arbitrary(..)
+  , Gen, choose, vectorOf, frequency, oneof )
+
+#include "impossible.h"
+
+
+----------------------------------------------------------------------
+-- * Model definition
+
+newtype V3Model C(x) = V3Model { repoMap :: ObjectMap Fail }
+
+----------------------------------------
+-- Instances
+
+instance Show (Object Fail) where
+  show (Directory l) = show l
+  show (Blob c _) = show c
+
+deriving instance Eq (Object Fail)
+
+instance Show (V3Model x) where
+  show = showModel
+
+instance Show1 V3Model where
+  showDict1 = ShowDictClass
+
+----------------------------------------------------------------------
+-- * Constructors
+
+objectMap :: (Monad m) => M.Map UUID (Object m) -> ObjectMap m
+objectMap map = ObjectMap { getObject = get, putObject = put, listObjects = list }
+  where list = return $ M.keys map
+        put k o = return $ objectMap (M.insert k o map)
+        get k = return $ M.lookup k map
+
+emptyRepo :: V3Model C(x)
+emptyRepo = V3Model (objectMap M.empty)
+
+emptyFile :: (Monad m) => Object m
+emptyFile = Blob (return BS.empty) NoHash
+
+emptyDir :: Object m
+emptyDir = Directory M.empty
+
+----------------------------------------------------------------------
+-- * Queries
+
+nullRepo :: V3Model C(x) -> Bool
+nullRepo = null . repoObjects
+
+-- | @isEmpty file@ <=> file content is empty
+--   @isEmpty dir@  <=> dir has no child
+isEmpty :: Object Fail -> Bool
+isEmpty (Directory d) = M.null d
+isEmpty (Blob f _) = BS.null $ unFail f
+
+-- | The root directory of a repository.
+root :: V3Model C(x) -> Object Fail
+root (V3Model repo) = fromJust $ unFail $ getObject repo (UUID "ROOT")
+
+repoObjects :: V3Model C(x) -> [(UUID, Object Fail)]
+repoObjects (V3Model repo) = [ (id, obj id) |
+                               id <- unFail $ listObjects repo, not $ isEmpty $ obj id ]
+  where obj id = fromJust $ unFail $ getObject repo id
+
+----------------------------------------------------------------------
+-- * Comparing repositories
+
+----------------------------------------------------------------------
+-- * QuickCheck generators
+
+-- Testing code assumes that aFilename and aDirname generators 
+-- will always be able to generate a unique name given a list of
+-- existing names. This should be OK as long as the number of possible
+-- file/dirnames is much bigger than the number of files/dirs per repository.
+
+-- 'Arbitrary' 'V3Model' instance is based on the 'aSmallRepo' generator.
+
+
+-- | Files are distinguish by ending their names with ".txt".
+aFilename :: Gen BS.ByteString
+aFilename = do len <- choose (1,maxLength)
+               name <- vectorOf len alpha
+               return $ BC.pack $ name ++ ".txt"
+  where
+      maxLength = 3
+
+aDirname :: Gen BS.ByteString
+aDirname = do len <- choose (1,maxLength)
+              BC.pack <$> vectorOf len alpha
+  where
+      maxLength = 3
+
+aWord :: Gen BS.ByteString
+aWord = do c <- alpha
+           return $ BC.pack[c]
+
+aLine :: Gen BS.ByteString
+aLine = do wordsNo <- choose (1,2)
+           ws <- vectorOf wordsNo aWord
+           return $ BC.unwords ws
+
+aContent :: Gen BS.ByteString
+aContent = bSized 0 0.5 80 $ \k ->
+             do n <- choose (0,k)
+                BC.intercalate "\n" <$> vectorOf n aLine
+
+aFile :: (Monad m) => Gen (Object m)
+aFile = aContent >>= \c -> return $ Blob (return c) NoHash
+
+aDir :: (Monad m) => [UUID] -> [UUID] -> Gen [(UUID, Object m)]
+aDir [] _ = return []
+aDir (dirid:dirids) fileids =
+  do dirsplit <- choose (1, length dirids)
+     filesplit <- choose (1, length fileids)
+     let ids = take filesplit fileids
+         rem = drop filesplit fileids
+     files <- vectorOf filesplit aFile
+     names <- vectorOf filesplit aFilename
+     dirnames <- vectorOf dirsplit aDirname
+     dirs <- subdirs (take dirsplit dirids)
+                     (drop dirsplit dirids)
+                     (drop filesplit fileids)
+     return $ (dirid, Directory $ M.fromList $ names `zip` ids ++ dirnames `zip` dirids)
+            : (fileids `zip` files) ++ dirs
+  where subdirs [] _ _ = return []
+        subdirs tomake dirs files = do
+          dirsplit <- choose (1, length dirs)
+          filesplit <- choose (1, length files)
+          dir <- aDir (head tomake : take dirsplit dirs) (take filesplit files)
+          rem <- subdirs (tail tomake) (drop dirsplit dirs) (drop filesplit files)
+          return $ dir ++ rem
+
+
+anUUID :: Gen UUID
+anUUID = UUID . BC.pack <$> vectorOf 32 (oneof $ map return "0123456789")
+
+-- | @aRepo filesNo dirsNo@ produces repositories with *at most* 
+-- @filesNo@ files and @dirsNo@ directories. 
+-- The structure of the repository is aleatory.
+aRepo :: Int                -- ^ Maximum number of files
+        -> Int              -- ^ Maximum number of directories
+        -> Gen (V3Model C(x))
+aRepo maxFiles maxDirs
+  = do let minFiles = if maxDirs == 0 && maxFiles > 0 then 1 else 0
+       filesNo <- choose (minFiles,maxFiles)
+       let minDirs = if filesNo == 0 && maxDirs > 0 then 1 else 0
+       dirsNo <- choose (minDirs,maxDirs)
+       dirids <- (UUID "ROOT":) <$> uniques dirsNo anUUID
+       fileids <- uniques filesNo anUUID
+       objectmap <- aDir dirids fileids
+       return $ V3Model $ objectMap $ M.fromList objectmap
+
+-- | Generate small repositories.
+-- Small repositories help generating (potentially) conflicting patches.
+instance RepoModel V3Model where
+  type RepoState V3Model = ObjectMap
+  aSmallRepo = do filesNo <- frequency [(3, return 1), (1, return 2)]
+                  dirsNo <- frequency [(3, return 1), (1, return 0)]
+                  aRepo filesNo dirsNo
+  repoApply (V3Model state) patch = V3Model <$> applyToState patch state
+  showModel model = "V3Model{\n" ++ unlines (map entry $ repoObjects model) ++ "}"
+    where entry (id, obj) = show id ++ " -> " ++ show obj
+  eqModel r1 r2 = repoObjects r1 == repoObjects r2
+
+instance Arbitrary (Sealed V3Model) where
+  arbitrary = seal <$> aSmallRepo
diff --git a/src/Darcs/Test/Patch/WSub.hs b/src/Darcs/Test/Patch/WSub.hs
new file mode 100644
--- /dev/null
+++ b/src/Darcs/Test/Patch/WSub.hs
@@ -0,0 +1,138 @@
+{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, UndecidableInstances #-}
+module Darcs.Test.Patch.WSub where
+
+{-
+The Examples.Set2Unwitnessed module builds a lot of test cases by pattern matching
+on the results of merge/commute in where clauses. This would
+be very painful to switch to using witnesses properly, because
+we'd have to make them use case in series.
+
+So instead we give up on witnesses for this module, but instead
+of preprocessor hacks which make incompatible code with the rest
+of darcs, we build a fresh set of witnesses constructors (FL etc)
+which aren't actually GADTs or existentials. So the pattern matching
+works as before, but we need to translate back and forth a lot.
+
+We call the normal darcs constructors the 'W' variants.
+-}
+
+import qualified Darcs.Test.Patch.Arbitrary.Generic as W
+     ( getPairs, getTriples )
+
+import qualified Darcs.Patch as W ( commute )
+import qualified Darcs.Patch.Merge as W ( merge, mergeFL )
+import qualified Darcs.Patch.Prim as W ( join )
+
+import qualified Darcs.Witnesses.Ordered as W
+import Darcs.Witnesses.Sealed
+import Darcs.Witnesses.Eq
+import Darcs.Witnesses.Show
+import Darcs.Witnesses.Unsafe ( unsafeCoerceP, unsafeCoercePStart, unsafeCoercePEnd )
+
+import Darcs.Patch.Merge ( Merge )
+import Darcs.Patch.Prim.V1 ( Prim )
+import Darcs.Patch.V2 ( RealPatch )
+import Darcs.Patch.Patchy ( Commute, Invert(..) )
+
+#include "gadts.h"
+
+infixr 5 :>:
+infixr 5 +>+
+infixr 1 :>
+infix 1 :/\:
+infix 1 :\/:
+
+data FL p C(x y) where
+   NilFL :: FL p C(x y)
+   (:>:) :: p C(x y) -> FL p C(x y) -> FL p C(x y)
+
+(+>+) :: FL p C(x y) -> FL p C(x y) -> FL p C(x y)
+NilFL +>+ ps = ps
+(p :>: ps) +>+ qs = p :>: (ps +>+ qs)
+
+data (p :> q) C(x y) where
+   (:>) :: p C(x y) -> q C(x y) -> (p :> q) C(x y)
+
+data (p :\/: q) C(x y) where
+   (:\/:) :: p C(x y) -> q C(x y) -> (p :\/: q) C(x y)
+
+data (p :/\: q) C(x y) where
+   (:/\:) :: p C(x y) -> q C(x y) -> (p :/\: q) C(x y)
+
+class WSub wp p | p -> wp, wp -> p where
+   fromW :: wp C(x y) -> p C(x y)
+   toW :: p C(x y) -> wp C(x y)
+
+instance (WSub wp1 p1, WSub wp2 p2) => WSub (wp1 W.:\/: wp2) (p1 :\/: p2) where
+   fromW (x W.:\/: y) = unsafeCoerceP (fromW x) :\/: unsafeCoerceP (fromW y)
+   toW (x :\/: y) = unsafeCoerceP (toW x) W.:\/: unsafeCoerceP (toW y)
+
+instance (WSub wp1 p1, WSub wp2 p2) => WSub (wp1 W.:/\: wp2) (p1 :/\: p2) where
+   fromW (x W.:/\: y) = unsafeCoerceP (fromW x) :/\: unsafeCoerceP (fromW y)
+   toW (x :/\: y) = unsafeCoerceP (toW x) W.:/\: unsafeCoerceP (toW y)
+
+instance (WSub wp1 p1, WSub wp2 p2) => WSub (wp1 W.:> wp2) (p1 :> p2) where
+   fromW (x W.:> y) = unsafeCoercePEnd (fromW x) :> unsafeCoercePStart (fromW y)
+   toW (x :> y) = unsafeCoercePEnd (toW x) W.:> unsafeCoercePStart (toW y)
+
+instance WSub wp p => WSub (W.FL wp) (FL p) where
+   fromW W.NilFL = unsafeCoerceP NilFL
+   fromW (x W.:>: xs) = unsafeCoercePEnd (fromW x) :>: unsafeCoercePStart (fromW xs)
+
+   toW NilFL = unsafeCoerceP W.NilFL
+   toW (x :>: xs) = unsafeCoercePEnd (toW x) W.:>: unsafeCoercePStart (toW xs)
+
+instance WSub prim prim => WSub (RealPatch prim) (RealPatch prim) where
+   fromW = id
+   toW = id
+
+instance WSub Prim Prim where
+   fromW = id
+   toW = id
+
+instance (WSub wp p, WSub wq q, Show2 wp, Show2 wq) => Show ((p :> q) C(x y)) where
+   show = show . toW
+
+instance (WSub wp p, WSub wq q, Show2 wp, Show2 wq) => Show2 (p :> q) where
+   showDict2 = ShowDictClass
+
+instance (WSub wp p, WSub wq q, Show2 wp, Show2 wq) => Show ((p :\/: q) C(x y)) where
+   show = show . toW
+
+instance (WSub wp p, WSub wq q, Show2 wp, Show2 wq) => Show2 (p :\/: q) where
+   showDict2 = ShowDictClass
+
+instance (WSub wp p, Show2 wp) => Show (FL p C(x y)) where
+   show = show . toW
+
+instance (WSub wp p, Show2 wp) => Show2 (FL p) where
+   showDict2 = ShowDictClass
+
+instance (WSub wp p, Commute wp, MyEq wp) => MyEq (FL p) where
+   unsafeCompare x y = unsafeCompare (toW x) (toW y)
+
+instance (WSub wp p, Commute wp, Invert wp) => Invert (FL p) where
+   invert = fromW . invert . toW
+
+instance (WSub wp p, Commute wp) => Commute (FL p) where
+   commute (xs W.:> ys) = do ys' W.:> xs' <- W.commute (toW xs W.:> toW ys)
+                             return (fromW ys' W.:> fromW xs')
+
+mergeFL :: (WSub wp p, Merge wp) => (p :\/: FL p) C(x y) -> (FL p :/\: p) C(x y)
+mergeFL = fromW . W.mergeFL . toW
+
+merge :: (WSub wp p, Merge wp) => (p :\/: p) C(x y) -> (p :/\: p) C(x y)
+merge = fromW . W.merge . toW
+
+commute :: (WSub wp p, Commute wp) => (p :> p) C(x y) -> Maybe ((p :> p) C(x y))
+commute = fmap fromW . W.commute . toW
+
+getPairs :: FL (RealPatch Prim) C(x y) -> [Sealed2 (RealPatch Prim :> RealPatch Prim)]
+getPairs = map (mapSeal2 fromW) . W.getPairs . toW
+
+getTriples :: FL (RealPatch Prim) C(x y) -> [Sealed2 (RealPatch Prim :> RealPatch Prim :> RealPatch Prim)]
+getTriples = map (mapSeal2 fromW) . W.getTriples . toW
+
+join :: (Prim :> Prim) C(x y) -> Maybe (FL Prim C(x y))
+join = fmap fromW . W.join . toW
+
diff --git a/src/Darcs/Test/Patch/WithState.hs b/src/Darcs/Test/Patch/WithState.hs
--- a/src/Darcs/Test/Patch/WithState.hs
+++ b/src/Darcs/Test/Patch/WithState.hs
@@ -107,12 +107,26 @@
                                       arbitraryFL k s
 
 
-makeGen :: ArbitraryState s p => Gen (s C(x)) -> Gen (Sealed2 p)
-makeGen stGen = do s <- stGen
-                   Sealed (WithEndState p _) <- arbitraryState s
-                   return $ seal2 p
+makeS2Gen :: ArbitraryState s p => Gen (s C(x)) -> Gen (Sealed2 p)
+makeS2Gen stGen = do s <- stGen
+                     Sealed (WithEndState p _) <- arbitraryState s
+                     return $ seal2 p
 
-makeWSGen :: ArbitraryState s p => Gen (s C(x)) -> Gen (Sealed2 (WithState s p))
+makeSGen :: ArbitraryState s p => Gen (s C(x)) -> Gen (Sealed (p C(x)))
+makeSGen stGen = do s <- stGen
+                    Sealed (WithEndState p _) <- arbitraryState s
+                    return $ seal p
+
+makeWS2Gen :: ArbitraryState s p => Gen (s C(x)) -> Gen (Sealed2 (WithState s p))
+makeWS2Gen stGen = do s <- stGen
+                      Sealed (WithEndState wsP _) <- arbitraryState s
+                      return $ seal2 wsP
+
+makeWSGen :: ArbitraryState s p => Gen (s C(x)) -> Gen (Sealed (WithState s p C(x)))
 makeWSGen stGen = do s <- stGen
                      Sealed (WithEndState wsP _) <- arbitraryState s
-                     return $ seal2 wsP
+                     return $ seal wsP
+
+instance (Show2 p, Show1 s) => Show1 ((WithState s p) C(a)) where
+  showDict1 = ShowDictClass
+
diff --git a/src/Darcs/Test/Util/QuickCheck.hs b/src/Darcs/Test/Util/QuickCheck.hs
--- a/src/Darcs/Test/Util/QuickCheck.hs
+++ b/src/Darcs/Test/Util/QuickCheck.hs
@@ -51,8 +51,8 @@
         -> Double   -- ^ Increment
         -> Int      -- ^ Upper bound
         -> (Int -> Gen a) -> Gen a
-bSized low inc upp mkGen = sized $ mkGen . resize
+bSized low inc upp mkGen = sized $ mkGen . resize'
   where
-    resize :: Int -> Int
-    resize n = let x = fromIntegral n
+    resize' :: Int -> Int
+    resize' n = let x = fromIntegral n
                  in min upp (floor(inc*x) + low)
diff --git a/src/Darcs/Utils.hs b/src/Darcs/Utils.hs
--- a/src/Darcs/Utils.hs
+++ b/src/Darcs/Utils.hs
@@ -21,9 +21,12 @@
                    , clarifyErrors, prettyException, prettyError
                    , addToErrorLoc
                     -- * Files and directories
-                   , isFileReallySymlink, doesDirectoryReallyExist, doesFileReallyExist
+                   , getFileStatus
                    , withCurrentDirectory
                    , withUMask
+                    --  * Locales
+                   , getSystemEncoding
+                   , isUTF8Locale
                     -- * Tree filtering.
                    , filterFilePaths, filterPaths
                     -- * Tree lookup.
@@ -34,7 +37,8 @@
 import Control.Exception.Extensible
              ( bracket, bracket_, catch, try,
                IOException, SomeException, Exception(fromException) )
-import System.IO.Error ( annotateIOError, isUserError, ioeGetErrorString )
+import System.IO.Error ( annotateIOError, isUserError, ioeGetErrorString
+                       , isDoesNotExistError, ioeGetFileName )
 
 import Darcs.SignalHandler ( catchNonSignal )
 import Numeric ( showHex )
@@ -48,13 +52,14 @@
 import Control.Monad ( when, forM )
 import Control.Monad.Error( MonadError )
 import Exec ( execInteractive )
-import Foreign.C.String ( CString, withCString )
+import Foreign.C.String ( CString, withCString, peekCString )
 import Foreign.C.Error ( throwErrno )
 import Foreign.C.Types ( CInt )
+import Text.Regex
 
 import qualified Data.ByteString.Char8 as BSC
 
-import System.Posix.Files( getSymbolicLinkStatus, isRegularFile, isDirectory, isSymbolicLink )
+import System.Posix.Files( getSymbolicLinkStatus, FileStatus )
 
 import Progress ( withoutProgress )
 
@@ -70,7 +75,7 @@
 import qualified Storage.Hashed.Monad as HS ( exists, tree )
 import Storage.Hashed.Tree( Tree, listImmediate, findTree )
 
-showHexLen :: (Integral a) => Int -> a -> String
+showHexLen :: (Integral a, Show a) => Int -> a -> String
 showHexLen n x = let s = showHex x ""
                  in replicate (n - length s) ' ' ++ s
 
@@ -105,6 +110,10 @@
 
 prettyException :: SomeException -> String
 prettyException e | Just ioe <- fromException e, isUserError ioe = ioeGetErrorString ioe
+prettyException e | Just ioe <- fromException e, isDoesNotExistError ioe =
+  case ioeGetFileName ioe of
+    Just f  -> f ++ " does not exist"
+    Nothing -> show e
 prettyException e = show e
 
 prettyError :: IOError -> String
@@ -298,18 +307,9 @@
 filterFilePaths :: [FilePath] -> AnchoredPath -> t -> Bool
 filterFilePaths = filterPaths . map floatPath
 
--- Huh?
-isFileReallySymlink :: FilePath -> IO Bool
-isFileReallySymlink f = do fs <- getSymbolicLinkStatus f
-                           return (isSymbolicLink fs)
-
-doesFileReallyExist :: FilePath -> IO Bool
-doesFileReallyExist f = do fs <- getSymbolicLinkStatus f
-                           return (isRegularFile fs)
-
-doesDirectoryReallyExist :: FilePath -> IO Bool
-doesDirectoryReallyExist f = do fs <- getSymbolicLinkStatus f
-                                return (isDirectory fs)
+getFileStatus :: FilePath -> IO (Maybe FileStatus)
+getFileStatus f =
+  Just `fmap` getSymbolicLinkStatus f `catchall` return Nothing
 
 treeHasAnycase :: (MonadError e m, Functor m, Monad m) => Tree m -> FilePath -> m Bool
 treeHasAnycase tree path = fst `fmap` virtualTreeMonad (existsAnycase $ floatPath path) tree
@@ -334,3 +334,45 @@
 
 treeHasFile :: (MonadError e m, Functor m, Monad m) => Tree m -> FilePath -> m Bool
 treeHasFile tree path = fst `fmap` virtualTreeMonad (fileExists $ floatPath path) tree
+
+-- The following functions are copied from the encoding package (BSD3
+-- licence, by Henning Günther).
+
+-- | @getSystemEncoding@ fetches the current encoding from locale
+foreign import ccall "system_encoding.h get_system_encoding"
+     get_system_encoding :: IO CString
+
+getSystemEncoding :: IO String
+getSystemEncoding = do
+    enc <- get_system_encoding
+    peekCString enc
+
+-- | @isUTF8@ checks if an encoding is UTF-8 (or ascii, since it is a
+-- subset of UTF-8).
+isUTF8Locale :: String -> Bool
+isUTF8Locale codeName = case (normalizeEncoding codeName) of
+    -- ASCII
+    "ascii"              -> True
+    "646"                -> True
+    "ansi_x3_4_1968"     -> True
+    "ansi_x3.4_1986"     -> True
+    "cp367"              -> True
+    "csascii"            -> True
+    "ibm367"             -> True
+    "iso646_us"          -> True
+    "iso_646.irv_1991"   -> True
+    "iso_ir_6"           -> True
+    "us"                 -> True
+    "us_ascii"           -> True
+    -- UTF-8
+    "utf_8"              -> True
+    "u8"                 -> True
+    "utf"                -> True
+    "utf8"               -> True
+    "utf8_ucs2"          -> True
+    "utf8_ucs4"          -> True
+    -- Everything else
+    _                    -> False
+  where
+    normalizeEncoding s = map toLower $ subRegex sep s "_"
+    sep = mkRegex "[^0-9A-Za-z]+"
diff --git a/src/Darcs/Witnesses/Ordered.hs b/src/Darcs/Witnesses/Ordered.hs
--- a/src/Darcs/Witnesses/Ordered.hs
+++ b/src/Darcs/Witnesses/Ordered.hs
@@ -107,6 +107,9 @@
 instance Show2 a => Show2 (RL a) where
    showDict2 = ShowDictClass
 
+instance (Show2 a, Show2 b) => Show1 ((a :> b) C(x)) where
+   showDict1 = ShowDictClass
+
 -- reverse list
 data RL a C(x z) where
     (:<:) :: a C(y z) -> RL a C(x y) -> RL a C(x z)
diff --git a/src/Darcs/Witnesses/Sealed.hs b/src/Darcs/Witnesses/Sealed.hs
--- a/src/Darcs/Witnesses/Sealed.hs
+++ b/src/Darcs/Witnesses/Sealed.hs
@@ -102,7 +102,7 @@
 
 -- |'Stepped' is a type level composition operator.
 -- For example, 'Stepped Sealed p' is equivalent to 'lambda x . Sealed (p x)'
-newtype Stepped f a C(x) = Stepped { unStepped :: f (a C(x)) }
+newtype Stepped (f :: SEALEDPATCHKIND -> *) a C(x) = Stepped { unStepped :: f (a C(x)) }
 
 -- |'FreeLeft p' is '\forall x . \exists y . p x y'
 -- In other words the caller is free to specify the left witness,
diff --git a/src/Darcs/Witnesses/WZipper.hs b/src/Darcs/Witnesses/WZipper.hs
--- a/src/Darcs/Witnesses/WZipper.hs
+++ b/src/Darcs/Witnesses/WZipper.hs
@@ -21,12 +21,12 @@
 module Darcs.Witnesses.WZipper ( FZipper(..), focus, leftmost, left
                                , rightmost, right, jokers, clowns
                                , flToZipper, lengthFZ, nullFZ
-                               , toEnd
+                               , toEnd, toStart
                                )
 where
 import Darcs.Witnesses.Ordered ( FL(..), RL(..), nullFL, nullRL
                                , lengthFL, lengthRL, (+<+)
-                               , reverseFL
+                               , reverseFL, reverseRL, (+>+)
                                )
 import Darcs.Witnesses.Sealed(Sealed2(..), Sealed(..), FlippedSeal(..))
 
@@ -78,3 +78,5 @@
 toEnd :: FZipper p C(x y) -> FZipper p C(x y)
 toEnd (FZipper l r) = FZipper (reverseFL r +<+ l) NilFL
 
+toStart :: FZipper p C(x y) -> FZipper p C(x y)
+toStart (FZipper l r) = FZipper NilRL ((reverseRL l) +>+ r)
diff --git a/src/English.hs b/src/English.hs
--- a/src/English.hs
+++ b/src/English.hs
@@ -24,7 +24,7 @@
 --  * lists of clauses (foo, bar and/or baz).
 module English where
 
-import Data.List (isSuffixOf, intersperse)
+import Data.List (isSuffixOf, intercalate)
 
 -- | > englishNum 0 (Noun "watch") "" == "watches"
 --   > englishNum 1 (Noun "watch") "" == "watch"
@@ -81,7 +81,7 @@
 intersperseLast _ _ [] = ""
 intersperseLast _ _ [clause] = clause
 intersperseLast sep sepLast clauses =
-    concat (intersperse sep $ init clauses) ++ sepLast ++ last clauses
+    intercalate sep (init clauses) ++ sepLast ++ last clauses
 
 presentParticiple :: String -> String
 presentParticiple v | last v == 'e' = init v ++ "ing"
diff --git a/src/Exec.hs b/src/Exec.hs
--- a/src/Exec.hs
+++ b/src/Exec.hs
@@ -163,7 +163,7 @@
                    (do setFdOption stdInput NonBlockingRead False)
                    (\_ -> setFdOption stdInput NonBlockingRead True)
                    (\_ -> x)
-          else do x
+          else x
 #else
 withoutNonBlock x = do x
 #endif
diff --git a/src/HTTP.hs b/src/HTTP.hs
deleted file mode 100644
--- a/src/HTTP.hs
+++ /dev/null
@@ -1,116 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-module HTTP( fetchUrl, postUrl, requestUrl, waitNextUrl, ConnectionError(..) ) where
-
-import Darcs.Global ( debugFail )
-import Version ( version )
-
-#ifdef HAVE_HTTP
-import Data.IORef ( newIORef, readIORef, writeIORef, IORef )
-import Network.HTTP
-import Network.Browser ( browse, request, setCheckForProxy, setErrHandler, setOutHandler )
-import Network.URI
-import System.IO.Error ( ioeGetErrorString )
-import System.IO.Unsafe ( unsafePerformIO )
-import Darcs.Global ( debugMessage )
-import qualified Data.ByteString as B
-import qualified Data.ByteString.Char8 as BC
-#endif
--- | Data type to represent a connection error.
--- The following are the codes from libcurl
--- which map to each of the constructors:
--- * 6  -> CouldNotResolveHost : The remote host was not resolved.
--- * 7  -> CouldNotConnectToServer : Failed to connect() to host or proxy.
--- * 28 -> OperationTimeout: the specified time-out period was reached.
-data ConnectionError = CouldNotResolveHost     |
-                       CouldNotConnectToServer |
-                       OperationTimeout
-               deriving (Eq, Read, Show)
-
-fetchUrl :: String -> IO String
-postUrl
-    :: String     -- ^ url
-    -> String     -- ^ body
-    -> String     -- ^ mime type
-    -> IO ()  -- ^ result
-
-requestUrl :: String -> FilePath -> a -> IO String
-waitNextUrl :: IO (String, String, Maybe ConnectionError)
-
-#ifdef HAVE_HTTP
-
-headers :: [Header]
-headers =  [Header HdrUserAgent $ "darcs-HTTP/" ++ version]
-
-fetchUrl url = case parseURI url of
-    Nothing -> fail $ "Invalid URI: " ++ url
-    Just uri -> do debugMessage $ "Fetching over HTTP:  "++url
-                   resp <- catch (browse $ do
-                     setCheckForProxy True
-                     setOutHandler debugMessage
-                     setErrHandler debugMessage
-                     request Request { rqURI = uri,
-                                       rqMethod = GET,
-                                       rqHeaders = headers,
-                                       rqBody = "" })
-                     (\err -> debugFail $ show err)
-                   case resp of
-                     (_, res@Response { rspCode = (2,0,0) }) -> return (rspBody res)
-                     (_, Response { rspCode = (x,y,z) }) ->
-                         debugFail $ "HTTP " ++ show x ++ show y ++ show z ++ " error getting " ++ show uri
-
-postUrl url body mime = case parseURI url of
-    Nothing -> fail $ "Invalid URI: " ++ url
-    Just uri -> do debugMessage $ "Posting to HTTP:  "++url
-                   resp <- catch (browse $ do
-                     setCheckForProxy True
-                     setOutHandler debugMessage
-                     setErrHandler debugMessage
-                     request Request { rqURI = uri,
-                                       rqMethod = POST,
-                                       rqHeaders = headers ++ [Header HdrContentType mime,
-                                                               Header HdrAccept "text/plain",
-                                                               Header HdrContentLength
-                                                                        (show $ length body) ],
-                                       rqBody = body })
-                     (\err -> debugFail $ show err)
-                   case resp of
-                     (_, res@Response { rspCode = (2,y,z) }) -> do
-                        putStrLn $ "Success 2" ++ show y ++ show z
-                        putStrLn (rspBody res)
-                        return ()
-                     (_, res@Response { rspCode = (x,y,z) }) -> do
-                        putStrLn $ rspBody res
-                        debugFail $ "HTTP " ++ show x ++ show y ++ show z ++ " error posting to " ++ show uri
-
-requestedUrl :: IORef (String, FilePath)
-requestedUrl = unsafePerformIO $ newIORef ("", "")
-
-requestUrl u f _ = do
-  (u', _) <- readIORef requestedUrl
-  if null u'
-     then do writeIORef requestedUrl (u, f)
-             return ""
-     else return "URL already requested"
-
-waitNextUrl = do
-  (u, f) <- readIORef requestedUrl
-  if null u
-     then return ("", "No URL requested", Nothing)
-     else do writeIORef requestedUrl ("", "")
-             e <- (fetchUrl u >>= \s -> B.writeFile f (BC.pack s) >> return "") `catch` h
-             let ce = case e of
-                       "timeout" -> Just OperationTimeout
-                       _         -> Nothing
-             return (u, e, ce)
-    where h = return . ioeGetErrorString
-
-#else
-
-fetchUrl _ = debugFail "Network.HTTP does not exist"
-postUrl _ _ _ = debugFail "Cannot use http POST because darcs was not compiled with Network.HTTP."
-
-requestUrl _ _ _ = debugFail "Network.HTTP does not exist"
-waitNextUrl = debugFail "Network.HTTP does not exist"
-
-#endif
diff --git a/src/IsoDate.hs b/src/IsoDate.hs
--- a/src/IsoDate.hs
+++ b/src/IsoDate.hs
@@ -118,6 +118,10 @@
 caseString      :: String -> GenParser Char a ()
 caseString cs    = mapM_ caseChar cs <?> cs
 
+-- [x,y] => x <|> y
+caseStrings :: [String] -> GenParser Char a ()
+caseStrings xs = foldl1 (<|>) $ map caseString xs
+
 -- | Match a parser at least @n@ times.
 manyN           :: Int -> GenParser a b c -> GenParser a b [c]
 manyN n p
@@ -611,7 +615,7 @@
            return $ multiplyDiff m p `addToCal` ref
   where
     beforeMod = try $ caseString "before" >> return (-1)
-    afterMod  = try $ caseString "after"  >> return 1
+    afterMod  = try $ (caseStrings ["after","since"]) >> return 1
 
 -- | English expressions for intervals of time,
 --
@@ -635,7 +639,7 @@
         end <- englishDT
         return (Just theBeginning, Just end)
    after = try $
-     do caseString "after"
+     do caseStrings ["after","since"]
         _ <- space
         start <- englishDT
         return (Just start, Nothing)
@@ -700,7 +704,7 @@
 englishDuration = try $
   do n <- option 1 $ do { x <- many1 digit; _ <- space; (return $ read x) }
      b <- base
-     optional (caseString "es" <|> caseString "s")
+     optional (caseStrings ["es","s"])
      let current = multiplyDiff n b
      next <- option noTimeDiff $ try $ do
               { optional space; _ <- char ',' ; optional space ; englishDuration }
diff --git a/src/Printer.lhs b/src/Printer.lhs
--- a/src/Printer.lhs
+++ b/src/Printer.lhs
@@ -363,7 +363,7 @@
 
 -- | '(<>)' is the concatenation operator for 'Doc's
 (<>) :: Doc -> Doc -> Doc
--- | @a '<?>' b@ is @a@ if it is not empty, else @b@.
+-- | @a '<?>' b@ is @a <> b@ if @a@ is not empty, else empty.
 (<?>) :: Doc -> Doc -> Doc
 -- | @a '<+>' b@ is @a@ followed by a space, then @b@.
 (<+>) :: Doc -> Doc -> Doc
diff --git a/src/Progress.hs b/src/Progress.hs
--- a/src/Progress.hs
+++ b/src/Progress.hs
@@ -76,7 +76,7 @@
 -- What happens if you call beginTedious twice with the same string, without
 -- calling endTedious in the meantime?
 beginTedious :: String -> IO ()
-beginTedious k = do debugMessage $ "Beginning " ++ (map toLower k)
+beginTedious k = do debugMessage $ "Beginning " ++ map toLower k
                     setProgressData k $ ProgressData { sofar = 0,
                                                        latest = Nothing,
                                                        total = Nothing }
diff --git a/src/Ssh.hs b/src/Ssh.hs
deleted file mode 100644
--- a/src/Ssh.hs
+++ /dev/null
@@ -1,287 +0,0 @@
-{-# LANGUAGE CPP, ForeignFunctionInterface #-}
-
-module Ssh (
-  copySSH, SSHCmd(..), runSSH, getSSH,
-  environmentHelpSsh, environmentHelpScp, environmentHelpSshPort,
-  remoteDarcs
-  ) where
-
-import Prelude hiding ( lookup, catch )
-import qualified Ratified( hGetContents )
-
-import System.Exit ( ExitCode(..) )
-import System.Environment ( getEnv )
-#ifndef WIN32
-import System.Posix.Process ( getProcessID )
-#else
-import Darcs.Utils ( showHexLen )
-import Data.Bits ( (.&.) )
-import System.Random ( randomIO )
-#endif
-import System.IO ( Handle, hSetBinaryMode, hPutStrLn, hGetLine, hFlush )
-import System.IO.Unsafe ( unsafePerformIO )
-import System.Directory ( doesFileExist, createDirectoryIfMissing )
-import Control.Monad ( when )
-import System.Process ( runInteractiveProcess )
-
-import Data.Map ( Map, empty, insert, lookup )
-import Data.IORef ( IORef, newIORef, readIORef, modifyIORef )
-
-import Darcs.SignalHandler ( catchNonSignal )
-import Darcs.Utils ( breakCommand, prettyException, catchall )
-import Darcs.Global ( atexit, sshControlMasterDisabled, withDebugMode )
-import Darcs.Lock ( tempdirLoc, removeFileMayNotExist )
-import Darcs.URL (SshFilePath(..), urlOf)
-import Exec ( exec, Redirects, Redirect(..), )
-import Progress ( withoutProgress, debugMessage, debugFail )
-import Darcs.Flags( RemoteDarcs(..) )
-
-import qualified Data.ByteString as B (ByteString, hGet, writeFile )
-
-{-# NOINLINE sshConnections #-}
-sshConnections :: IORef (Map String (Maybe Connection))
-sshConnections = unsafePerformIO $ newIORef empty
-
-data Connection = C { inp :: !Handle, out :: !Handle, err :: !Handle, deb :: String -> IO () }
-
--- | @withSSHConnection rdarcs destination withconnection withoutconnection@
--- performs an action on a remote host. If we are already connected to @destination@,
--- then it does @withconnection@, else @withoutconnection@.
-withSSHConnection :: String -> SshFilePath -> (Connection -> IO a) -> IO a -> IO a
-withSSHConnection rdarcs repoid withconnection withoutconnection =
-    withoutProgress $
-    do cs <- readIORef sshConnections
-       case lookup (urlOf repoid) (cs :: Map String (Maybe Connection)) of
-         Just Nothing -> withoutconnection
-         Just (Just c) -> withconnection c
-         Nothing ->
-           do mc <- do (ssh,sshargs_) <- getSSHOnly SSH
-                       let sshargs = sshargs_ ++ [sshUhost repoid, rdarcs,
-                                                  "transfer-mode","--repodir",sshRepo repoid]
-                       debugMessage $ "ssh "++unwords sshargs
-                       (i,o,e,_) <- runInteractiveProcess ssh sshargs Nothing Nothing
-                       hSetBinaryMode i True
-                       hSetBinaryMode o True
-                       l <- hGetLine o
-                       if l == "Hello user, I am darcs transfer mode"
-                           then return ()
-                           else debugFail "Couldn't start darcs transfer-mode on server"
-                       let c = C { inp = i, out = o, err = e,
-                                   deb = \s -> debugMessage ("with ssh (transfer-mode) "++sshUhost repoid++s) }
-                       modifyIORef sshConnections (insert (urlOf repoid) (Just c))
-                       return $ Just c
-                    `catchNonSignal`
-                            \e -> do debugMessage $ "Failed to start ssh connection:\n    "++
-                                                    prettyException e
-                                     severSSHConnection repoid
-                                     debugMessage $ unlines $
-                                         [ "NOTE: the server may be running a version of darcs prior to 2.0.0."
-                                         , ""
-                                         , "Installing darcs 2 on the server will speed up ssh-based commands."
-                                         ]
-                                     return Nothing
-              maybe withoutconnection withconnection mc
-
-severSSHConnection :: SshFilePath -> IO ()
-severSSHConnection x = do debugMessage $ "Severing ssh failed connection to "++(sshUhost x)
-                          modifyIORef sshConnections (insert (urlOf x) Nothing)
-
-grabSSH :: SshFilePath -> Connection -> IO B.ByteString
-grabSSH dest c = do
-  debugMessage $ "grabSSH dest=" ++ urlOf dest
-  let failwith e = do severSSHConnection dest
-                        -- hGetContents is ok here because we're
-                        -- only grabbing stderr, and we're also
-                        -- about to throw the contents.
-                      eee <- Ratified.hGetContents (err c)
-                      debugFail $ e ++ " grabbing ssh file "++
-                        urlOf dest++"/"++ file ++"\n"++eee
-      file = sshFile dest
-  deb c $ "get "++ file
-  hPutStrLn (inp c) $ "get " ++ file
-  hFlush (inp c)
-  l2 <- hGetLine (out c)
-  if l2 == "got "++file
-    then do showlen <- hGetLine (out c)
-            case reads showlen of
-              [(len,"")] -> B.hGet (out c) len
-              _ -> failwith "Couldn't get length"
-    else if l2 == "error "++file
-         then do e <- hGetLine (out c)
-                 case reads e of
-                   (msg,_):_ -> debugFail $ "Error reading file remotely:\n"++msg
-                   [] -> failwith "An error occurred"
-         else failwith "Error"
-
-sshStdErrMode :: IO Redirect
-sshStdErrMode = withDebugMode $ \amdebugging ->
-                return $ if amdebugging then AsIs else Null
-
-remoteDarcs :: RemoteDarcs -> String
-remoteDarcs DefaultRemoteDarcs = "darcs"
-remoteDarcs (RemoteDarcs x) = x
-
-copySSH :: RemoteDarcs -> SshFilePath -> FilePath -> IO ()
-copySSH remote dest to | rdarcs <- remoteDarcs remote = do
-  debugMessage $ "copySSH file: " ++ urlOf dest
-  withSSHConnection rdarcs dest (\c -> grabSSH dest c >>= B.writeFile to) $
-              do let u = escape_dollar $ urlOf dest
-                 stderr_behavior <- sshStdErrMode
-                 r <- runSSH SCP dest [u,to] (AsIs,AsIs,stderr_behavior)
-                 when (r /= ExitSuccess) $
-                      debugFail $ "(scp) failed to fetch: " ++ u
-    where {- '$' in filenames is troublesome for scp, for some reason.. -}
-          escape_dollar :: String -> String
-          escape_dollar = concatMap tr
-           where tr '$' = "\\$"
-                 tr c = [c]
-
--- ---------------------------------------------------------------------
--- older ssh helper functions
--- ---------------------------------------------------------------------
-
-data SSHCmd = SSH | SCP | SFTP
-
-instance Show SSHCmd where
-  show SSH  = "ssh"
-  show SCP  = "scp"
-  show SFTP = "sftp"
-
-runSSH :: SSHCmd -> SshFilePath -> [String] -> Redirects -> IO ExitCode
-runSSH cmd remoteAddr postArgs redirs =
- do (ssh, args) <- getSSH cmd remoteAddr
-    exec ssh (args ++ [sshUhost remoteAddr] ++ postArgs) redirs
-
--- | Return the command and arguments needed to run an ssh command
---   along with any extra features like use of the control master.
---   See 'getSSHOnly'
-getSSH :: SSHCmd -> SshFilePath -- ^ remote path
-       -> IO (String, [String])
-getSSH cmd remoteAddr =
- do (ssh, ssh_args) <- getSSHOnly cmd
-    cm_args <- if sshControlMasterDisabled
-               then return []
-               else do -- control master
-                       cmPath <- controlMasterPath remoteAddr
-                       hasLaunchedCm <- doesFileExist cmPath
-                       when (not hasLaunchedCm) $ launchSSHControlMaster remoteAddr
-                       hasCmFeature <- doesFileExist cmPath
-                       return $ if hasCmFeature then [ "-o ControlPath=" ++ cmPath ] else []
-    let verbosity = case cmd of
-                    SCP  -> ["-q"] -- (p)scp is the only one that recognises -q
-                                   -- sftp and (p)sftp do not, and plink neither
-                    _    -> []
-    --
-    return (ssh, verbosity ++ ssh_args ++ cm_args)
-
--- | Return the command and arguments needed to run an ssh command.
---   First try the appropriate darcs environment variable and SSH_PORT
---   defaulting to "ssh" and no specified port.
-getSSHOnly :: SSHCmd -> IO (String, [String])
-getSSHOnly cmd =
- do ssh_command <- getEnv (evar cmd) `catchall` return (show cmd)
-    -- port
-    port <- (portFlag cmd `fmap` getEnv "SSH_PORT") `catchall` return []
-    let (ssh, ssh_args) = breakCommand ssh_command
-    --
-    return (ssh, ssh_args ++ port)
-    where
-     evar SSH  = "DARCS_SSH"
-     evar SCP  = "DARCS_SCP"
-     evar SFTP = "DARCS_SFTP"
-     portFlag SSH  x = ["-p", x]
-     portFlag SCP  x = ["-P", x]
-     portFlag SFTP x = ["-oPort="++x]
-
-environmentHelpSsh :: ([String], [String])
-environmentHelpSsh = (["DARCS_SSH"], [
- "Repositories of the form [user@]host:[dir] are taken to be remote",
- "repositories, which Darcs accesses with the external program ssh(1).",
- "",
- "The environment variable $DARCS_SSH can be used to specify an",
- "alternative SSH client.  Arguments may be included, separated by",
- "whitespace.  The value is not interpreted by a shell, so shell",
- "constructs cannot be used; in particular, it is not possible for the",
- "program name to contain whitespace by using quoting or escaping."])
-
-environmentHelpScp :: ([String], [String])
-environmentHelpScp = (["DARCS_SCP", "DARCS_SFTP"], [
- "When reading from a remote repository, Darcs will attempt to run",
- "`darcs transfer-mode' on the remote host.  This will fail if the",
- "remote host only has Darcs 1 installed, doesn't have Darcs installed",
- "at all, or only allows SFTP.",
- "",
- "If transfer-mode fails, Darcs will fall back on scp(1) and sftp(1).",
- "The commands invoked can be customized with the environment variables",
- "$DARCS_SCP and $DARCS_SFTP respectively, which behave like $DARCS_SSH.",
- "If the remote end allows only sftp, try setting DARCS_SCP=sftp."])
-
-environmentHelpSshPort :: ([String], [String])
-environmentHelpSshPort = (["SSH_PORT"], [
- "If this environment variable is set, it will be used as the port",
- "number for all SSH calls made by Darcs (when accessing remote",
- "repositories over SSH).  This is useful if your SSH server does not",
- "run on the default port, and your SSH client does not support",
- "ssh_config(5).  OpenSSH users will probably prefer to put something",
- "like `Host *.example.net Port 443' into their ~/.ssh/config file."])
-
--- | Return True if this version of ssh has a ControlMaster feature
--- The ControlMaster functionality allows for ssh multiplexing
-hasSSHControlMaster :: IO Bool
-hasSSHControlMaster = do
-  (ssh, _) <- getSSHOnly SSH
-  -- If ssh has the ControlMaster feature, it will recognise the
-  -- the -O flag, but exit with status 255 because of the nonsense
-  -- command.  If it does not have the feature, it will simply dump
-  -- a help message on the screen and exit with 1.
-  sx <- exec ssh ["-O", "an_invalid_command"] (Null,Null,Null)
-  case sx of
-    ExitFailure 255 -> return True
-    _ -> return False
-
--- | Launch an SSH control master in the background, if available.
---   We don't have to wait for it or anything.
---   Note also that this will cleanup after itself when darcs exits
-launchSSHControlMaster :: SshFilePath -> IO ()
-launchSSHControlMaster dest = do
-  hasMaster <- hasSSHControlMaster
-  when hasMaster $ do
-    (ssh, ssh_args) <- getSSHOnly SSH
-    cmPath <- controlMasterPath dest
-    removeFileMayNotExist cmPath
-    -- -f : put ssh in the background once it succeeds in logging you in
-    -- -M : launch as the control master for addr
-    -- -N : don't run any commands
-    -- -S : use cmPath as the ControlPath.  Equivalent to -oControlPath=
--- Warning:  A do-notation statement discarded a result of type ExitCode.
-    _ <- exec ssh (ssh_args ++ [sshUhost dest, "-S", cmPath, "-N", "-f", "-M"]) (Null,Null,AsIs)
-    atexit $ exitSSHControlMaster dest
-    return ()
-
--- | Tell the SSH control master for a given path to exit.
-exitSSHControlMaster :: SshFilePath -> IO ()
-exitSSHControlMaster addr = do
-  (ssh, ssh_args) <- getSSHOnly SSH
-  cmPath <- controlMasterPath addr
--- Warning:  A do-notation statement discarded a result of type ExitCode.
-  _ <- exec ssh (ssh_args ++ [sshUhost addr, "-S", cmPath, "-O", "exit"]) (Null,Null,Null)
-  return ()
-
--- | Create the directory ssh control master path for a given address
-controlMasterPath :: SshFilePath -- ^ remote path (foo\@bar.com:file is ok; the file part with be stripped)
-                  -> IO FilePath
-controlMasterPath dest = do
-  let addr = sshUhost dest
-  tmp <- (fmap (/// ".darcs") $ getEnv "HOME") `catchall` tempdirLoc
-#ifdef WIN32
-  r <- randomIO
-  let suffix = (showHexLen 6 (r .&. 0xFFFFFF :: Int))
-#else
-  suffix <- show `fmap` getProcessID
-#endif
-  let tmpDarcsSsh = tmp /// "darcs-ssh"
-  createDirectoryIfMissing True tmpDarcsSsh
-  return $ tmpDarcsSsh /// addr ++ suffix
-
-(///) :: FilePath -> FilePath -> FilePath
-d /// f = d ++ "/" ++ f
diff --git a/src/URL.hs b/src/URL.hs
--- a/src/URL.hs
+++ b/src/URL.hs
@@ -4,16 +4,12 @@
              disableHTTPPipelining, maxPipelineLength,
              waitUrl, Cachable(Cachable, Uncachable, MaxAge),
              environmentHelpProxy, environmentHelpProxyPassword,
-             ConnectionError
+             ConnectionError(..),
            ) where
 
 import Data.IORef ( newIORef, readIORef, writeIORef, IORef )
 import Data.Map ( Map )
-import Data.List ( delete )
 import qualified Data.Map as Map
-#ifdef HAVE_CURL
-import Control.Exception.Extensible ( bracket )
-#endif
 import System.Directory ( copyFile )
 import System.IO.Unsafe ( unsafePerformIO )
 import Control.Concurrent ( forkIO )
@@ -22,10 +18,6 @@
 import Control.Monad ( unless, when )
 import Control.Monad.Trans ( liftIO )
 import Control.Monad.State ( evalStateT, get, modify, put, StateT )
-import Foreign.C.Types ( CInt )
-#ifdef HAVE_CURL
-import Foreign.C.Types ( CLong )
-#endif
 
 import Workaround ( renameFile )
 import Darcs.Global ( atexit )
@@ -34,64 +26,18 @@
 
 import Numeric ( showHex )
 import System.Random ( randomRIO )
-import HTTP ( ConnectionError(..))
+import URL.Request
 
 #ifdef HAVE_CURL
-import Foreign.C.String ( withCString, peekCString, CString )
-import Foreign.Ptr
-import Foreign.Marshal.Alloc
-import Foreign.Storable
+import qualified URL.Curl as Curl
 #elif defined(HAVE_HTTP)
-import qualified HTTP ( requestUrl, waitNextUrl )
+import qualified URL.HTTP as HTTP 
 #else
 import Progress ( debugFail )
 import qualified HTTP ( requestUrl, waitNextUrl )
 #endif
 #include "impossible.h"
 
-data UrlRequest = UrlRequest { url :: String
-                             , file :: FilePath
-                             , cachable :: Cachable
-                             , priority :: Priority }
-
-data Cachable = Cachable | Uncachable | MaxAge !CInt
-                deriving (Show, Eq)
-
-data UrlState = UrlState { inProgress :: Map String ( FilePath
-                                                    , [FilePath]
-                                                    , Cachable )
-                         , waitToStart :: Q String
-                         , pipeLength :: Int
-                         , randomJunk :: String }
-
-data Q a = Q [a] [a]
-
-readQ :: Q a -> Maybe (a, Q a)
-readQ (Q (x:xs) ys) = Just (x, Q xs ys)
-readQ (Q [] ys) = do x:xs <- Just $ reverse ys
-                     Just (x, Q xs [])
-
-insertQ :: a -> Q a -> Q a
-insertQ y (Q xs ys) = Q xs (y:ys)
-
-pushQ :: a -> Q a -> Q a
-pushQ x (Q xs ys) = Q (x:xs) ys
-
-deleteQ :: Eq a => a -> Q a -> Q a
-deleteQ x (Q xs ys) = Q (delete x xs) (delete x ys)
-
-elemQ :: Eq a => a -> Q a -> Bool
-elemQ x (Q xs ys) = x `elem` xs || x `elem` ys
-
-emptyQ :: Q a
-emptyQ = Q [] []
-
-nullQ :: Q a -> Bool
-nullQ (Q [] []) = True
-nullQ _         = False
-
-data Priority = High | Low deriving Eq
-
 {-# NOINLINE maxPipelineLengthRef #-}
 maxPipelineLengthRef :: IORef Int
 maxPipelineLengthRef = unsafePerformIO $ do
@@ -118,39 +64,56 @@
   _ <- forkIO (urlThread ch)
   return ch
 
+-- ----------------------------------------------------------------------
+-- urlThread
+-- ----------------------------------------------------------------------
+
+type UrlM a = StateT UrlState IO a
+
 urlThread :: Chan UrlRequest -> IO ()
 urlThread ch = do junk <- flip showHex "" `fmap` randomRIO rrange
-                  evalStateT urlThread' (UrlState Map.empty emptyQ 0 junk)
+                  evalStateT (urlThread' ch) (UrlState Map.empty emptyQ 0 junk)
     where rrange = (0, 2^(128 :: Integer) :: Integer)
-          urlThread' = do
+
+-- | Internal to urlThread
+urlThread' :: Chan UrlRequest -> UrlM ()
+urlThread' ch = do
             empty <- liftIO $ isEmptyChan ch
             st <- get
             let l = pipeLength st
                 w = waitToStart st
             reqs <- if not empty || (nullQ w && l == 0)
-                    then liftIO readAllRequests
+                    then liftIO (readAllRequests ch)
                     else return []
             mapM_ addReq reqs
             checkWaitToStart
             waitNextUrl
-            urlThread'
-          readAllRequests = do
+            urlThread' ch
+
+-- | Internal to urlThread
+readAllRequests :: Chan UrlRequest -> IO [UrlRequest]
+readAllRequests ch = do
             r <- readChan ch
             debugMessage $ "URL.urlThread ("++url r++"\n"++
                            "            -> "++file r++")"
             empty <- isEmptyChan ch
             reqs <- if not empty
-                    then readAllRequests
+                    then readAllRequests ch
                     else return []
             return (r:reqs)
-          addReq r = do
-            let u = url r
-                f = file r
-                c = cachable r
-            d <- liftIO $ alreadyDownloaded u
-            if d
-               then dbg "Ignoring UrlRequest of URL that is already downloaded."
-               else do
+
+-- | Internal to urlThread
+addReq :: UrlRequest -> UrlM ()
+addReq r = do
+  d <- liftIO (alreadyDownloaded u)
+  if d
+     then dbg "Ignoring UrlRequest of URL that is already downloaded."
+     else reallyAdd
+ where
+   f = file r
+   c = cachable r
+   u = url r
+   reallyAdd = do
                  st <- get
                  let p = inProgress st
                      w = waitToStart st
@@ -175,12 +138,18 @@
                                    dbg "Adding new file to existing UrlRequest."
                         else dbg "Ignoring UrlRequest of file that's already queued."
                    _ -> put new_st
-          alreadyDownloaded u = do
-            n <- liftIO $ withMVar urlNotifications (return . (Map.lookup u))
+
+
+-- | Internal to urlThread
+alreadyDownloaded :: String -> IO Bool
+alreadyDownloaded u = do
+            n <- withMVar urlNotifications (return . (Map.lookup u))
             case n of
               Just v  -> not `fmap` isEmptyMVar v
               Nothing -> return True
 
+-- ----------------------------------------------------------------------
+
 checkWaitToStart :: StateT UrlState IO ()
 checkWaitToStart = do
   st <- get
@@ -286,13 +255,6 @@
 minCachable _          (MaxAge b) = MaxAge b
 minCachable _          _          = Cachable
 
-#ifdef HAVE_CURL
-cachableToInt :: Cachable -> CInt
-cachableToInt Cachable = -1
-cachableToInt Uncachable = 0
-cachableToInt (MaxAge n) = n
-#endif
-
 disableHTTPPipelining :: IO ()
 disableHTTPPipelining = writeIORef maxPipelineLengthRef 1
 
@@ -303,55 +265,10 @@
 
 #ifdef HAVE_CURL
 
-setDebugHTTP = curl_enable_debug
-
-requestUrl u f cache =
-    withCString u $ \ustr ->
-    withCString f $ \fstr -> do
-      err <- curl_request_url ustr fstr (cachableToInt cache) >>= peekCString
-      return err
-
-waitNextUrl' =
-  bracket malloc free $ \ errorPointer ->
-  bracket malloc free $ \ httpErrorPointer -> do
-    e <- curl_wait_next_url errorPointer httpErrorPointer >>= peekCString
-    ce <- do
-           errorNum <- peek errorPointer
-           if not (null e)
-             then return $
-              case errorNum of
-                6  -> Just CouldNotResolveHost
-                7  -> Just CouldNotConnectToServer
-                28 -> Just OperationTimeout
-                _  -> Nothing
-             else do
-              when (errorNum == 90 ) $ debugMessage "The environment variable DARCS_CONNECTION_TIMEOUT is not a number"
-              return Nothing
-    u <- curl_last_url >>= peekCString
-    httpErrorCode <- peek httpErrorPointer
-    let detailedErrorMessage = if httpErrorCode > 0
-                               then e ++ " " ++ show httpErrorCode
-                               else e
-    return (u, detailedErrorMessage, ce)
-
-pipeliningEnabled = do
-  r <- curl_pipelining_enabled
-  return $ r /= 0
-
-foreign import ccall "hscurl.h curl_request_url"
-  curl_request_url :: CString -> CString -> CInt -> IO CString
-
-foreign import ccall "hscurl.h curl_wait_next_url"
-  curl_wait_next_url :: Ptr CInt -> Ptr CLong-> IO CString
-
-foreign import ccall "hscurl.h curl_last_url"
-  curl_last_url :: IO CString
-
-foreign import ccall "hscurl.h curl_enable_debug"
-  curl_enable_debug :: IO ()
-
-foreign import ccall "hscurl.h curl_pipelining_enabled"
-  curl_pipelining_enabled :: IO CInt
+setDebugHTTP = Curl.setDebugHTTP
+requestUrl = Curl.requestUrl
+waitNextUrl' = Curl.waitNextUrl
+pipeliningEnabled = Curl.pipeliningEnabled
 
 #elif defined(HAVE_HTTP)
 
diff --git a/src/URL/Curl.hs b/src/URL/Curl.hs
new file mode 100644
--- /dev/null
+++ b/src/URL/Curl.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE CPP, ForeignFunctionInterface #-}
+
+module URL.Curl where
+
+import Control.Exception.Extensible ( bracket )
+import Control.Monad ( when )
+import Foreign.C.Types ( CLong, CInt )
+
+import Progress ( debugMessage )
+
+import URL.Request
+
+import Foreign.C.String ( withCString, peekCString, CString )
+import Foreign.Ptr
+import Foreign.Marshal.Alloc
+import Foreign.Storable
+
+setDebugHTTP :: IO ()
+setDebugHTTP = curl_enable_debug
+
+requestUrl :: String -> FilePath -> Cachable -> IO String
+requestUrl u f cache =
+    withCString u $ \ustr ->
+    withCString f $ \fstr -> do
+      err <- curl_request_url ustr fstr (cachableToInt cache) >>= peekCString
+      return err
+
+waitNextUrl :: IO (String, String, Maybe ConnectionError)
+waitNextUrl =
+  bracket malloc free $ \ errorPointer ->
+  bracket malloc free $ \ httpErrorPointer -> do
+    e <- curl_wait_next_url errorPointer httpErrorPointer >>= peekCString
+    ce <- do
+           errorNum <- peek errorPointer
+           if not (null e)
+             then return $
+              case errorNum of
+                6  -> Just CouldNotResolveHost
+                7  -> Just CouldNotConnectToServer
+                28 -> Just OperationTimeout
+                _  -> Nothing
+             else do
+              when (errorNum == 90 ) $ debugMessage "The environment variable DARCS_CONNECTION_TIMEOUT is not a number"
+              return Nothing
+    u <- curl_last_url >>= peekCString
+    httpErrorCode <- peek httpErrorPointer
+    let detailedErrorMessage = if httpErrorCode > 0
+                               then e ++ " " ++ show httpErrorCode
+                               else e
+    return (u, detailedErrorMessage, ce)
+
+pipeliningEnabled :: IO Bool
+pipeliningEnabled = do
+  r <- curl_pipelining_enabled
+  return $ r /= 0
+
+cachableToInt :: Cachable -> CInt
+cachableToInt Cachable = -1
+cachableToInt Uncachable = 0
+cachableToInt (MaxAge n) = n
+
+foreign import ccall "hscurl.h curl_request_url"
+  curl_request_url :: CString -> CString -> CInt -> IO CString
+
+foreign import ccall "hscurl.h curl_wait_next_url"
+  curl_wait_next_url :: Ptr CInt -> Ptr CLong-> IO CString
+
+foreign import ccall "hscurl.h curl_last_url"
+  curl_last_url :: IO CString
+
+foreign import ccall "hscurl.h curl_enable_debug"
+  curl_enable_debug :: IO ()
+
+foreign import ccall "hscurl.h curl_pipelining_enabled"
+  curl_pipelining_enabled :: IO CInt
diff --git a/src/URL/HTTP.hs b/src/URL/HTTP.hs
new file mode 100644
--- /dev/null
+++ b/src/URL/HTTP.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE CPP #-}
+
+module URL.HTTP( fetchUrl, postUrl, requestUrl, waitNextUrl ) where
+
+import Darcs.Global ( debugFail )
+import Version ( version )
+
+import URL.Request ( ConnectionError(..) )
+
+#ifdef HAVE_HTTP
+import Data.IORef ( newIORef, readIORef, writeIORef, IORef )
+import Network.HTTP
+import Network.Browser ( browse, request, setCheckForProxy, setErrHandler, setOutHandler )
+import Network.URI
+import System.IO.Error ( ioeGetErrorString )
+import System.IO.Unsafe ( unsafePerformIO )
+import Darcs.Global ( debugMessage )
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Char8 as BC
+#endif
+
+fetchUrl :: String -> IO String
+postUrl
+    :: String     -- ^ url
+    -> String     -- ^ body
+    -> String     -- ^ mime type
+    -> IO ()  -- ^ result
+
+requestUrl :: String -> FilePath -> a -> IO String
+waitNextUrl :: IO (String, String, Maybe ConnectionError)
+
+#ifdef HAVE_HTTP
+
+headers :: [Header]
+headers =  [Header HdrUserAgent $ "darcs-HTTP/" ++ version]
+
+fetchUrl url = case parseURI url of
+    Nothing -> fail $ "Invalid URI: " ++ url
+    Just uri -> do debugMessage $ "Fetching over HTTP:  "++url
+                   resp <- catch (browse $ do
+                     setCheckForProxy True
+                     setOutHandler debugMessage
+                     setErrHandler debugMessage
+                     request Request { rqURI = uri,
+                                       rqMethod = GET,
+                                       rqHeaders = headers,
+                                       rqBody = "" })
+                     (\err -> debugFail $ show err)
+                   case resp of
+                     (_, res@Response { rspCode = (2,0,0) }) -> return (rspBody res)
+                     (_, Response { rspCode = (x,y,z) }) ->
+                         debugFail $ "HTTP " ++ show x ++ show y ++ show z ++ " error getting " ++ show uri
+
+postUrl url body mime = case parseURI url of
+    Nothing -> fail $ "Invalid URI: " ++ url
+    Just uri -> do debugMessage $ "Posting to HTTP:  "++url
+                   resp <- catch (browse $ do
+                     setCheckForProxy True
+                     setOutHandler debugMessage
+                     setErrHandler debugMessage
+                     request Request { rqURI = uri,
+                                       rqMethod = POST,
+                                       rqHeaders = headers ++ [Header HdrContentType mime,
+                                                               Header HdrAccept "text/plain",
+                                                               Header HdrContentLength
+                                                                        (show $ length body) ],
+                                       rqBody = body })
+                     (\err -> debugFail $ show err)
+                   case resp of
+                     (_, res@Response { rspCode = (2,y,z) }) -> do
+                        putStrLn $ "Success 2" ++ show y ++ show z
+                        putStrLn (rspBody res)
+                        return ()
+                     (_, res@Response { rspCode = (x,y,z) }) -> do
+                        putStrLn $ rspBody res
+                        debugFail $ "HTTP " ++ show x ++ show y ++ show z ++ " error posting to " ++ show uri
+
+requestedUrl :: IORef (String, FilePath)
+requestedUrl = unsafePerformIO $ newIORef ("", "")
+
+requestUrl u f _ = do
+  (u', _) <- readIORef requestedUrl
+  if null u'
+     then do writeIORef requestedUrl (u, f)
+             return ""
+     else return "URL already requested"
+
+waitNextUrl = do
+  (u, f) <- readIORef requestedUrl
+  if null u
+     then return ("", "No URL requested", Nothing)
+     else do writeIORef requestedUrl ("", "")
+             e <- (fetchUrl u >>= \s -> B.writeFile f (BC.pack s) >> return "") `catch` h
+             let ce = case e of
+                       "timeout" -> Just OperationTimeout
+                       _         -> Nothing
+             return (u, e, ce)
+    where h = return . ioeGetErrorString
+
+#else
+
+fetchUrl _ = debugFail "Network.HTTP does not exist"
+postUrl _ _ _ = debugFail "Cannot use http POST because darcs was not compiled with Network.HTTP."
+
+requestUrl _ _ _ = debugFail "Network.HTTP does not exist"
+waitNextUrl = debugFail "Network.HTTP does not exist"
+
+#endif
diff --git a/src/URL/Request.hs b/src/URL/Request.hs
new file mode 100644
--- /dev/null
+++ b/src/URL/Request.hs
@@ -0,0 +1,59 @@
+module URL.Request where
+
+import Data.Map ( Map )
+import Data.List ( delete )
+import Foreign.C.Types ( CInt )
+
+data UrlRequest = UrlRequest { url :: String
+                             , file :: FilePath
+                             , cachable :: Cachable
+                             , priority :: Priority }
+
+data Cachable = Cachable | Uncachable | MaxAge !CInt
+                deriving (Show, Eq)
+
+data UrlState = UrlState { inProgress :: Map String ( FilePath
+                                                    , [FilePath]
+                                                    , Cachable )
+                         , waitToStart :: Q String
+                         , pipeLength :: Int
+                         , randomJunk :: String }
+
+data Q a = Q [a] [a]
+
+readQ :: Q a -> Maybe (a, Q a)
+readQ (Q (x:xs) ys) = Just (x, Q xs ys)
+readQ (Q [] ys) = do x:xs <- Just $ reverse ys
+                     Just (x, Q xs [])
+
+insertQ :: a -> Q a -> Q a
+insertQ y (Q xs ys) = Q xs (y:ys)
+
+pushQ :: a -> Q a -> Q a
+pushQ x (Q xs ys) = Q (x:xs) ys
+
+deleteQ :: Eq a => a -> Q a -> Q a
+deleteQ x (Q xs ys) = Q (delete x xs) (delete x ys)
+
+elemQ :: Eq a => a -> Q a -> Bool
+elemQ x (Q xs ys) = x `elem` xs || x `elem` ys
+
+emptyQ :: Q a
+emptyQ = Q [] []
+
+nullQ :: Q a -> Bool
+nullQ (Q [] []) = True
+nullQ _         = False
+
+data Priority = High | Low deriving Eq
+
+-- | Data type to represent a connection error.
+-- The following are the codes from libcurl
+-- which map to each of the constructors:
+-- * 6  -> CouldNotResolveHost : The remote host was not resolved.
+-- * 7  -> CouldNotConnectToServer : Failed to connect() to host or proxy.
+-- * 28 -> OperationTimeout: the specified time-out period was reached.
+data ConnectionError = CouldNotResolveHost     |
+                       CouldNotConnectToServer |
+                       OperationTimeout
+               deriving (Eq, Read, Show)
diff --git a/src/gadts.h b/src/gadts.h
--- a/src/gadts.h
+++ b/src/gadts.h
@@ -2,12 +2,14 @@
 
 #define C(contexts) contexts
 #define FORALL(types) forall types.
-#define PATCHKIND * -> * -> *
+#define PATCHKIND (* -> * -> *)
+#define SEALEDPATCHKIND (* -> *)
 
 #else
 
 #define C(contexts)
 #define FORALL(types)
 #define PATCHKIND *
+#define SEALEDPATCHKIND *
 
 #endif
diff --git a/src/system_encoding.c b/src/system_encoding.c
new file mode 100644
--- /dev/null
+++ b/src/system_encoding.c
@@ -0,0 +1,10 @@
+#include "system_encoding.h"
+
+char* get_system_encoding() {
+#ifdef WIN32
+  return "utf8";
+#else
+  setlocale(LC_ALL,"");
+  return nl_langinfo(CODESET);
+#endif
+}
diff --git a/src/system_encoding.h b/src/system_encoding.h
new file mode 100644
--- /dev/null
+++ b/src/system_encoding.h
@@ -0,0 +1,11 @@
+#ifndef __SYSTEM_ENCODING__
+#define __SYSTEM_ENCODING__
+
+#ifndef WIN32
+#include <langinfo.h>
+#include <locale.h>
+#endif
+
+char* get_system_encoding();
+
+#endif
diff --git a/src/test.hs b/src/test.hs
--- a/src/test.hs
+++ b/src/test.hs
@@ -10,24 +10,21 @@
 import qualified Data.ByteString.Char8 as B
 import System.Console.CmdLib
 import System.FilePath( takeDirectory, takeBaseName, isAbsolute )
-import System.IO( hSetBinaryMode, stdin, stdout, stderr )
+import System.IO( hSetBinaryMode, hSetBuffering, BufferMode( NoBuffering ), stdin, stdout, stderr )
 import Test.Framework.Providers.API
 import Test.Framework
 import Shellish hiding ( liftIO, run )
 import qualified Shellish
 
 doUnit :: IO [Test]
-doUnit = do
-  putStr Darcs.Test.Patch.testInfo
-  return unitTests
+doUnit = return unitTests
 
 -- | This is the big list of tests that will be run using testrunner.
 unitTests :: [Test]
 unitTests =
   [ Darcs.Test.Email.testSuite
   , Darcs.Test.Misc.testSuite
-  , Darcs.Test.Patch.testSuite
-  ]
+  ] ++ Darcs.Test.Patch.testSuite
 
 -- ----------------------------------------------------------------------
 -- shell tests
@@ -174,6 +171,7 @@
 
 main :: IO ()
 main = do hSetBinaryMode stdout True
+          hSetBuffering stdout NoBuffering
           hSetBinaryMode stderr True
           hSetBinaryMode stdin True
           getArgs >>= execute DarcsTest
diff --git a/tests/add_permissions.sh b/tests/add_permissions.sh
new file mode 100644
--- /dev/null
+++ b/tests/add_permissions.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+## Darcs should refuse to add an unreadable file, because unreadable
+## files aren't recordable.
+##
+## Copyright (C) 2005  Mark Stosberg
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. lib
+
+abort_windows                   # does not work on Windows.
+mkdir temp1
+cd temp1
+darcs initialize
+touch unreadable
+chmod a-r unreadable      # Make the file unreadable.
+not darcs add unreadable 2> log
+fgrep -i 'permission denied' log
+# Testing by hand with a directory works, but darcs-test gets
+# stuck by having an unreadable subdir.
+#mkdir d
+#chmod a-r d
+#not darcs add --debug --verbose d
+#fgrep -i 'permission denied' log
diff --git a/tests/amend-record-back-up.sh b/tests/amend-record-back-up.sh
new file mode 100644
--- /dev/null
+++ b/tests/amend-record-back-up.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env bash
+## Copyright (C) 2011 Ganesh Sittampalam <ganesh@earth.li>
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+
+
+. lib                           # Load some portability helpers.
+darcs init      --repo amend
+
+cd amend
+echo 'file1' > file1
+darcs record -lam 'file1'
+
+echo 'file2' > file2
+darcs record -lam 'file2'
+
+echo 'file2:amended' > file2
+echo 'nkya' | darcs amend-record
+
+darcs changes -p 'file2' -v | grep amended
diff --git a/tests/amend-unrecord.sh b/tests/amend-unrecord.sh
new file mode 100644
--- /dev/null
+++ b/tests/amend-unrecord.sh
@@ -0,0 +1,54 @@
+#!/usr/bin/env bash
+## Test for amend-record --unrecord
+##
+## Copyright (C) 2012  Ganesh Sittampalam
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. lib                  # Load some portability helpers.
+darcs init      --repo R        # Create our test repo.
+
+cd R
+
+(echo x ; echo y) > foo
+darcs add foo
+darcs rec -am "add foo"
+
+(echo 1 ; echo x ; echo y ; echo 2) > foo
+darcs rec -am "insert 1 and 2"
+
+(echo yyn) | darcs amend-record --unrecord
+(echo x ; echo y ; echo 2) > foo.expected
+darcs show contents foo | diff -q foo.expected -
+
+(echo yeny) | DARCS_EDITOR="sed -i -e s/2/2j/" darcs amend-record --unrecord
+(echo x ; echo y ; echo 2j) > foo.expected
+darcs show contents foo | diff -q foo.expected -
+
+echo 'ugh' > bar
+darcs add bar
+echo y | darcs amend-record -a
+darcs show contents bar | diff -q bar -
+
+echo y | darcs amend-record --unrecord -a foo
+(echo x ; echo y) > foo.expected
+darcs show contents foo | diff -q foo.expected -
+darcs show contents bar | diff -q bar -
diff --git a/tests/bin/hspwd.hi b/tests/bin/hspwd.hi
Binary files a/tests/bin/hspwd.hi and b/tests/bin/hspwd.hi differ
diff --git a/tests/bin/hspwd.hs b/tests/bin/hspwd.hs
--- a/tests/bin/hspwd.hs
+++ b/tests/bin/hspwd.hs
@@ -1,5 +1,5 @@
 module Main where
 
-import Directory ( getCurrentDirectory )
+import System.Directory ( getCurrentDirectory )
 
 main = getCurrentDirectory >>= putStr
diff --git a/tests/bin/hspwd.o b/tests/bin/hspwd.o
Binary files a/tests/bin/hspwd.o and b/tests/bin/hspwd.o differ
diff --git a/tests/bin/trackdown-bisect-helper.hi b/tests/bin/trackdown-bisect-helper.hi
Binary files a/tests/bin/trackdown-bisect-helper.hi and b/tests/bin/trackdown-bisect-helper.hi differ
diff --git a/tests/bin/trackdown-bisect-helper.hs b/tests/bin/trackdown-bisect-helper.hs
--- a/tests/bin/trackdown-bisect-helper.hs
+++ b/tests/bin/trackdown-bisect-helper.hs
@@ -16,8 +16,8 @@
 
 import Control.Monad
 import System.IO
-import System
-import System.Random
+import System.Environment
+import System.Process
 import Data.List
 import Control.Exception
 
diff --git a/tests/bin/trackdown-bisect-helper.o b/tests/bin/trackdown-bisect-helper.o
Binary files a/tests/bin/trackdown-bisect-helper.o and b/tests/bin/trackdown-bisect-helper.o differ
diff --git a/tests/check-read-only.sh b/tests/check-read-only.sh
new file mode 100644
--- /dev/null
+++ b/tests/check-read-only.sh
@@ -0,0 +1,38 @@
+#!/usr/bin/env bash
+## Test for issue2001: check is not read-only 
+##
+## Copyright (C) 2011 Florent Becker
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. lib                           # Load some portability helpers.
+darcs init      --repo R        # Create our test repos.
+
+cd R
+mkdir d e                       # Change the working tree.
+echo 'Example content.' > d/f
+darcs record -lam 'Add d/f and e.'
+darcs mv d/f e/
+darcs record -am 'Move d/f to e/f.'
+rm _darcs/pristine.hashed/*     # Make the repository bogus
+cp -r _darcs archive
+not darcs check
+diff -r _darcs archive
diff --git a/tests/failing-add_permissions.sh b/tests/failing-add_permissions.sh
deleted file mode 100644
--- a/tests/failing-add_permissions.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env bash
-## Darcs should refuse to add an unreadable file, because unreadable
-## files aren't recordable.
-##
-## Copyright (C) 2005  Mark Stosberg
-##
-## Permission is hereby granted, free of charge, to any person
-## obtaining a copy of this software and associated documentation
-## files (the "Software"), to deal in the Software without
-## restriction, including without limitation the rights to use, copy,
-## modify, merge, publish, distribute, sublicense, and/or sell copies
-## of the Software, and to permit persons to whom the Software is
-## furnished to do so, subject to the following conditions:
-##
-## The above copyright notice and this permission notice shall be
-## included in all copies or substantial portions of the Software.
-##
-## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-## SOFTWARE.
-
-. lib
-
-abort_windows                   # does not work on Windows.
-rm -rf temp1                    # Another script may have left a mess.
-darcs initialize --repodir temp1
-touch temp1/unreadable
-chmod a-r temp1/unreadable      # Make the file unreadable.
-not darcs add --repodir temp1 no_perms.txt 2>temp1/log
-fgrep -i 'permission denied' temp1/log
-rm -rf temp1
diff --git a/tests/failing-index-argument.sh b/tests/failing-index-argument.sh
new file mode 100644
--- /dev/null
+++ b/tests/failing-index-argument.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+## Currently tests if --index works on every command that is supposed to
+## support it. The information about what command should support --index is
+## taken from http://darcs.net/manual/Darcs_commands.html
+##
+## Copyright (C) 2011 Andreas Brandt
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. lib                           # Load some portability helpers.
+
+rm -rf temp
+mkdir -p temp
+cd temp
+
+darcs init
+touch a
+darcs add a
+echo "test" >> a
+darcs record -a -m "record a" a
+darcs annotate --index 1
+darcs changes --index 1
+darcs diff --index 1
+darcs show contents --index 1 a
+
+#### failing tests
+darcs show files --index 1 a
+darcs dist --index 1
diff --git a/tests/failing-issue1332_add_r_boring.sh b/tests/failing-issue1332_add_r_boring.sh
deleted file mode 100644
--- a/tests/failing-issue1332_add_r_boring.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env bash
-## Test for issue1332 - add -r ignores --boring
-##
-## Copyright (C) 2009 Eric Kow
-##
-## Permission is hereby granted, free of charge, to any person
-## obtaining a copy of this software and associated documentation
-## files (the "Software"), to deal in the Software without
-## restriction, including without limitation the rights to use, copy,
-## modify, merge, publish, distribute, sublicense, and/or sell copies
-## of the Software, and to permit persons to whom the Software is
-## furnished to do so, subject to the following conditions:
-##
-## The above copyright notice and this permission notice shall be
-## included in all copies or substantial portions of the Software.
-##
-## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-## SOFTWARE.
-
-. lib                  # Load some portability helpers.
-rm -rf R                        # Another script may have left a mess.
-darcs init      --repo R        # Create our test repos.
-
-cd R
-mkdir d
-touch core f
-# this is already known to work
-darcs add --boring core f
-darcs whatsnew > log
-grep 'addfile ./f' log
-grep 'addfile ./core' log
-rm _darcs/patches/pending
-# this fails for issue1332
-darcs add -r --boring .
-darcs whatsnew > log
-grep 'addfile ./f' log
-grep 'addfile ./core' log
-rm _darcs/patches/pending
-cd ..
diff --git a/tests/failing-issue1473_annotate_repodir.sh b/tests/failing-issue1473_annotate_repodir.sh
deleted file mode 100644
--- a/tests/failing-issue1473_annotate_repodir.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env bash
-set -ev
-
-. lib
-rm -rf temp
-mkdir temp
-cd temp
-darcs init
-mkdir a b
-touch a/a b/b
-darcs add --rec .
-darcs record -a -m ab -A test
-darcs annotate a/a
-# annotate --repodir=something '.' should work
-cd ..
-darcs annotate --repodir temp '.'
-cd temp
-
-cd ..
-rm -rf temp
-
diff --git a/tests/failing-issue1727_move_current_directory.sh b/tests/failing-issue1727_move_current_directory.sh
deleted file mode 100644
--- a/tests/failing-issue1727_move_current_directory.sh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env bash
-## Test for issue1727 - darcs move . target' fails as an attempt to
-## write an 'invalid pending.
-##
-## Copyright (C) 2009 Sean Erle Johnson 
-##
-## Permission is hereby granted, free of charge, to any person
-## obtaining a copy of this software and associated documentation
-## files (the "Software"), to deal in the Software without
-## restriction, including without limitation the rights to use, copy,
-## modify, merge, publish, distribute, sublicense, and/or sell copies
-## of the Software, and to permit persons to whom the Software is
-## furnished to do so, subject to the following conditions:
-##
-## The above copyright notice and this permission notice shall be
-## included in all copies or substantial portions of the Software.
-##
-## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-## SOFTWARE.
-
-. lib                  # Load some portability helpers.
-rm -rf R                        # Another script may have left a mess.
-
-# Create repository R
-darcs init      --repo R        # Create the test repo.
-cd R
-
-mkdir d                         # Change the working tree.
-
-# darcs move empty current directory to existing directory d
-darcs move . d
-
-# darcs move empty current directory to non-existing directory e
-darcs move . e
-
-# Make file to be copied
-echo 'main = putStrLn "Hello World"' > hello.hs
-
-# darcs move non-empty current directory to existing directory d
-darcs move . d
-
-# darcs move non-empty current directory to non-existing directory e
-darcs move . e
diff --git a/tests/failing-issue1740-mv-dir.sh b/tests/failing-issue1740-mv-dir.sh
deleted file mode 100644
--- a/tests/failing-issue1740-mv-dir.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env bash
-## Test for issue1740 - darcs mv on directories should work after the fact
-##
-## Copyright (C) 2009  Eric Kow
-##
-## Permission is hereby granted, free of charge, to any person
-## obtaining a copy of this software and associated documentation
-## files (the "Software"), to deal in the Software without
-## restriction, including without limitation the rights to use, copy,
-## modify, merge, publish, distribute, sublicense, and/or sell copies
-## of the Software, and to permit persons to whom the Software is
-## furnished to do so, subject to the following conditions:
-##
-## The above copyright notice and this permission notice shall be
-## included in all copies or substantial portions of the Software.
-##
-## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-## SOFTWARE.
-
-. lib                           # Load some portability helpers.
-rm -rf R                        # Another script may have left a mess.
-darcs init      --repo R        # Create our test repos.
-
-cd R
-mkdir d
-echo 'Example content.' > d/f
-darcs record -lam 'Add d/f'
-mv d d2
-darcs mv d d2 # oops, I meant to darcs mv that
-darcs what | grep move ./d ./d2
diff --git a/tests/failing-issue1819-pull-dont-allow-conflicts.sh b/tests/failing-issue1819-pull-dont-allow-conflicts.sh
new file mode 100644
--- /dev/null
+++ b/tests/failing-issue1819-pull-dont-allow-conflicts.sh
@@ -0,0 +1,38 @@
+#!/usr/bin/env bash
+## Test for issue1819 - pull --dont-allow-conflicts doesn't work
+##
+## Dave Love <fx@gnu.org>, Public domain
+
+. lib
+rm -rf R S
+for repo in R S; do
+    darcs init --repo $repo
+    cd $repo
+    echo 'Example content.' >x
+    darcs add x
+    darcs record -lam 'Add x'
+    echo $repo >x
+    darcs record -lam 'Change x'
+    cd ..
+done
+
+darcs get S S0
+cd S0
+# the 'echo |' is for the external merge prompt 'hit return to continue' prompt
+echo | darcs pull --all --allow-conflicts --external-merge 'cp %2 %o' ../R
+cd ..
+
+darcs get S S0b
+cd S0b
+echo | not darcs pull --all --dont-allow-conflicts ../R
+cd ..
+
+darcs get S S1
+cd S1
+echo | not darcs pull --all --external-merge 'cp %2 %o' --dont-allow-conflicts ../R
+cd ..
+
+darcs get S S2
+cd S2
+echo | not darcs pull --all --dont-allow-conflicts --external-merge 'cp %2 %o' ../R
+cd ..
diff --git a/tests/failing-issue1848-rollback-p.sh b/tests/failing-issue1848-rollback-p.sh
deleted file mode 100644
--- a/tests/failing-issue1848-rollback-p.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env bash
-## Test for issue1848 - interactive selection of primitive patches
-## should still work with rollback -p
-##
-## Copyright (C) 2010 Eric Kow
-##
-## Permission is hereby granted, free of charge, to any person
-## obtaining a copy of this software and associated documentation
-## files (the "Software"), to deal in the Software without
-## restriction, including without limitation the rights to use, copy,
-## modify, merge, publish, distribute, sublicense, and/or sell copies
-## of the Software, and to permit persons to whom the Software is
-## furnished to do so, subject to the following conditions:
-##
-## The above copyright notice and this permission notice shall be
-## included in all copies or substantial portions of the Software.
-##
-## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-## SOFTWARE.
-
-. lib                           # Load some portability helpers.
-rm -rf R S                      # Another script may have left a mess.
-darcs init      --repo R        # Create our test repos.
-
-cd R
-echo 'f' > f
-echo 'g' > g
-darcs record -lam 'Add f and g'
-echo ynq | darcs rollback -p 'f and g'
-cd ..
diff --git a/tests/failing-issue2076-move_into_dir.sh b/tests/failing-issue2076-move_into_dir.sh
deleted file mode 100644
--- a/tests/failing-issue2076-move_into_dir.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env bash
-## Copyright (C) 2011 Lennart Kolmodin <kolmodin@gmail.com>
-##
-## Permission is hereby granted, free of charge, to any person
-## obtaining a copy of this software and associated documentation
-## files (the "Software"), to deal in the Software without
-## restriction, including without limitation the rights to use, copy,
-## modify, merge, publish, distribute, sublicense, and/or sell copies
-## of the Software, and to permit persons to whom the Software is
-## furnished to do so, subject to the following conditions:
-##
-## The above copyright notice and this permission notice shall be
-## included in all copies or substantial portions of the Software.
-##
-## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-## SOFTWARE.
-
-
-
-. lib                           # Load some portability helpers.
-darcs init      --repo issue2076
-
-cd issue2076
-touch file1
-darcs record -lam 'file1'
-mkdir dir1
-
-mv file1 dir1
-
-darcs mv file1 dir1
-
-# darcs crashes when it expects a file but finds a directory instead
-
-darcs whatsnew
diff --git a/tests/failing-issue2086-index-permissions.sh b/tests/failing-issue2086-index-permissions.sh
new file mode 100644
--- /dev/null
+++ b/tests/failing-issue2086-index-permissions.sh
@@ -0,0 +1,38 @@
+#!/usr/bin/env bash
+## Test for issue2086 - _darcs/index permissions are not preserved
+##
+## Copyright (C) 2011 Eric Kow
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. lib                           # Load some portability helpers.
+darcs init      --repo R        # Create our test repos.
+
+cd R
+echo 'Example content.' > f
+darcs record -lam 'Add f' --umask 022
+ls -l _darcs/index | grep '^.rw..--...'
+chmod g+w _darcs/index
+ls -l _darcs/index | grep '^.rw.rw....'
+echo 'Example content 2.' > f
+darcs record -lam 'Tweak f'
+ls -l _darcs/index | grep '^.rw.rw....'
+cd ..
diff --git a/tests/harness.sh b/tests/harness.sh
--- a/tests/harness.sh
+++ b/tests/harness.sh
@@ -15,7 +15,11 @@
 grep $password "$HOME/test" || grep $password "$HOME/harness.sh"
 
 if echo $OS | grep -i windows; then
-    real=$(cmd //c echo $(command -v darcs.exe) | sed -e 's,\\,/,g')
+    if echo $OSTYPE | grep -i cygwin ; then
+        real=$(cygpath -w $(command -v darcs.exe) | sed -e 's,\\,/,g')
+    else
+        real=$(cmd //c echo $(command -v darcs.exe) | sed -e 's,\\,/,g')
+    fi
     wanted=$(echo "$DARCS" | sed -e 's,\\,/,g')
     test "$real" = "$wanted"
 else
diff --git a/tests/issue1162_add_nonexistent_slash.sh b/tests/issue1162_add_nonexistent_slash.sh
--- a/tests/issue1162_add_nonexistent_slash.sh
+++ b/tests/issue1162_add_nonexistent_slash.sh
@@ -10,7 +10,7 @@
 darcs init
 not darcs add a/ 2> err
 cat err
-grep 'does not exist (No such file or directory)' err
+grep 'File a does not exist!' err
 cd ..
 
 rm -rf temp
diff --git a/tests/issue1332_add_r_boring.sh b/tests/issue1332_add_r_boring.sh
new file mode 100644
--- /dev/null
+++ b/tests/issue1332_add_r_boring.sh
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+## Test for issue1332 - add -r ignores --boring
+##
+## Copyright (C) 2009 Eric Kow
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. lib                  # Load some portability helpers.
+rm -rf R                        # Another script may have left a mess.
+darcs init      --repo R        # Create our test repos.
+
+cd R
+mkdir d
+touch core f
+# this is already known to work
+darcs add --boring core f
+darcs whatsnew > log
+grep 'addfile ./f' log
+grep 'addfile ./core' log
+rm _darcs/patches/pending
+# this fails for issue1332
+darcs add -r --boring .
+darcs whatsnew > log
+grep 'addfile ./f' log
+grep 'addfile ./core' log
+rm _darcs/patches/pending
+cd ..
diff --git a/tests/issue1473_annotate_repodir.sh b/tests/issue1473_annotate_repodir.sh
new file mode 100644
--- /dev/null
+++ b/tests/issue1473_annotate_repodir.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+set -ev
+
+. lib
+rm -rf temp
+mkdir temp
+cd temp
+darcs init
+mkdir a b
+touch a/a b/b
+darcs add --rec .
+darcs record -a -m ab -A test
+darcs annotate a/a
+darcs annotate . > inner
+# annotate --repodir=something '.' should work
+cd ..
+darcs annotate --repodir temp '.' > temp/outer
+cd temp
+diff inner outer
+
+cd ..
+rm -rf temp
+
diff --git a/tests/issue1705-show-contents-index.sh b/tests/issue1705-show-contents-index.sh
new file mode 100644
--- /dev/null
+++ b/tests/issue1705-show-contents-index.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+## Test for issue1705 - <darcs show contents --index=1     => darcs failed:  Pattern not specified in get_nonrange_match>
+##
+## Copyright (C) 2009  Thomas Hartman
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. ../tests/lib                  # Load some portability helpers.
+rm -rf R S                      # Another script may have left a mess.
+darcs init      --repo R        # Create our test repos.
+cd R
+echo 111 > 1
+darcs add 1
+darcs record --author="whoever" -am'add file 1'
+darcs show contents --index=1 1
+cd ..
+rm -rf R
diff --git a/tests/issue1727_move_current_directory.sh b/tests/issue1727_move_current_directory.sh
new file mode 100644
--- /dev/null
+++ b/tests/issue1727_move_current_directory.sh
@@ -0,0 +1,53 @@
+#!/usr/bin/env bash
+## Test for issue1727 - darcs move . target' fails as an attempt to
+## write an 'invalid pending.
+##
+## Copyright (C) 2009 Sean Erle Johnson 
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. lib                  # Load some portability helpers.
+rm -rf R                        # Another script may have left a mess.
+
+# Create repository R
+darcs init      --repo R        # Create the test repo.
+cd R
+
+mkdir d                         # Change the working tree.
+
+# darcs move empty current directory to existing directory d
+not darcs move . d
+
+# darcs move empty current directory to non-existing directory e
+not darcs move . e
+
+# Make file to be copied
+echo 'main = putStrLn "Hello World"' > hello.hs
+
+# darcs move non-empty current directory to existing directory d
+not darcs move . d
+
+# darcs move non-empty current directory to non-existing directory e
+not darcs move . e
+
+mkdir e
+cd e
+not darcs move .. e
diff --git a/tests/issue1740-mv-dir.sh b/tests/issue1740-mv-dir.sh
new file mode 100644
--- /dev/null
+++ b/tests/issue1740-mv-dir.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+## Test for issue1740 - darcs mv on directories should work after the fact
+##
+## Copyright (C) 2009  Eric Kow
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. lib                           # Load some portability helpers.
+rm -rf R                        # Another script may have left a mess.
+darcs init      --repo R        # Create our test repos.
+
+cd R
+mkdir d
+echo 'Example content.' > d/f
+darcs record -lam 'Add d/f'
+mv d d2
+darcs mv d d2 # oops, I meant to darcs mv that
+darcs what | grep "move ./d ./d2"
diff --git a/tests/issue1848-rollback-p.sh b/tests/issue1848-rollback-p.sh
new file mode 100644
--- /dev/null
+++ b/tests/issue1848-rollback-p.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+## Test for issue1848 - interactive selection of primitive patches
+## should still work with rollback -p
+##
+## Copyright (C) 2010 Eric Kow
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. lib                           # Load some portability helpers.
+rm -rf R S                      # Another script may have left a mess.
+darcs init      --repo R        # Create our test repos.
+
+cd R
+echo 'f' > f
+echo 'g' > g
+darcs record -lam 'Add f and g'
+echo ynq | darcs rollback -p 'f and g'
+cd ..
diff --git a/tests/issue2066-record-file-not-exist.sh b/tests/issue2066-record-file-not-exist.sh
new file mode 100644
--- /dev/null
+++ b/tests/issue2066-record-file-not-exist.sh
@@ -0,0 +1,13 @@
+set -ev
+
+rm -rf temp
+mkdir -p temp
+cd temp
+
+darcs init
+touch a b
+darcs add a
+darcs record -a -m "record a" a
+rm a
+darcs add b
+darcs record -a -m "record a" a
diff --git a/tests/issue2067-diff-blanklines.sh b/tests/issue2067-diff-blanklines.sh
new file mode 100644
--- /dev/null
+++ b/tests/issue2067-diff-blanklines.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+## Test for 2067: inexistant files result in empty lines in darcs
+##diff
+##
+## Copyright (C) YEAR  AUTHOR
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. lib                           # Load some portability helpers.
+darcs init      --repo R        # Create our test repos.
+cd R
+darcs diff a b c d 2> /dev/null | wc -l | grep "^ *0$"
diff --git a/tests/issue2076-move_into_dir.sh b/tests/issue2076-move_into_dir.sh
new file mode 100644
--- /dev/null
+++ b/tests/issue2076-move_into_dir.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+## Copyright (C) 2011 Lennart Kolmodin <kolmodin@gmail.com>
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+
+
+. lib                           # Load some portability helpers.
+darcs init      --repo issue2076
+
+cd issue2076
+touch file1
+darcs record -lam 'file1'
+mkdir dir1
+
+mv file1 dir1
+
+not darcs mv file1 dir1
+# we require dir1 to be added first
+
+darcs add dir1
+darcs mv file1 dir1
+
+darcs whatsnew
diff --git a/tests/lib b/tests/lib
--- a/tests/lib
+++ b/tests/lib
@@ -32,6 +32,22 @@
     echo "character encoding is now `locale charmap`"
 }
 
+# switch locale to utf8 if supported if there's a locale command, skip test
+# otherwise
+switch_to_utf8_locale () {
+    if ! which locale ; then
+        echo "no locale command"
+        exit 200 # skip test
+    fi
+
+    utf8_locale=`locale -a | grep .utf8 | head -n 1` || exit 200
+    test -n "$utf8_locale" || exit 200
+
+    echo "Using locale $utf8_locale"
+    export LC_ALL=$utf8_locale
+    echo "character encoding is now `locale charmap`"
+}
+
 
 serve_http() {
     cat > light.conf <<EOF
diff --git a/tests/match-date.sh b/tests/match-date.sh
--- a/tests/match-date.sh
+++ b/tests/match-date.sh
@@ -147,20 +147,33 @@
 reset_repo
 create_entry_now
 match_date 'day after yesterday'
+match_date 'day since yesterday'
 match_date 'week after last week'
+match_date 'week since last week'
+
 create_entry "1992-10-02 00:15"
 match_date '15 minutes after 1992-10-02'
+match_date '15 minutes since 1992-10-02'
+
 reset_repo
 create_entry "1992-10-02 00:15+05"
 # note that earlier dates will always match
 match_date '15 minutes after 1992-10-02 00:00+05';   # same time
 match_date '15 minutes after 1992-10-01 23:00+04';   # same time
+match_date '15 minutes since 1992-10-02 00:00+05';   # same time
+match_date '15 minutes since 1992-10-01 23:00+04';   # same time
 nomatch_date '15 minutes after 1992-10-02 01:00+05'; # 1 hour later
 nomatch_date '15 minutes after 1992-10-02 00:00+04'; # 1 hour later
 nomatch_date '1 hour, 15 minutes after 1992-10-02 00:00+05'; # 1 hour later
+nomatch_date '15 minutes since 1992-10-02 01:00+05'; # 1 hour later
+nomatch_date '15 minutes since 1992-10-02 00:00+04'; # 1 hour later
+nomatch_date '1 hour, 15 minutes since 1992-10-02 00:00+05'; # 1 hour later
 match_date '1 hour, 15 minutes after 1992-10-02 00:00+06'; # same time
 match_date '1 hour, 15 minutes after 1992-10-01 23:00+05'; # same time
+match_date '1 hour, 15 minutes since 1992-10-02 00:00+06'; # same time
+match_date '1 hour, 15 minutes since 1992-10-01 23:00+05'; # same time
 
+
 reset_repo
 create_entry_now
 create_entry 1992-10-02 00:15
@@ -169,6 +182,7 @@
 match_date 'between last fortnight and today'
 match_date 'in the last 45 seconds'
 match_date 'after 1992'
+match_date 'since 1992'
 
 # iso 8601 intervals
 parse_date '1992-10-02 00:00Z/1992-10-02 00:16Z'
@@ -191,6 +205,7 @@
 # maybe that's not desireable.  For now, we just won't test the raw date.
 #match_date "$raw_date"
 parse_date 'after 2005'
+parse_date 'since 2005'
 parse_date 'in the last 3 weeks'
 parse_date 'P3M/2006-03-17'
 parse_date '2004-01-02/2006-03-17'
@@ -205,5 +220,5 @@
 reset_repo
 create_entry '2038-01-01'
 match_date 'after 2037'
-
+match_date 'since 2037'
 rm -rf temp1 temp2
diff --git a/tests/mutex-option-precedence.sh b/tests/mutex-option-precedence.sh
new file mode 100644
--- /dev/null
+++ b/tests/mutex-option-precedence.sh
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+## Test for issueNNNN - with mutually exclusive options "ALL foo" and
+## "bar no-foo", "darcs bar" should mean "darcs bar --no-foo".
+##
+## Copyright (C) 2009  Trent W. Buck
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. ../tests/lib                  # Load some portability helpers.
+rm -rf R                        # Another script may have left a mess.
+darcs init      --repo R        # Create our test repo.
+darcs init      --repo S        # Create our test repos.
+
+cd R
+echo 'Example content.' >f      # Change the working tree.
+darcs record -lam 'Add f.'
+darcs send -aof.dpatch ../S
+darcs obl -a
+cat >>_darcs/prefs/defaults <<EOF
+ALL prehook false
+ALL run-prehook
+apply no-prehook
+EOF
+darcs apply -a f.dpatch
+
diff --git a/tests/network/issue2090-transfer-mode.sh b/tests/network/issue2090-transfer-mode.sh
new file mode 100644
--- /dev/null
+++ b/tests/network/issue2090-transfer-mode.sh
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+## Test for darcs transfer-mode
+##
+## Copyright (C) 2012 Eric Kow
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. $(dirname $0)/../lib
+. $(dirname $0)/sshlib
+
+# Clean up after previous remote runs
+${SSH} ${REMOTE} "\
+rm -rf ${REMOTE_DIR}; \
+mkdir ${REMOTE_DIR}; \
+"
+
+# Set up a repo to test
+darcs init --repo R
+cd R
+touch f g
+darcs add f g
+darcs record f g -a --ignore-times -m 'add some files' -A moi
+darcs put $REMOTE:$REMOTE_DIR/R
+cd ..
+
+# Now try darcs get
+darcs get $REMOTE:$REMOTE_DIR/R S --debug > log 2>&1
+COUNT=$(grep -c 'darcs transfer-mode' log)
+# with issue2090, this was 6!
+test $COUNT -eq 1
+cleanup
diff --git a/tests/network/ssh.sh b/tests/network/ssh.sh
--- a/tests/network/ssh.sh
+++ b/tests/network/ssh.sh
@@ -1,46 +1,6 @@
-#!/usr/bin/env bash
-set -ev
-
-if [ x${REMOTE_DIR} = x ]; then
-  REMOTE_DIR=sshtest
-fi
-
-if [ x"${USE_PUTTY}" != x ]; then
-  DARCS_SSH=plink
-  export DARCS_SSH
-  DARCS_SCP=pscp
-  export DARCS_SCP
-  DARCS_SFTP=psftp
-  export DARCS_SFTP
-fi
-
-if [ x"${USE_CONTROL_MASTER}" != x ]; then
-  DARCS_SSH_FLAGS="--ssh-cm"
-  export DARCS_SSH_FLAGS
-fi
-
-if [ x"${DARCS_SSH}" = x ]; then
-  SSH=ssh
-else
-  SSH=${DARCS_SSH}
-fi
-
-rm -rf tempssh
-mkdir tempssh
-cd tempssh
-
-cleanup () {
-  cd ..
-  rm -rf tempssh
-}
-
-if [ x${REMOTE} = x ]; then
-  echo
-  echo "Note: to enable full SSH testing, set REMOTE to some SSH path first,"
-  echo "      e.g. REMOTE=you@server.org $0"
-  cleanup
-  exit 200
-fi
+#!/bin/bash
+. $(dirname $0)/../lib
+. $(dirname $0)/sshlib
 
 # ================ Setting up remote repositories ===============
 ${SSH} ${REMOTE} "\
@@ -73,7 +33,7 @@
 echo ${DARCS_SFTP}
 
 # ================ Checking darcs get ==================
-${DARCS} get ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo ${DARCS_SSH_FLAGS}
+darcs get ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo ${DARCS_SSH_FLAGS}
 # check that the test repo made it over
 [ -d testrepo ]
 [ -d testrepo/_darcs ]
@@ -89,32 +49,32 @@
 fi
 
 # ================ Checking darcs pull =================
-${DARCS} get ${DARCS_SSH_FLAGS} testrepo testrepo-pull
+darcs get ${DARCS_SSH_FLAGS} testrepo testrepo-pull
 cd testrepo-pull
-echo yy | ${DARCS} pull ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo-pull
+echo yyy | darcs pull ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo-pull
 # see if the changes got pulled over
 grep "other line" b
 
 cd ..
 
 # ================ Checking darcs push and send ================="
-${DARCS} get ${DARCS_SSH_FLAGS} testrepo testrepo-push
+darcs get ${DARCS_SSH_FLAGS} testrepo testrepo-push
 cd testrepo-push
 echo moi > _darcs/prefs/author
-echo "second line" >> a; ${DARCS} record a --ignore-times -am "add second line to a"
-touch c; ${DARCS} add c
-${DARCS} record --ignore-times -am "add file c" c
-echo yy | ${DARCS} push ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo-push
+echo "second line" >> a; darcs record a --ignore-times -am "add second line to a"
+touch c; darcs add c
+darcs record --ignore-times -am "add file c" c
+echo yyy | darcs push ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo-push
 # check that the file c got pushed over
 ${SSH} ${REMOTE} "[ -f ${REMOTE_DIR}/testrepo-push/c ]"
-echo yy | ${DARCS} send ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo-send -o mybundle.dpatch
+echo yyy | darcs send --no-edit-description ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo-send -o mybundle.dpatch
 # check that the bundle was created
 grep "add file c" mybundle.dpatch
 cd ..
 
 # ================ Checking darcs put =================="
 cd testrepo
-${DARCS} put ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo-put
+darcs put ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo-put
 # check that the put was successful
 ${SSH} ${REMOTE} "[ -d ${REMOTE_DIR}/testrepo-put/_darcs ]"
 ${SSH} ${REMOTE} "[ -f ${REMOTE_DIR}/testrepo-put/a ]"
@@ -124,20 +84,15 @@
 ${SSH} ${REMOTE} "echo apply no-allow-conflicts >> ${REMOTE_DIR}/testrepo-put/_darcs/prefs/defaults"
 
 cd testrepo 
+echo moi > _darcs/prefs/author
 echo 'change for remote' > a
 darcs record --ignore-times -am 'change for remote'
 darcs push -a
 darcs ob --last 1 -a
 echo 'change for local' > a
 darcs record --ignore-times -am 'change for local'
-
-if darcs push -a 2>&1 | grep -q 'conflicts options to apply' ; then
-    # do nothing. 
-    echo "OK";
-else
-    exit 1;
-fi
+darcs push -a > log 2>&1 || :
+grep -q 'conflicts options to apply' log
 
 cd ..
-
 cleanup
diff --git a/tests/put.sh b/tests/put.sh
--- a/tests/put.sh
+++ b/tests/put.sh
@@ -8,14 +8,13 @@
 darcs init
 cd ..
 
-# put should set default repo
+# put should not set default repo
 cd temp1
 touch 1.txt
 darcs add 1.txt
 darcs record -a -m foo 1.txt
 darcs put ../temp2
-test -e _darcs/prefs/defaultrepo
-grep temp2 _darcs/prefs/defaultrepo
+test ! -e _darcs/prefs/defaultrepo
 cd ..
 
 # put to self
diff --git a/tests/repair-corrupt-add.sh b/tests/repair-corrupt-add.sh
new file mode 100644
--- /dev/null
+++ b/tests/repair-corrupt-add.sh
@@ -0,0 +1,56 @@
+#!/usr/bin/env bash
+## Test that we can repair incorrect adds
+##
+## Copyright (C) 2012 Ganesh Sittampalam
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. lib
+
+rm -rf bad
+mkdir bad
+cd bad
+darcs init
+
+echo foo > file
+darcs add file
+mkdir dir
+darcs add dir
+
+darcs rec -a -m 'initial'
+
+darcs changes --verbose --patch 'initial'
+
+# produce a corrupt addfile patch
+echo 'addfile ./file' > _darcs/patches/pending
+echo 'yny' | darcs rec -m 're-add file'
+
+not darcs check
+darcs repair
+darcs check
+
+# produce a corrupt adddir patch
+echo 'adddir ./dir' > _darcs/patches/pending
+echo 'yy' | darcs rec -m 're-add dir'
+
+not darcs check
+darcs repair
+darcs check
diff --git a/tests/send-encoding.sh b/tests/send-encoding.sh
new file mode 100644
--- /dev/null
+++ b/tests/send-encoding.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+## Copyright (C) 2011 Ganesh Sittampalam <ganesh@earth.li>
+##
+## Test that darcs send uses the UTF-8 encoding for emails
+## when non-ASCII characters are in the message
+##
+## Permission is hereby granted, free of charge, to any person
+## obtaining a copy of this software and associated documentation
+## files (the "Software"), to deal in the Software without
+## restriction, including without limitation the rights to use, copy,
+## modify, merge, publish, distribute, sublicense, and/or sell copies
+## of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be
+## included in all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+## SOFTWARE.
+
+. lib                           # Load some portability helpers.
+
+switch_to_utf8_locale
+
+darcs init --repo empty
+
+darcs init --repo send
+
+cd send
+echo 'file1' > file1
+darcs record -lam 'file1'
+
+LANG=en_GB.UTF-8 \
+ EDITOR='echo Non-ASCII chars: é è ề Ψ ޡ ߐ ह ჴ Ᏻ ‱ ⁂ ∰ ✈ ⢅ .. >' \
+   darcs send -a ../empty --to=invalid@invalid --edit \
+      --sendmail-command='grep "Content-Type: text/plain; charset=\"utf-8\"" %<'
diff --git a/tests/show_contents.sh b/tests/show_contents.sh
--- a/tests/show_contents.sh
+++ b/tests/show_contents.sh
@@ -23,6 +23,7 @@
 darcs show contents foo --tag t1 | grep second
 not darcs show contents foo --match "hash bla" 2>&1 | tee out
 grep "Couldn't match pattern" out
+darcs show contents -n 2 foo | grep third
 cd ..
 
 rm -rf temp1
