[Haskell-cafe] an advanced foldification problem

Spencer Janssen sjanssen at cse.unl.edu
Thu Jan 11 14:54:45 EST 2007


Take this obscure function:
\begin{code}
func :: (a -> a -> Maybe a) -> a -> [a] -> [a]
func f s0 xs0 = foldr (\x xs s -> maybe (xs s) ((x:) . xs) (f s x))  
return xs0 s0
\end{code}

And mergeGroupToList becomes:
\begin{code}
mergeGroupToList g xs = func mergeGroups g xs
\end{code}


Cheers,
Spencer Janssen

On Jan 11, 2007, at 11:37 AM, 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
>
> How can I rewrite mergeGroupToList in terms of foldr?
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list