On Thu, 11 Jan 2007, Seth Gordon wrote: > I have a data type "Group", representing a group of geographic > information that is all referring to the same location, and a function > "mergeGroups" that tries to merge two groups: > > mergeGroups :: Group -> Group -> Maybe Group > > Then I have a function "mergeGroupToList" that tries to merge its first > argument with every element of the second argument: > > mergeGroupToList :: Group -> [Group] -> [Group] > mergeGroupToList g [] = [g] > mergeGroupToList g1 (g2:gs) = > case (mergeGroups g1 g2) of > Nothing -> g2 : (mergeGroupToList g1 gs) > Just g3 -> mergeGroupToList g3 gs
Is mapAccumL also allowed? Untested but type-checked: mergeGroupToList g0 gs = let (mergedG, unmergedGs) = mapAccumL (\g1 g -> maybe (g1, Just g) (\g3 -> (g3, Nothing)) (mergeGroups g1 g)) g0 gs in catMaybes unmergedGs ++ [mergedG] _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe