On Fri, Feb 05, 2010 at 12:34:01PM -0500, Aran Donohue wrote: > Hi Haskell-Cafe, > > Consider a data type such as > > data Binding = Binding Var (Either Value [Value]) > > representing a variable bound either to a fixed value or that has a list of > possible values. > > I'd like to perform an operation on say, the fixed-value members of a list > of bindings. Data.Either has "partitionEithers"---I'd essentially like to > use partitionEithers, but in a way that it "peeks" into the value field of > the binding. For the sake of argument, let's say I can't or can't modify > Binding to move the Either to the outside. > > What would be an idiomatic Haskell way to accomplish this? Currently I've > got "liftedPartitionEithers :: [a] -> (a -> Either b c) -> ([a], [a])" which > is my own version of partitionEithers that calls a selector first. Another > option would be to map each Binding to a new datatype that has the Either on > the outside, use partitionEithers, and map back. > > Thanks, > Aran
> _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe You could try using uniplate[1], something like transformBi (either doWhatYouLike id) I guess :). [1] http://hackage.haskell.org/package/uniplate -- Felipe. _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
