On Mon, Jun 1, 2009 at 12:20 PM, Ralf Laemmel <[email protected]> wrote:
> On Mon, Jun 1, 2009 at 8:20 PM, David Fox <[email protected]> wrote: > > Is there a Scrap Your Boilerplate guru out there who could whip up a > three > > argument version of gzip for me? > > This can be done of course (untested but type-checked code follows). > Left wondering what the scenario might be :-) > > Ralf > > import Prelude hiding (GT) > import Data.Generics > > -- As originally defined: Twin map for transformation > gzipWithT2 :: GenericQ (GenericT) -> GenericQ (GenericT) > gzipWithT2 f x y = case gmapAccumT perkid funs y of > ([], c) -> c > _ -> error "gzipWithT2" > where > perkid a d = (tail a, unGT (head a) d) > funs = gmapQ (\k -> GT (f k)) x > > -- For three args now > gzipWithT3 :: GenericQ (GenericQ (GenericT)) -> GenericQ (GenericQ > (GenericT)) > gzipWithT3 f x y z = case gmapAccumT perkid funs' z of > ([], c) -> c > _ -> error "gzipWithT3" > where > perkid a d = (tail a, unGT (head a) d) > funs' = case gmapAccumQ perkid' funs y of > ([], q) -> q > _ -> error "gzipWithT3" > where > perkid' a d = (tail a, unGQ (head a) d) > funs = gmapQ (\k -> (GQ (\k' -> GT (f k k')))) x > Thank you! What I have in mind is three way merging - you have two revisions based on the same original value, and you need to decide whether they can be merged automatically or they need to be merged by a user. You only have a real conflict when both revisions differ from the original and from each other. -david
_______________________________________________ Haskell mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell
