[Haskell-cafe] How to convert records into Haskell structure in Haskell way?

Scott Michel scooter.phd at gmail.com
Mon Nov 2 21:47:22 EST 2009


You might want to look at the code out there that processes command line
options by creating record setting functions, which then are foldl'-ed to
create an updated structure. See
http://leiffrenzel.de/papers/commandline-options-in-haskell.html at the
bottom of the page. I suspect you can easily create a conversion function
(of functions) that does what you want.

On Mon, Nov 2, 2009 at 6:38 PM, Evan Laforge <qdunkan at gmail.com> wrote:

> On Mon, Nov 2, 2009 at 5:29 PM, Magicloud Magiclouds
> <magicloud.magiclouds at gmail.com> wrote:
> > Hi,
> >  Say I have something like this:
> > [ Record { item = "A1", value = "0" }
> > , Record { item = "B1", value = "13" }
> > , Record { item = "A2", value = "2" }
> > , Record { item = "B2", value = "10" } ]
> >  How to convert it into:
> > [ XXInfo { name = "A", value1 = "0", value2 = "2" }
> > , XXInfo { name = "B", value1 = "13", value2 = "10" } ]
> >  If XXInfo has a lot of members. And sometimes the original data
> > might be not integrity.
>
> This is a function from my library that I use a lot:
>
> -- | Group the unsorted list into @(key x, xs)@ where all @xs@ compare
> equal
> -- after @key@ is applied to them.  List is returned in sorted order.
> keyed_group_with :: (Ord b) => (a -> b) -> [a] -> [(b, [a])]
> keyed_group_with key = map (\gs -> (key (head gs), gs))
>    . groupBy ((==) `on` key) . sortBy (compare `on` key)
>
> -- You can use it thus, Left for errors of course:
>
> to_xx records = map convert (keyed_group_with item records)
>  where
>  convert (name, [Record _ v1, Record _ v2]]) = Right (XXInfo name v1 v2)
>  convert (name, records) = Left (name, records)
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20091102/c8ad28ec/attachment.html


More information about the Haskell-Cafe mailing list