David, 

Here is a big bundle I have locally including all the refactors to
SelectChanges, including the removal of some of the separate_* functions.

I couldn't remove two of them.

Thanks!
Jason

Tue Aug 12 20:16:25 PDT 2008  Jason Dagit <[EMAIL PROTECTED]>
  * major refactor of SelectChanges to work with type witnesses

Tue Aug 12 21:43:54 PDT 2008  Jason Dagit <[EMAIL PROTECTED]>
  * make WhatsNew work with type witnesses

Tue Aug 12 22:04:25 PDT 2008  Jason Dagit <[EMAIL PROTECTED]>
  * refine type witnesses in SelectChanges

Tue Aug 12 22:38:37 PDT 2008  Jason Dagit <[EMAIL PROTECTED]>
  * partial type witnesses in Unrevert

Fri Aug 15 13:11:25 PDT 2008  Jason Dagit <[EMAIL PROTECTED]>
  * correct a bug in with_selected_patches_from_repository
  Fixing this bug allows w_s_p_f_r to have the expected type signature
  and also corrects a problem where the non-selected patches were returned
  in the wrong context.

Fri Aug 15 15:26:35 PDT 2008  Jason Dagit <[EMAIL PROTECTED]>
  * replace separate_middle_last_from_first and separate_last_from_first_middle 
with get_choices

New patches:

[major refactor of SelectChanges to work with type witnesses
Jason Dagit <[EMAIL PROTECTED]>**20080813031625] hunk ./src/Darcs/Commands/AmendRecord.lhs 120
-    with_selected_patch_from_repo "amend" repository opts True $ \ (oldp, _) -> do
+    with_selected_patch_from_repo "amend" repository opts True $ \ (_ :> oldp) -> do
hunk ./src/Darcs/SelectChanges.lhs 45
-                     fromPrims, invert, list_touched_files, anonymous )
+                     fromPrims, invert, list_touched_files, anonymous,
+                     commuteFL )
hunk ./src/Darcs/SelectChanges.lhs 48
-import Darcs.Patch.Ordered ( FL(..), RL(..), (:<)(..), (:>)(..),
+import Darcs.Patch.Ordered ( FL(..), RL(..), (:>)(..),
hunk ./src/Darcs/SelectChanges.lhs 50
-                             spanFL, reverseFL, (+<+), mapFL )
+                             spanFL, reverseFL, (+<+), mapFL, reverseRL,
+                             unsafeCoerceP )
hunk ./src/Darcs/SelectChanges.lhs 70
-import Darcs.Sealed ( Sealed(..), seal )
+import Darcs.Sealed ( Sealed(..), FlippedSeal(..), seal, flipSeal, seal2, unseal2 )
hunk ./src/Darcs/SelectChanges.lhs 77
-type WithPatches p a =
+
+type WithPatches p a C(x y) =
hunk ./src/Darcs/SelectChanges.lhs 82
-     -> FL p                -- patches to select among
-     -> (FL p :> FL p -> IO a) -- job
+     -> FL p C(x y)         -- patches to select among
+     -> (FORALL(m n) (FL p :> FL p) C(m n) -> IO a) -- job
hunk ./src/Darcs/SelectChanges.lhs 87
-type WithPatchesToFiles p a =
+type WithPatchesToFiles p a C(x y) =
hunk ./src/Darcs/SelectChanges.lhs 92
-     -> FL p                -- patches to select among
-     -> (FL p :> FL p -> IO a) -- job
+     -> FL p C(x y)         -- patches to select among
+     -> (FORALL(m n) (FL p :> FL p) C(m n) -> IO a) -- job
hunk ./src/Darcs/SelectChanges.lhs 96
-with_selected_changes'               :: WithPatches Prim a
-with_selected_changes_to_files'      :: WithPatchesToFiles Prim a
-with_selected_last_changes_to_files' :: WithPatchesToFiles Prim a
-with_selected_last_changes_reversed' :: WithPatches Prim a
-                                     
+with_selected_changes'
+  :: WithPatches Prim a C(x y)
+with_selected_changes_to_files'
+  :: WithPatchesToFiles Prim a C(x y)
+with_selected_last_changes_to_files'
+  :: WithPatchesToFiles Prim a C(x y)
+with_selected_last_changes_reversed'
+  :: WithPatches Prim a C(x y)
+
hunk ./src/Darcs/SelectChanges.lhs 110
-with_selected_changes               :: RepoPatch p => WithPatches (PatchInfoAnd p) a
-with_selected_changes_to_files      :: RepoPatch p => WithPatchesToFiles (PatchInfoAnd p) a
-with_selected_changes_reversed      :: RepoPatch p => WithPatches (PatchInfoAnd p) a
-with_selected_last_changes_to_files :: RepoPatch p => WithPatchesToFiles (PatchInfoAnd p) a
-with_selected_last_changes_to_files_reversed :: RepoPatch p => WithPatchesToFiles (PatchInfoAnd p) a
-with_selected_last_changes_reversed :: RepoPatch p => WithPatches (PatchInfoAnd p) a
-                                    
+with_selected_changes               :: RepoPatch p => WithPatches (PatchInfoAnd p) a C(x y)
+with_selected_changes_to_files      :: RepoPatch p => WithPatchesToFiles (PatchInfoAnd p) a C(x y)
+with_selected_changes_reversed      :: RepoPatch p => WithPatches (PatchInfoAnd p) a C(x y)
+with_selected_last_changes_to_files :: RepoPatch p => WithPatchesToFiles (PatchInfoAnd p) a C(x y)
+with_selected_last_changes_to_files_reversed :: RepoPatch p => WithPatchesToFiles (PatchInfoAnd p) a C(x y)
+with_selected_last_changes_reversed :: RepoPatch p => WithPatches (PatchInfoAnd p) a C(x y)
+
hunk ./src/Darcs/SelectChanges.lhs 127
-wasc  :: Patchy p => WhichChanges -> WithPatches p a
+wasc  :: Patchy p => WhichChanges -> WithPatches p a C(x y)
hunk ./src/Darcs/SelectChanges.lhs 129
-wasc_ :: Patchy p => WhichChanges -> WithPatchesToFiles p a
+wasc_ :: Patchy p => WhichChanges -> WithPatchesToFiles p a C(x y)
hunk ./src/Darcs/SelectChanges.lhs 132
-wasc'  :: RepoPatch p => WhichChanges -> WithPatches (PatchInfoAnd p) a
+wasc'
+  :: RepoPatch p => WhichChanges -> WithPatches (PatchInfoAnd p) a C(x y)
hunk ./src/Darcs/SelectChanges.lhs 135
-wasc_' :: RepoPatch p => WhichChanges -> WithPatchesToFiles (PatchInfoAnd p) a
+wasc_'
+  :: RepoPatch p => WhichChanges -> WithPatchesToFiles (PatchInfoAnd p) a C(x y)
hunk ./src/Darcs/SelectChanges.lhs 139
-with_any_selected_changes :: Patchy p => WhichChanges -> WithPatchesToFiles p a
-with_any_selected_changes wch jn opts s fs =
-    with_any_selected_changes_ wch (patches_to_consider (Just wch) fs) jn opts s fs
+with_any_selected_changes :: Patchy p => WhichChanges -> WithPatchesToFiles p a C(x y)
+with_any_selected_changes Last jn opts s fs =
+    with_any_selected_changes_last (patches_to_consider_last fs) jn opts s fs
+with_any_selected_changes First jn opts s fs =
+    with_any_selected_changes_first (patches_to_consider_first fs) jn opts s fs
+with_any_selected_changes FirstReversed jn opts s fs =
+    with_any_selected_changes_first_reversed (patches_to_consider_first_reversed fs) jn opts s fs
+with_any_selected_changes LastReversed jn opts s fs =
+    with_any_selected_changes_last_reversed (patches_to_consider_last_reversed fs) jn opts s fs
hunk ./src/Darcs/SelectChanges.lhs 149
-with_any_selected_changes' :: RepoPatch p => WhichChanges -> WithPatchesToFiles (PatchInfoAnd p) a
-with_any_selected_changes' wch jn opts s fs =
-    with_any_selected_changes_ wch (patches_to_consider' (Just wch) fs opts) jn opts s fs
hunk ./src/Darcs/SelectChanges.lhs 150
-view_changes :: RepoPatch p => [DarcsFlag] -> Slurpy -> [FilePath] -> FL (PatchInfoAnd p) -> IO ()
+with_any_selected_changes'
+  :: RepoPatch p => WhichChanges -> WithPatchesToFiles (PatchInfoAnd p) a C(x y)
+with_any_selected_changes' Last jn opts s fs =
+    with_any_selected_changes_last (patches_to_consider_last' fs opts) jn opts s fs
+with_any_selected_changes' First jn opts s fs =
+    with_any_selected_changes_first (patches_to_consider_first' fs opts) jn opts s fs
+with_any_selected_changes' FirstReversed jn opts s fs =
+    with_any_selected_changes_first_reversed (patches_to_consider_first_reversed' fs opts) jn opts s fs
+with_any_selected_changes' LastReversed jn opts s fs =
+    with_any_selected_changes_last_reversed (patches_to_consider_last_reversed' fs opts) jn opts s fs
+
+view_changes :: RepoPatch p => [DarcsFlag] -> Slurpy -> [FilePath] -> FL (PatchInfoAnd p) C(x y) -> IO ()
hunk ./src/Darcs/SelectChanges.lhs 163
- without_buffering $ do text_view opts ps_len 0 NilRL init_tps init_pc
-                        return ()
- where ps_to_consider :> _ = patches_to_consider' Nothing fp opts ps
-       (init_pc, init_tps) = patch_choices_tps ps_to_consider
-       ps_len = lengthFL init_tps
+  case patches_to_consider_nothing' fp opts ps of
+  ps_to_consider :> _ -> vc ps_to_consider
+ where
+       vc :: RepoPatch p => FL (PatchInfoAnd p) C(x y) -> IO ()
+       vc p = without_buffering $ do text_view opts ps_len 0 NilRL init_tps init_pc
+                                     return ()
+        where (init_pc, init_tps) = patch_choices_tps p
+              ps_len = lengthFL init_tps
hunk ./src/Darcs/SelectChanges.lhs 193
-with_selected_patch_from_repo :: RepoPatch p => String -> Repository p -> [DarcsFlag] -> Bool
-                              -> ((PatchInfoAnd p,[PatchInfoAnd p]) -> IO ()) -> IO ()
+with_selected_patch_from_repo :: RepoPatch p => String -> Repository p C(r u t) -> [DarcsFlag] -> Bool
+                              -> (FORALL(a b) ((FL (PatchInfoAnd p) :> (PatchInfoAnd p)) C(a b)) -> IO ()) -> IO ()
hunk ./src/Darcs/SelectChanges.lhs 198
-                   then return $ seal NilFL
+                   then return $ seal (NilFL :: FL Prim C(r r))
hunk ./src/Darcs/SelectChanges.lhs 201
-                              (concatRL p_s) [n2pia $ anonymous $ fromPrims pend]
+                              (concatRL p_s) ((n2pia $ anonymous $ fromPrims pend) :>: NilFL)
hunk ./src/Darcs/SelectChanges.lhs 203
-        Just (selected, s_and_pend) ->
-          case (last s_and_pend, init s_and_pend) of
-          (pend',skipped) ->
+        Just (FlippedSeal (s_and_pend :> selected)) ->
+           case reverseFL s_and_pend of
+           pend':<:skipped ->
hunk ./src/Darcs/SelectChanges.lhs 207
-            Just (selected' :> _) -> job (selected', skipped)
+            Just (selected' :> _) -> job (reverseRL skipped :> selected')
hunk ./src/Darcs/SelectChanges.lhs 209
+           NilRL -> bug "empty selected and pending in with_selected_patch_from_repo" -- The previous version of this
+                                                                                      -- function didn't check this case.
hunk ./src/Darcs/SelectChanges.lhs 214
-wspfr :: RepoPatch p => String -> (PatchInfoAnd p -> Bool)
-      -> RL (PatchInfoAnd p) -> [PatchInfoAnd p]
-      -> IO (Maybe (PatchInfoAnd p, [PatchInfoAnd p]))
+wspfr :: RepoPatch p => String -> (FORALL(a b) (PatchInfoAnd p) C(a b) -> Bool)
+      -> RL (PatchInfoAnd p) C(x y) -> FL (PatchInfoAnd p) C(y z)
+      -> IO (Maybe (FlippedSeal (FL (PatchInfoAnd p) :> (PatchInfoAnd p)) C(z)))
hunk ./src/Darcs/SelectChanges.lhs 219
-    | not $ matches p = wspfr jn matches pps (p:skipped)
+    | not $ matches p = wspfr jn matches pps (p:>:skipped)
hunk ./src/Darcs/SelectChanges.lhs 221
-    case commute_by (skipped :< p) of
+    case commuteFL (p :> skipped) of
hunk ./src/Darcs/SelectChanges.lhs 224
-                  wspfr jn matches pps (p:skipped)
-    Just (p' :< skipped') -> do
+                  wspfr jn matches pps (p:>:skipped)
+    Just (skipped' :> p') -> do
hunk ./src/Darcs/SelectChanges.lhs 238
-        'y' -> return $ Just (p', skipped')
-        'n' -> wspfr jn matches pps (p:skipped)
+        'y' -> return $ Just $ flipSeal $ skipped' :> p'
+        'n' -> wspfr jn matches pps (p:>:skipped)
hunk ./src/Darcs/SelectChanges.lhs 249
-
-commute_by :: Patchy p => [p] :< p -> Maybe (p :< [p])
-commute_by ([] :< a) = Just (a :< [])
-commute_by (p:ps :< a) =
-    case commute (a :> p) of
-    Nothing -> Nothing
-    Just (p':>a') -> case commute_by (ps :< a') of
-                     Nothing -> Nothing
-                     Just (a'' :< ps') -> Just (a'' :< p':ps')
hunk ./src/Darcs/SelectChanges.lhs 252
-with_any_selected_changes_ :: Patchy p => WhichChanges
-                           -> (FL p -> FL p :> FL p)
-                           -> WithPatchesToFiles p a
-with_any_selected_changes_ whichch p2c
-                          jobname opts _ _ ps job =
-   if All `elem` opts || DryRun `elem` opts
-   then job $ case whichch of LastReversed -> invert other_ps :> invert ps_to_consider
-                              FirstReversed -> invert other_ps :> invert ps_to_consider
-                              _ -> ps_to_consider :> other_ps
-   else do pc <- without_buffering $
-                 tentatively_text_select "" jobname (Noun "patch") whichch
-                                        opts ps_len 0 NilRL init_tps init_pc
-           job $ selected_patches whichch rejected_ps pc
- where ps_to_consider :> other_ps = p2c ps
-       rejected_ps = if whichch == Last || whichch == FirstReversed then ps_to_consider else other_ps
-       (init_pc, init_tps) = patch_choices_tps $ case whichch of Last -> other_ps
-                                                                 FirstReversed -> other_ps
-                                                                 _ -> ps_to_consider
-       ps_len = lengthFL init_tps
+with_any_selected_changes_last :: forall p a C(x y). Patchy p
+                               => (FL p C(x y) -> (FL p :> FL p) C(x y))
+                               -> WithPatchesToFiles p a C(x y)
+with_any_selected_changes_last p2c jobname opts _ _ ps job =
+ case p2c ps of
+ ps_to_consider :> other_ps ->
+         if All `elem` opts || DryRun `elem` opts
+         then job $ ps_to_consider :> other_ps
+         else do pc <- without_buffering $
+                       tentatively_text_select "" jobname (Noun "patch") Last
+                                              opts ps_len 0 NilRL init_tps init_pc
+                 job $ selected_patches_last rejected_ps pc
+         where rejected_ps = ps_to_consider
+               ps_len = lengthFL init_tps
+               (init_pc, init_tps) = patch_choices_tps $ other_ps
+
+with_any_selected_changes_first :: forall p a C(x y). Patchy p
+                                => (FL p C(x y) -> (FL p :> FL p) C(x y))
+                                -> WithPatchesToFiles p a C(x y)
+with_any_selected_changes_first p2c jobname opts _ _ ps job =
+ case p2c ps of
+ ps_to_consider :> other_ps ->
+         if All `elem` opts || DryRun `elem` opts
+         then job $ ps_to_consider :> other_ps
+         else do pc <- without_buffering $
+                       tentatively_text_select "" jobname (Noun "patch") First
+                                              opts ps_len 0 NilRL init_tps init_pc
+                 job $ selected_patches_first rejected_ps pc
+         where rejected_ps = other_ps
+               ps_len = lengthFL init_tps
+               (init_pc, init_tps) = patch_choices_tps $ ps_to_consider
+
+with_any_selected_changes_first_reversed :: forall p a C(x y). Patchy p
+                                => (FL p C(x y) -> (FL p :> FL p) C(y x))
+                                -> WithPatchesToFiles p a C(x y)
+with_any_selected_changes_first_reversed p2c jobname opts _ _ ps job =
+ case p2c ps of
+ ps_to_consider :> other_ps ->
+         if All `elem` opts || DryRun `elem` opts
+         then job $ invert other_ps :> invert ps_to_consider
+         else do pc <- without_buffering $
+                       tentatively_text_select "" jobname (Noun "patch") FirstReversed
+                                             opts ps_len 0 NilRL init_tps init_pc
+                 job $ selected_patches_first_reversed rejected_ps pc
+         where rejected_ps = ps_to_consider
+               ps_len = lengthFL init_tps
+               (init_pc, init_tps) = patch_choices_tps other_ps
+
+with_any_selected_changes_last_reversed :: forall p a C(x y). Patchy p
+                                => (FL p C(x y) -> (FL p :> FL p) C(y x))
+                                -> WithPatchesToFiles p a C(x y)
+with_any_selected_changes_last_reversed p2c jobname opts _ _ ps job =
+ case p2c ps of
+ ps_to_consider :> other_ps ->
+         if All `elem` opts || DryRun `elem` opts
+         then job $ invert other_ps :> invert ps_to_consider
+         else do pc <- without_buffering $
+                       tentatively_text_select "" jobname (Noun "patch") LastReversed
+                                             opts ps_len 0 NilRL init_tps init_pc
+                 job $ selected_patches_last_reversed rejected_ps pc
+         where rejected_ps = other_ps
+               ps_len = lengthFL init_tps
+               (init_pc, init_tps) = patch_choices_tps ps_to_consider
+
+patches_to_consider_last :: Patchy p
+                    => [FilePath]  -- ^ files
+                    -> FL p C(x y) -- ^ patches
+                    -> (FL p :> FL p) C(x y)
+patches_to_consider_last [] ps = NilFL :> ps
+patches_to_consider_last fs ps =
+  tp_patches $ separate_middle_last_from_first $ select_not_touching fs
+             $ patch_choices $ ps
hunk ./src/Darcs/SelectChanges.lhs 325
-patches_to_consider :: Patchy p => Maybe WhichChanges
-                    -> [FilePath]  -- ^ files
-                    -> FL p     -- ^ patches
-                    -> (FL p :> FL p)
-patches_to_consider mwhichch fs ps =
-  let ps' = if mwhichch == Just LastReversed || mwhichch == Just FirstReversed then invert ps else ps
-      f = case mwhichch of Just Last -> separate_middle_last_from_first
-                           Just FirstReversed -> separate_middle_last_from_first
-                           _ -> separate_first_middle_from_last
-      deal_with_fs = case mwhichch of Just Last -> select_not_touching   fs
-                                      Just FirstReversed -> select_not_touching   fs
-                                      _ -> deselect_not_touching fs
-  in if null fs then if mwhichch == Just Last || mwhichch == Just FirstReversed then NilFL :> ps' else ps' :> NilFL
-                else tp_patches $ f $ deal_with_fs $ patch_choices ps'
+patches_to_consider_first :: Patchy p
+                    => [FilePath]  -- ^ files
+                    -> FL p C(x y) -- ^ patches
+                    -> (FL p :> FL p) C(x y)
+patches_to_consider_first [] ps = ps :> NilFL
+patches_to_consider_first fs ps =
+  tp_patches $ separate_first_middle_from_last $ deselect_not_touching fs
+             $ patch_choices $ ps
hunk ./src/Darcs/SelectChanges.lhs 334
-patches_to_consider' :: RepoPatch p => Maybe WhichChanges
-                     -> [FilePath]  -- ^ files
+patches_to_consider_first_reversed :: Patchy p
+                    => [FilePath]  -- ^ files
+                    -> FL p C(x y) -- ^ patches
+                    -> (FL p :> FL p) C(y x)
+patches_to_consider_first_reversed [] ps = NilFL :> (invert ps)
+patches_to_consider_first_reversed fs ps =
+  tp_patches $ separate_middle_last_from_first $ select_not_touching fs
+             $ patch_choices $ (invert ps)
+
+patches_to_consider_last_reversed :: Patchy p
+                    => [FilePath]  -- ^ files
+                    -> FL p C(x y) -- ^ patches
+                    -> (FL p :> FL p) C(y x)
+patches_to_consider_last_reversed [] ps = NilFL :> (invert ps)
+patches_to_consider_last_reversed fs ps =
+  tp_patches $ separate_first_middle_from_last $ deselect_not_touching fs
+             $ patch_choices $ (invert ps)
+
+patches_to_consider_first' :: RepoPatch p
+                     => [FilePath]  -- ^ files
hunk ./src/Darcs/SelectChanges.lhs 355
-                     -> FL (PatchInfoAnd p) -- ^ patches
-                     -> FL (PatchInfoAnd p) :> FL (PatchInfoAnd p)
-patches_to_consider' mwhichch fs opts ps =
-  let ps' = if mwhichch == Just LastReversed || mwhichch == Just FirstReversed then invert ps else ps
-      f = case mwhichch of Just Last -> separate_middle_last_from_first
-                           Just FirstReversed -> separate_middle_last_from_first
-                           _ -> separate_first_middle_from_last
-      deal_with_fs = case mwhichch of Just Last -> select_not_touching   fs
-                                      Just FirstReversed -> select_not_touching   fs
-                                      _ -> deselect_not_touching fs
-      deselect_unwanted pc =
+                     -> FL (PatchInfoAnd p) C(x y) -- ^ patches
+                     -> (FL (PatchInfoAnd p) :> FL (PatchInfoAnd p)) C(x y)
+patches_to_consider_first' fs opts ps =
+  let deselect_unwanted pc =
hunk ./src/Darcs/SelectChanges.lhs 360
-        then case mwhichch of
-             Just Last ->  bug "don't support patch matching with Last in wasp"
-             Just FirstReversed ->  bug "don't support patch matching with FirstReversed in wasp"
-             _ -> if DontGrabDeps `elem` opts
+        then if DontGrabDeps `elem` opts
hunk ./src/Darcs/SelectChanges.lhs 364
-      iswanted = let maybe_invert = if mwhichch == Just LastReversed || mwhichch == Just FirstReversed then invert else id
-                 in (match_a_patch opts . hopefully . maybe_invert . tp_patch)
+      iswanted = match_a_patch opts . hopefully . tp_patch
hunk ./src/Darcs/SelectChanges.lhs 366
-     then if mwhichch == Just Last || mwhichch == Just FirstReversed then NilFL :> ps' else ps' :> NilFL
-     else tp_patches $ f $ deal_with_fs $ deselect_unwanted $ patch_choices ps'
+     then ps :> NilFL
+     else tp_patches $ separate_first_middle_from_last $ deselect_not_touching fs
+                     $ deselect_unwanted $ patch_choices ps
+
+patches_to_consider_last' :: RepoPatch p
+                     => [FilePath]  -- ^ files
+                     -> [DarcsFlag] -- ^ opts
+                     -> FL (PatchInfoAnd p) C(x y) -- ^ patches
+                     -> (FL (PatchInfoAnd p) :> FL (PatchInfoAnd p)) C(x y)
+patches_to_consider_last' fs opts ps =
+  let deselect_unwanted pc =
+        if have_nonrange_match opts
+        then bug "don't support patch matching with Last in wasp"
+        else pc
+  in if null fs && not (have_nonrange_match opts)
+     then NilFL :> ps
+     else tp_patches $ separate_middle_last_from_first $ select_not_touching fs
+                     $ deselect_unwanted $ patch_choices ps
+
+patches_to_consider_first_reversed' :: RepoPatch p
+                     => [FilePath]  -- ^ files
+                     -> [DarcsFlag] -- ^ opts
+                     -> FL (PatchInfoAnd p) C(x y) -- ^ patches
+                     -> (FL (PatchInfoAnd p) :> FL (PatchInfoAnd p)) C(y x)
+patches_to_consider_first_reversed' fs opts ps =
+  let deselect_unwanted pc =
+        if have_nonrange_match opts
+        then bug "don't support patch matching with FirstReversed in wasp"
+        else pc
+  in if null fs && not (have_nonrange_match opts)
+     then NilFL :> (invert ps)
+     else tp_patches $ separate_middle_last_from_first $ select_not_touching fs
+                     $ deselect_unwanted $ patch_choices $ invert ps
+
+patches_to_consider_last_reversed' :: RepoPatch p
+                     => [FilePath]  -- ^ files
+                     -> [DarcsFlag] -- ^ opts
+                     -> FL (PatchInfoAnd p) C(x y) -- ^ patches
+                     -> (FL (PatchInfoAnd p) :> FL (PatchInfoAnd p)) C(y x)
+patches_to_consider_last_reversed' fs opts ps =
+  let deselect_unwanted pc =
+        if have_nonrange_match opts
+        then if DontGrabDeps `elem` opts
+             then force_matching_last (not.iswanted) pc
+             else make_everything_later $ force_matching_first iswanted pc
+        else pc
+      iswanted = match_a_patch opts . hopefully . invert . tp_patch
+  in if null fs && not (have_nonrange_match opts)
+     then (invert ps) :> NilFL
+     else tp_patches $ separate_first_middle_from_last $ deselect_not_touching fs
+                     $ deselect_unwanted $ patch_choices $ invert ps
+
+patches_to_consider_nothing' :: RepoPatch p
+                     => [FilePath]  -- ^ files
+                     -> [DarcsFlag] -- ^ opts
+                     -> FL (PatchInfoAnd p) C(x y) -- ^ patches
+                     -> (FL (PatchInfoAnd p) :> FL (PatchInfoAnd p)) C(x y)
+patches_to_consider_nothing' fs opts ps =
+  let deselect_unwanted pc =
+        if have_nonrange_match opts
+        then if DontGrabDeps `elem` opts
+             then force_matching_last (not.iswanted) pc
+             else make_everything_later $ force_matching_first iswanted pc
+        else pc
+      iswanted = match_a_patch opts . hopefully . tp_patch
+  in if null fs && not (have_nonrange_match opts)
+     then ps :> NilFL
+     else tp_patches $ separate_first_middle_from_last $ deselect_not_touching fs
+                     $ deselect_unwanted $ patch_choices ps
hunk ./src/Darcs/SelectChanges.lhs 437
-selected_patches :: Patchy p => WhichChanges
-                 -> FL p -- ^ patches set aside
-                 -> PatchChoices p
-                 -> (FL p :> FL p)
-selected_patches whichch other_ps pc =
-  case whichch of
-  Last -> case separate_last_from_first_middle pc of
-          xs :> ys -> other_ps +>+ mapFL_FL tp_patch xs :> mapFL_FL tp_patch ys
-  First -> case separate_first_from_middle_last pc of
-           xs :> ys -> mapFL_FL tp_patch xs :> mapFL_FL tp_patch ys +>+ other_ps
-  LastReversed -> case separate_first_from_middle_last pc of
-                  xs :> ys -> invert (mapFL_FL tp_patch ys +>+ other_ps) :> invert (mapFL_FL tp_patch xs)
-  FirstReversed -> case separate_last_from_first_middle pc of
-                   xs :> ys -> invert (mapFL_FL tp_patch ys) :> invert (other_ps +>+ mapFL_FL tp_patch xs)
+selected_patches_last :: Patchy p => FL p C(x y) -> PatchChoices p C(y z)
+                      -> (FL p :> FL p) C(x z)
+selected_patches_last other_ps pc =
+  case separate_last_from_first_middle pc of
+  xs :> ys -> other_ps +>+ mapFL_FL tp_patch xs :> mapFL_FL tp_patch ys
+
+selected_patches_first :: Patchy p => FL p C(y z) -> PatchChoices p C(x y)
+                       -> (FL p :> FL p) C(x z)
+selected_patches_first other_ps pc =
+  case separate_first_from_middle_last pc of
+  xs :> ys -> mapFL_FL tp_patch xs :> mapFL_FL tp_patch ys +>+ other_ps
hunk ./src/Darcs/SelectChanges.lhs 449
-text_select :: Patchy p => String -> WhichChanges -> [DarcsFlag] -> Int -> Int
-            -> RL (TaggedPatch p) -> FL (TaggedPatch p) -> PatchChoices p
-            -> IO (PatchChoices p)
+selected_patches_last_reversed :: Patchy p => FL p C(y x) -> PatchChoices p C(z y)
+                               -> (FL p :> FL p) C(x z)
+selected_patches_last_reversed other_ps pc =
+  case separate_first_from_middle_last pc of
+  xs :> ys -> invert (mapFL_FL tp_patch ys +>+ other_ps) :> invert (mapFL_FL tp_patch xs)
+
+selected_patches_first_reversed :: Patchy p => FL p C(z y) -> PatchChoices p C(y x)
+                                -> (FL p :> FL p) C(x z)
+selected_patches_first_reversed other_ps pc =
+  case separate_last_from_first_middle pc of
+  xs :> ys -> invert (mapFL_FL tp_patch ys) :> invert (other_ps +>+ mapFL_FL tp_patch xs)
+
+text_select :: forall p C(x y z). Patchy p => String -> WhichChanges -> [DarcsFlag] -> Int -> Int
+            -> RL (TaggedPatch p) C(x y) -> FL (TaggedPatch p) C(y z) -> PatchChoices p C(x z)
+            -> IO ((PatchChoices p) C(x z))
hunk ./src/Darcs/SelectChanges.lhs 468
-      printFriendly opts viewp
+      (printFriendly opts) `unseal2` viewp
hunk ./src/Darcs/SelectChanges.lhs 475
-        helper :: PatchChoices p -> p
+        helper :: PatchChoices p C(a b) -> p C(a b)
hunk ./src/Darcs/SelectChanges.lhs 506
+        repeat_this :: Patchy p => IO ((PatchChoices p) C(x z))
hunk ./src/Darcs/SelectChanges.lhs 515
-            'v' -> printPatch viewp >> repeat_this
-            'p' -> printPatchPager viewp >> repeat_this
-            'x' -> do putDocLn $ prefix "    " $ summary viewp
+            'v' -> printPatch `unseal2` viewp >> repeat_this
+            'p' -> printPatchPager `unseal2` viewp >> repeat_this
+            'x' -> do (putDocLn . prefix "    " . summary) `unseal2` viewp
hunk ./src/Darcs/SelectChanges.lhs 552
-        viewp = if whichch == LastReversed || whichch == FirstReversed then invert (tp_patch tp) else tp_patch tp
+        viewp = if whichch == LastReversed || whichch == FirstReversed then seal2 $ invert (tp_patch tp) else seal2 $ tp_patch tp
hunk ./src/Darcs/SelectChanges.lhs 561
-text_view :: Patchy p => [DarcsFlag] -> Int -> Int
-            -> RL (TaggedPatch p) -> FL (TaggedPatch p) -> PatchChoices p
-            -> IO (PatchChoices p)
-
-text_view _ _ _ _ NilFL _ = return $ patch_choices NilFL --return pc
+text_view :: forall p C(x y u r s). Patchy p => [DarcsFlag] -> Int -> Int
+            -> RL (TaggedPatch p) C(x y) -> FL (TaggedPatch p) C(y u) -> PatchChoices p C(r s)
+            -> IO ((PatchChoices p) C(r s))
+text_view _ _ _ _ NilFL _ = return $ patch_choices $ unsafeCoerceP NilFL --return pc
hunk ./src/Darcs/SelectChanges.lhs 580
-                                   n tps_done tps_todo' pc
+                                   n tps_done NilFL pc
hunk ./src/Darcs/SelectChanges.lhs 601
+        repeat_this :: IO ((PatchChoices p) C(r s))
hunk ./src/Darcs/SelectChanges.lhs 620
-                        -> Int -> Int -> RL (TaggedPatch p) -> FL (TaggedPatch p)
-                        -> PatchChoices p
-                        -> IO (PatchChoices p)
+                        -> Int -> Int -> RL (TaggedPatch p) C(x y) -> FL (TaggedPatch p) C(y z)
+                        -> PatchChoices p C(x z)
+                        -> IO ((PatchChoices p) C(x z))
hunk ./src/Darcs/SelectChanges.lhs 625
-                        ps_todo pc = do
-  when (numSkipped > 0) show_skipped
-  text_select jobname whichch opts n_max (n + numSkipped)
-    (reverseFL skipped +<+ ps_done) unskipped pc
- where
-  skipped :> unskipped = spanFL (\p -> isJust $ is_patch_first p pc) ps_todo
-  numSkipped  = lengthFL skipped
-  show_skipped = do putStrLn $ _doing_ ++ _with_ ++ "."
-                    when (Verbose `elem` opts) $ showskippedpatch skipped
+                        ps_todo pc =
+  case spanFL (\p -> isJust $ is_patch_first p pc) ps_todo of
+  skipped :> unskipped -> do
+   when (numSkipped > 0) show_skipped
+   text_select jobname whichch opts n_max (n + numSkipped)
+     (reverseFL skipped +<+ ps_done) unskipped pc
+   where
+   numSkipped  = lengthFL skipped
+   show_skipped = do putStrLn $ _doing_ ++ _with_ ++ "."
+                     when (Verbose `elem` opts) $ showskippedpatch skipped
hunk ./src/Darcs/SelectChanges.lhs 640
+      showskippedpatch :: Patchy p => FL (TaggedPatch p) C(y t) -> IO ()

[make WhatsNew work with type witnesses
Jason Dagit <[EMAIL PROTECTED]>**20080813044354] hunk ./src/Darcs/Commands/WhatsNew.lhs 22
+#include "gadts.h"
hunk ./src/Darcs/Commands/WhatsNew.lhs 38
-import Darcs.Repository ( withRepository, ($-), slurp_recorded,
+import Darcs.Repository ( Repository, withRepository, ($-), slurp_recorded,
hunk ./src/Darcs/Commands/WhatsNew.lhs 42
-import Darcs.Patch ( summarize, apply_to_slurpy, is_hunk,
+import Darcs.Patch ( RepoPatch, Prim, summarize, apply_to_slurpy, is_hunk,
hunk ./src/Darcs/Commands/WhatsNew.lhs 45
-import Darcs.Patch.Real ( prim2real )
+import Darcs.Patch.Real ( RealPatch, prim2real )
hunk ./src/Darcs/Commands/WhatsNew.lhs 47
-import Darcs.Patch.Ordered ( FL(..), mapFL_FL, reverseRL, reverseFL, (:>)(..) )
-import Darcs.Sealed ( unsafeUnseal )
+import Darcs.Patch.Ordered ( FL(..), mapFL_FL, reverseRL, reverseFL, (:>)(..), nullFL )
+import Darcs.Sealed ( Sealed(..), unseal, mapSeal )
hunk ./src/Darcs/Commands/WhatsNew.lhs 106
-        select_files = unsafeUnseal . (choose_touching pre_changed_files)
-        cho = select_files chold
+        select_files = choose_touching pre_changed_files
+    Sealed cho <- return $ select_files chold
hunk ./src/Darcs/Commands/WhatsNew.lhs 109
-    cha :> _ <- return $ partitionRL is_hunk $ reverseFL $ select_files all_changes
+    Sealed all_fs <- return $ select_files all_changes
+    cha :> _ <- return $ partitionRL is_hunk $ reverseFL all_fs
hunk ./src/Darcs/Commands/WhatsNew.lhs 114
-    case (chn, cho) of (NilFL, NilFL) -> do putStrLn "No changes!"
-                                            exitWith $ ExitFailure 1
-                       _ -> return ()
+    exitOnNoChanges (chn, cho)
hunk ./src/Darcs/Commands/WhatsNew.lhs 116
-    case chn of NilFL -> return ()
-                _ -> putDocLn $ lower_as $ renderString $ summarize chn
-           where lower_as x = vcat $ map (text . l_as) $ lines x
-                 l_as ('A':x) = 'a':x
-                 l_as x = x
+    printSummary chn
+    where lower_as x = vcat $ map (text . l_as) $ lines x
+          l_as ('A':x) = 'a':x
+          l_as x = x
+          exitOnNoChanges :: (FL Prim C(x y), FL p C(u v)) -> IO ()
+          exitOnNoChanges (NilFL, NilFL) = do putStrLn "No changes!"
+                                              exitWith $ ExitFailure 1
+          exitOnNoChanges _ = return ()
+          printSummary :: FL Prim C(x y) -> IO ()
+          printSummary NilFL = return ()
+          printSummary new = putDocLn $ lower_as $ renderString $ summarize new
hunk ./src/Darcs/Commands/WhatsNew.lhs 133
-    case changes of
-      NilFL -> do putStrLn "No changes!"
-                  exitWith $ ExitFailure 1
-      _ ->
-          let pre_changed_files = apply_to_filepaths (invert changes) $ map toFilePath files
-          in
-            case mapFL_FL prim2real $ unsafeUnseal $ choose_touching pre_changed_files changes of
-            NilFL -> do putStrLn "No changes!"
-                        exitWith $ ExitFailure 1
-            ch ->      if Summary `elem` opts
-                       then putDocLn $ summarize ch
-                       else if Unified `elem` opts
-                            then do s <- slurp_recorded repository
-                                    contextualPrintPatch s ch
-                            else printPatch ch
+    when (nullFL changes) $ putStrLn "No changes!" >> (exitWith $ ExitFailure 1)
+    let pre_changed_files = apply_to_filepaths (invert changes) $ map toFilePath files
+    unseal (printSummary repository) $ mapSeal (mapFL_FL prim2real) $ choose_touching pre_changed_files changes
+       where printSummary :: RepoPatch p => Repository p C(r u t) -> FL RealPatch C(r y) -> IO ()
+             printSummary _ NilFL = do putStrLn "No changes!"
+                                       exitWith $ ExitFailure 1
+             printSummary r ch = if Summary `elem` opts
+                                 then putDocLn $ summarize ch
+                                 else if Unified `elem` opts
+                                      then do s <- slurp_recorded r
+                                              contextualPrintPatch s ch
+                                      else printPatch ch

[refine type witnesses in SelectChanges
Jason Dagit <[EMAIL PROTECTED]>**20080813050425] hunk ./src/Darcs/SelectChanges.lhs 83
-     -> (FORALL(m n) (FL p :> FL p) C(m n) -> IO a) -- job
+     -> ((FL p :> FL p) C(x y) -> IO a) -- job
hunk ./src/Darcs/SelectChanges.lhs 93
-     -> (FORALL(m n) (FL p :> FL p) C(m n) -> IO a) -- job
+     -> ((FL p :> FL p) C(x y) -> IO a) -- job

[partial type witnesses in Unrevert
Jason Dagit <[EMAIL PROTECTED]>**20080813053837] hunk ./src/Darcs/Commands/Unrevert.lhs 21
+#include "gadts.h"
hunk ./src/Darcs/Commands/Unrevert.lhs 30
-import Darcs.Repository ( PatchSet, Repository, withRepoLock, ($-),
+import Darcs.Repository ( SealedPatchSet, Repository, withRepoLock, ($-),
hunk ./src/Darcs/Commands/Unrevert.lhs 91
-  them <- unrevert_patch_bundle repository
+  Sealed them <- unrevert_patch_bundle repository
hunk ./src/Darcs/Commands/Unrevert.lhs 95
-    (_, us' :\/: them') -> do
+    (_, (h_us:<:_) :\/: (h_them:<:_)) -> do
hunk ./src/Darcs/Commands/Unrevert.lhs 97
-                   (reverseRL $ headRL us') (reverseRL $ headRL them')
+                   (reverseRL h_us) (reverseRL h_them)
hunk ./src/Darcs/Commands/Unrevert.lhs 110
-      where headRL (x:<:_) = x
-            headRL NilRL = impossible
+    _ -> impossible
hunk ./src/Darcs/Commands/Unrevert.lhs 115
-write_unrevert :: RepoPatch p => Repository p -> FL Prim -> Slurpy -> FL Prim -> IO ()
+write_unrevert :: RepoPatch p => Repository p C(r u t) -> FL Prim C(s b) -> Slurpy -> FL Prim C(r s) -> IO ()
hunk ./src/Darcs/Commands/Unrevert.lhs 132
-                where fromRepoPrims :: RepoPatch p => Repository p -> FL Prim -> p
+                where fromRepoPrims :: RepoPatch p => Repository p C(r u t) -> FL Prim C(r y) -> p C(r y)
hunk ./src/Darcs/Commands/Unrevert.lhs 137
-unrevert_patch_bundle :: RepoPatch p => Repository p -> IO (PatchSet p)
+unrevert_patch_bundle :: RepoPatch p => Repository p C(r u t) -> IO (SealedPatchSet p)
hunk ./src/Darcs/Commands/Unrevert.lhs 142
-      Right (Sealed ps) -> return ps
+      Right ps -> return ps

[correct a bug in with_selected_patches_from_repository
Jason Dagit <[EMAIL PROTECTED]>**20080815201125
 Fixing this bug allows w_s_p_f_r to have the expected type signature
 and also corrects a problem where the non-selected patches were returned
 in the wrong context.
] hunk ./src/Darcs/Commands/AmendRecord.lhs 120
-    with_selected_patch_from_repo "amend" repository opts True $ \ (_ :> oldp) -> do
+    with_selected_patch_from_repo "amend" repository opts True $ \ (oldp :> _) -> do
hunk ./src/Darcs/SelectChanges.lhs 44
-import Darcs.Patch ( RepoPatch, Patchy, Prim, summary, commute,
+import Darcs.Patch ( RepoPatch, Patchy, Prim, summary,
hunk ./src/Darcs/SelectChanges.lhs 48
-import Darcs.Patch.Ordered ( FL(..), RL(..), (:>)(..),
-                             (+>+), lengthFL, concatRL, mapFL_FL,
-                             spanFL, reverseFL, (+<+), mapFL, reverseRL,
+import Darcs.Patch.Ordered ( FL(..), RL(..), (:>)(..),
+                             (+>+), lengthFL, concatRL, mapFL_FL,
+                             spanFL, reverseFL, (+<+), mapFL,
hunk ./src/Darcs/SelectChanges.lhs 193
-with_selected_patch_from_repo :: RepoPatch p => String -> Repository p C(r u t) -> [DarcsFlag] -> Bool
-                              -> (FORALL(a b) ((FL (PatchInfoAnd p) :> (PatchInfoAnd p)) C(a b)) -> IO ()) -> IO ()
+with_selected_patch_from_repo :: forall p C(r u t). RepoPatch p => String -> Repository p C(r u t) -> [DarcsFlag] -> Bool
+                              -> (FORALL(a) ((PatchInfoAnd p) :> (FL (PatchInfoAnd p))) C(a r) -> IO ()) -> IO ()
hunk ./src/Darcs/SelectChanges.lhs 200
+    let pend_ = n2pia $ anonymous $ fromPrims pend
hunk ./src/Darcs/SelectChanges.lhs 202
-                              (concatRL p_s) ((n2pia $ anonymous $ fromPrims pend) :>: NilFL)
+                              (concatRL p_s) NilFL pend_
hunk ./src/Darcs/SelectChanges.lhs 204
-        Just (FlippedSeal (s_and_pend :> selected)) ->
-           case reverseFL s_and_pend of
-           pend':<:skipped ->
-            case commute (pend' :> selected) of
-            Just (selected' :> _) -> job (reverseRL skipped :> selected')
-            Nothing -> impossible
-           NilRL -> bug "empty selected and pending in with_selected_patch_from_repo" -- The previous version of this
-                                                                                      -- function didn't check this case.
+        Just (FlippedSeal selected_and_skipped) -> job selected_and_skipped
hunk ./src/Darcs/SelectChanges.lhs 208
+-- | 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.
hunk ./src/Darcs/SelectChanges.lhs 212
-      -> RL (PatchInfoAnd p) C(x y) -> FL (PatchInfoAnd p) C(y z)
-      -> IO (Maybe (FlippedSeal (FL (PatchInfoAnd p) :> (PatchInfoAnd p)) C(z)))
-wspfr _ _ NilRL _ = return Nothing
-wspfr jn matches (p:<:pps) skipped
-    | not $ matches p = wspfr jn matches pps (p:>:skipped)
+      -> RL (PatchInfoAnd p) C(x y) -> FL (PatchInfoAnd p) C(y z) -> (PatchInfoAnd p) C(z u)
+      -> IO (Maybe (FlippedSeal ((PatchInfoAnd p) :> FL (PatchInfoAnd p)) C(z)))
+wspfr _ _ NilRL _ _ = return Nothing
+wspfr jn matches (p:<:pps) skipped pend
+    | not $ matches p = wspfr jn matches pps (p:>:skipped) pend
hunk ./src/Darcs/SelectChanges.lhs 218
-    case commuteFL (p :> skipped) of
+    case commuteFL (p :> skipped +>+ (pend :>: NilFL)) of
hunk ./src/Darcs/SelectChanges.lhs 221
-                  wspfr jn matches pps (p:>:skipped)
-    Just (skipped' :> p') -> do
+                  wspfr jn matches pps (p:>:skipped) pend
+    Just _ -> do -- We did this just to be sure that the patches commute freely
hunk ./src/Darcs/SelectChanges.lhs 224
-      let repeat_this  = wspfr jn matches (p:<:pps) skipped
+      let repeat_this  = wspfr jn matches (p:<:pps) skipped pend
hunk ./src/Darcs/SelectChanges.lhs 235
-        'y' -> return $ Just $ flipSeal $ skipped' :> p'
-        'n' -> wspfr jn matches pps (p:>:skipped)
+        'y' -> return $ Just $ flipSeal $ p :> skipped
+        'n' -> wspfr jn matches pps (p:>:skipped) pend

[replace separate_middle_last_from_first and separate_last_from_first_middle with get_choices
Jason Dagit <[EMAIL PROTECTED]>**20080815222635] hunk ./src/Darcs/Patch/Choices.lhs 27
-                      separate_middle_last_from_first,
-                      separate_last_from_first_middle,
hunk ./src/Darcs/Patch/Choices.lhs 132
-separate_last_from_first_middle :: Patchy p => PatchChoices p C(x z)
-                                -> (FL (TaggedPatch p) :> FL (TaggedPatch p)) C(x z)
-separate_last_from_first_middle pc = case get_choices pc of
-                                     fc :> mc :> lc -> fc +>+ mc :> lc
-
-separate_middle_last_from_first :: Patchy p => PatchChoices p C(x z)
-                                -> (FL (TaggedPatch p) :> FL (TaggedPatch p)) C(x z)
-separate_middle_last_from_first pc = case get_choices pc of
-                                     fc :> mc :> lc -> fc :> mc +>+ lc
-
hunk ./src/Darcs/SelectChanges.lhs 54
-                      is_patch_first,
+                      get_choices,
hunk ./src/Darcs/SelectChanges.lhs 57
-                      separate_middle_last_from_first,
+                      is_patch_first,
hunk ./src/Darcs/SelectChanges.lhs 59
-                      separate_last_from_first_middle,
hunk ./src/Darcs/SelectChanges.lhs 318
-  tp_patches $ separate_middle_last_from_first $ select_not_touching fs
-             $ patch_choices $ ps
+ case get_choices $ select_not_touching fs $ patch_choices ps of
+  fc :> mc :> lc -> tp_patches $ fc :> mc +>+ lc
hunk ./src/Darcs/SelectChanges.lhs 336
-  tp_patches $ separate_middle_last_from_first $ select_not_touching fs
-             $ patch_choices $ (invert ps)
+ case get_choices $ select_not_touching fs $ patch_choices $ invert ps of
+  fc :> mc :> lc -> tp_patches $ fc :> mc +>+ lc
hunk ./src/Darcs/SelectChanges.lhs 378
-     else tp_patches $ separate_middle_last_from_first $ select_not_touching fs
-                     $ deselect_unwanted $ patch_choices ps
+     else case get_choices $ select_not_touching fs $ deselect_unwanted $ patch_choices ps of
+           fc :> mc :> lc -> tp_patches $ fc :> mc +>+ lc
hunk ./src/Darcs/SelectChanges.lhs 393
-     else tp_patches $ separate_middle_last_from_first $ select_not_touching fs
-                     $ deselect_unwanted $ patch_choices $ invert ps
+     else case get_choices $ select_not_touching fs $ deselect_unwanted $ patch_choices $ invert ps of
+           fc :> mc :> lc -> tp_patches $ fc :> mc +>+ lc
hunk ./src/Darcs/SelectChanges.lhs 436
-  case separate_last_from_first_middle pc of
-  xs :> ys -> other_ps +>+ mapFL_FL tp_patch xs :> mapFL_FL tp_patch ys
+  case get_choices pc of
+   fc :> mc :> lc -> other_ps +>+ mapFL_FL tp_patch (fc +>+ mc) :> mapFL_FL tp_patch lc
hunk ./src/Darcs/SelectChanges.lhs 454
-  case separate_last_from_first_middle pc of
-  xs :> ys -> invert (mapFL_FL tp_patch ys) :> invert (other_ps +>+ mapFL_FL tp_patch xs)
+  case get_choices pc of
+  fc :> mc :> lc -> invert (mapFL_FL tp_patch lc) :> invert (other_ps +>+ mapFL_FL tp_patch (fc +>+ mc))

Context:

[remove a few unsightly functions
Jason Dagit <[EMAIL PROTECTED]>**20080813061256] 
[Generalize HashRepo.clean_pristine to HashIO.clean_hashdir.
[EMAIL PROTECTED] 
[Add writeSlurpy to roll out a copy of slurpy into a filesystem.
[EMAIL PROTECTED] 
[fix breakage in URL.
David Roundy <[EMAIL PROTECTED]>**20080812141220] 
[Parametrize "pristine.hashed" in a bunch of functions.
[EMAIL PROTECTED] 
[Rework URL module for multi threading.
Dmitry Kurochkin <[EMAIL PROTECTED]>**20080811221209] 
[Add thread synchronization to URL module and resume select() if interrupted by signal in curl module.
Dmitry Kurochkin <[EMAIL PROTECTED]>**20080810092810] 
[Handle error case with empty URL in URL.waitNextUrl function.
Dmitry Kurochkin <[EMAIL PROTECTED]>**20080809221755] 
[Add --debug-http flag to enable curl and libwww debug at run-time instead of compile-time.
Dmitry Kurochkin <[EMAIL PROTECTED]>**20080809154834] 
[Print a warning when the remote end does not have darcs 2.
Eric Kow <[EMAIL PROTECTED]>**20080811100933
 
 Two reasons:
 (1) right now people get a scary warning from ssh when it can't fetch
     some non-essential files (it used to be that we would send stderr from ssh
     to /dev/null, but that has other problems...)
 (2) darcs transfer-mode more widely deployed could help a lot of people
     wrt darcs performance
] 
[Added a beware note to the unrecord command
[EMAIL PROTECTED] 
[Fixed typo
[EMAIL PROTECTED] 
[Better debug messages in URL module.
Dmitry Kurochkin <[EMAIL PROTECTED]>**20080809215247] 
[make Convert.lhs compile.
David Roundy <[EMAIL PROTECTED]>**20080810201725] 
[Refactor `darcs convert' warning at kowey's request.
Trent W. Buck <[EMAIL PROTECTED]>**20080810110014] 
[Expand formats text based in part on suggestions from darcs-users
Max Battcher <[EMAIL PROTECTED]>**20080809184043] 
[Fixes to global cache text based on darcs-users suggestions
Max Battcher <[EMAIL PROTECTED]>**20080809181424] 
[Add user-focused documentation of repository format options
Max Battcher <[EMAIL PROTECTED]>**20080807195429] 
[Highlight the global cache as a best practice
Max Battcher <[EMAIL PROTECTED]>**20080807193918] 
[Describe best practice in `darcs convert --help'.
Trent W. Buck <[EMAIL PROTECTED]>**20080810110615] 
[add type witnesses to TouchesFiles
Jason Dagit <[EMAIL PROTECTED]>**20080810063403] 
[improve type safety of Darcs.Repository.Internal.
Jason Dagit <[EMAIL PROTECTED]>**20080810051109] 
[add type witnesses to Patch/Choices.lhs
Jason Dagit <[EMAIL PROTECTED]>**20080809000237] 
[add type witnesses to Population
Jason Dagit <[EMAIL PROTECTED]>**20080808053252] 
[add type witnesses to CommandsAux
Jason Dagit <[EMAIL PROTECTED]>**20080808052738] 
[Add type witnesses to more modules, rounding out Darcs/Repository/*
Jason Dagit <[EMAIL PROTECTED]>**20080808050947] 
[UF8.lhs: remove unusued functions/imports/docs
[EMAIL PROTECTED] 
[Resolve issue974 : do not pass both -optc-g and -opta-g to GHC
Eric Kow <[EMAIL PROTECTED]>**20080807073620] 
[make this test more cross-platform
Simon Michael <[EMAIL PROTECTED]>**20080807103433] 
[document how to run unit tests
Simon Michael <[EMAIL PROTECTED]>**20080807030416] 
[move (most) failing tests to bugs for clean test output
Simon Michael <[EMAIL PROTECTED]>**20080806191336] 
[fix an old spelling error
Simon Michael <[EMAIL PROTECTED]>**20080806170432] 
[make searching for "test:" in makefile work
Simon Michael <[EMAIL PROTECTED]>**20080805222241] 
[run only normal (expected to pass) tests by default
Simon Michael <[EMAIL PROTECTED]>**20080805222108] 
[Downplay quantum mechanics link.
Eric Kow <[EMAIL PROTECTED]>**20080806124109
 Besides, darcs has far more than 3 users by now.
] 
[Make patch theory intro more inviting to math people.
Eric Kow <[EMAIL PROTECTED]>**20080806123411] 
[cleanup and slight rewrite of the test docs
Simon Michael <[EMAIL PROTECTED]>**20080806165949] 
[make order of running tests consistent
Simon Michael <[EMAIL PROTECTED]>**20080806172123] 
[fixed a bug in identity_commutes property
Jason Dagit <[EMAIL PROTECTED]>**20080808023025
 In the right identity check the patch order should have gone from
 (identity :> p) to (p2 :> i2).  I added a rigid type context too
 so that ghc 6.8 and newer would type the definition.
] 
[Make Darcs.Repository.Internal compile with type witnesses.
Jason Dagit <[EMAIL PROTECTED]>**20080808015343] 
[small makefile refactoring: allow just the normal tests to be run, without bugs/*
Simon Michael <[EMAIL PROTECTED]>**20080805203242] 
[Rectify dist help
[EMAIL PROTECTED]
 Removed the "make dist" suggestion, the manual is a better place for that.
 Instead, make clear that it operates on a clean copy of the tree, and
 mention the "predist" functionality.
] 
[website: explain that darcs 2 is required to get the darcs source.
Simon Michael <[EMAIL PROTECTED]>**20080803181216] 
[Canonize Gaetan Lehmann and Daniel Buenzli.
Eric Kow <[EMAIL PROTECTED]>**20080730104357
 (for Daniel B, avoid an accent in his name)
] 
[configure: check for packages needed with split base.
Eric Kow <[EMAIL PROTECTED]>**20080730103840
 Now that all packages must be used explicitly.
] 
[fix type witness compile errors specific to ghc 6.8
Jason Dagit <[EMAIL PROTECTED]>**20080722182729] 
[avoid import of unused function fromMaybe.
David Roundy <[EMAIL PROTECTED]>**20080729172825] 
[configure: suggest regex-compat before text
Eric Kow <[EMAIL PROTECTED]>**20080725095336] 
[configure: mention Haskell in 'try installing' suggestion
Eric Kow <[EMAIL PROTECTED]>**20080725095015] 
[Typo (Text.Regex)
Eric Kow <[EMAIL PROTECTED]>**20080715121708] 
[Use haskeline to have a readline-like behavior when asking something to the user
[EMAIL PROTECTED]
 Unlike the implementations using readline or editline packages, this code
 code doesn't break the Ctrl-C behavior.
] 
[Improve generic rules for English plurals. 
Eric Kow <[EMAIL PROTECTED]>**20080604123728] 
[add configure check for Network.URI.
David Roundy <[EMAIL PROTECTED]>**20080711011914] 
[add -hide-all-packages to default GHCFLAGS.
David Roundy <[EMAIL PROTECTED]>**20080711010952] 
[add support for outputting patch numbers in darcs changes.
David Roundy <[EMAIL PROTECTED]>**20080710011211] 
[add support for matching single patches by index.
David Roundy <[EMAIL PROTECTED]>**20080710004512] 
[add support for matching ranges of patches (counting back from present).
David Roundy <[EMAIL PROTECTED]>**20080710003225] 
[Better avoid silly manpage error.
Trent W. Buck <[EMAIL PROTECTED]>**20080704024920
 
 It turned out only initialize's help string used 'quotes', so just
 remove them.  This makes init's docstring consistent with the others.
] 
[Missing period at end of sentence.
Trent W. Buck <[EMAIL PROTECTED]>**20080704024232] 
[darcs --overview no longer works, so don't document it.
Trent W. Buck <[EMAIL PROTECTED]>**20080704030804] 
[Avoid silly manpage error.
Trent W. Buck <[EMAIL PROTECTED]>**20080703010733
 man (nroff) treats an apostrophe in the first column specially,
 resulting in a syntax error without this patch.
 
 Ideally, all cases of 'foo' in the manpage (i.e. docstrings) should
 become `foo', since man -Tps turns ` and ' into left and right single
 quotes respectively.
] 
[obliterate whitespace in Darcs.Commands.Get
[EMAIL PROTECTED]
 'twas causing lhs/haddock difficulties where a \end{code} wasn't getting recognized.
] 
[rm haddock CPP business
[EMAIL PROTECTED]
 Try as I might, I can't see any reason to special-case some Haddock CPP logic to deal with some *commented-out guards*, unless CPP magically restores and uncomments the code if Haddock isn't being run.
] 
[make pull less verbose when --verbose flag is given.
David Roundy <[EMAIL PROTECTED]>**20080624170035] 
[fix makefile to remember to regenerate version information after running configure.
David Roundy <[EMAIL PROTECTED]>**20080624170001] 
[TAG 2.0.2
David Roundy <[EMAIL PROTECTED]>**20080624012041] 
Patch bundle hash:
d85f39439863eca5efbbcb1dc9b81e8512ee2b46
_______________________________________________
darcs-users mailing list
[email protected]
http://lists.osuosl.org/mailman/listinfo/darcs-users

Reply via email to