[Haskell-cafe] extensible records - Vinyl - alternatives?

adam vogt vogt.adam at gmail.com
Mon May 5 08:25:43 UTC 2014


Hi Peter,

If you compare the two, you can see that some parts are nearly the same:

::: ~ Tagged
:& ~ HCons
RNil ~ HNil

The labels aren't there at runtime in either library, since the label
that is part of  ::: (or Tagged) is missing from the data constructor
(ie. it is a phantom type). But you can still define functions that
depend on the type of a record: see the Show instances of either
record type for example. So in some weak sense you have the same
"runtime information of labels" in both libraries.

Regards,
Adam

On Mon, May 5, 2014 at 3:21 AM, Peter Althainz <althainz at gmail.com> wrote:
> Hi Adam,
>
> thanks for your answer, I will re-check HList with Labelable labels. With
> regards to your question "named labels": good point, all records indeed have
> "named labels" so what was my statement? I actually thought that Vinyl does
> keep run-time information of the labels from a Blog about vinyl-gl, but
> actually I'm not so sure about it anymore, so it is more a question: do
> those alternatives of extensible records differentiate by the way they keep
> runtime information of labels?
>
> regards
> Peter
>
>
> 2014-05-03 18:54 GMT+02:00 adam vogt <vogt.adam at gmail.com>:
>>
>> Hello Peter,
>>
>>
>> Could you show what you mean by "named labels"?
>>
>> Vinyl is a fine choice, but have you looked at HList >= 0.3? The
>> lenses/labels done with Data.HList.Labelable are prettier than the
>> vinyl alternative in my biased opinion. Furthermore, they support
>> changing types in the  record unlike vinyl (ie. they provide a Lens
>> not Lens').
>>
>> HList is a bit slow at compile time
>> <http://code.haskell.org/~aavogt/HList-benchmark/a.html> if you make
>> records with many fields. That situation may improve soon if we take
>> advantage of the ordering on Symbol that ghc-7.8 introduced. In other
>> words, we will probably follow the lead of
>> <http://www.haskell.org/haskellwiki/CTRex> and make Records sorted by
>> their labels.
>>
>> There are quite a few other libraries
>>
>> <http://www.haskell.org/haskellwiki/Extensible_record#Libraries_on_hackage>.
>> Also consider lens' makeClassy as another solution to the records
>> problem.
>>
>> Regards,
>> Adam
>>
>> On Sat, May 3, 2014 at 6:16 AM, Peter Althainz <althainz at gmail.com> wrote:
>> > Dear All,
>> >
>> > I'm searching a handsome library for handling large amounts of
>> > configuration
>> > data in a flexible manner. So to speak I want to use some kind of
>> > inheritance of data fields. I think this is where the extensible records
>> > discussion is a proper description of my use case.
>> >
>> > I've found 2 libraries making this work, so far:
>> >
>> > HList
>> > Vinyl
>> >
>> > I currently prefer Vinyl due to the complex types in HList, lens
>> > compatibiliy, named labels. (I love the HList and OOHaskel papers, but
>> > for
>> > practical use, I currently prefer Vinyl).
>> >
>> > What do you think, what is the best way nowadays to use extensible
>> > records?
>> > Is Vinyl a good choice from your point of view?
>> >
>> > regards
>> > Peter
>> >
>> > _______________________________________________
>> > 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