Вы можете сделать это с помощью обычного анонимного класса вместо лямбда:
list.forEach(new Consumer<Example>() {
int ordinal = 0;
public void accept(Example s) {
s.setOrdinal(ordinal);
ordinal++;
}
});
Вопрос для любого из этих пакетов - это сфера его целей. HList - это на самом деле 5 различных реализаций меток, две с равенством типов, две с приведением типа, две из Record / RecordP и выбор Variant vs TIC. Все они похожи, но это разные компромиссы в простоте использования, переносимости и используемых расширениях.
Новые функции GHC (GADT, связанные типы, типы ограничений, полиморфные типы, синглтон-типы) могут допускать несколько другие компромиссы. В частности, одноэлементные типы могут предоставлять более совершенные метки, а полиморфные типы могут предоставлять более элегантные Typeable / Data / Generics.
Пакет «records», на который вы ссылаетесь, зависит от пакета «types», который утверждает: ]
«Haskell не поддерживает субкинды и полиморфизм субкидов. Однако этот пакет можно использовать для эмуляции субкиндов переменных типа * и субкадров».
Но это уже не так правда благодаря продвижению типа данных к видам в новых версиях GHC. Так что этот пакет на январь 2012 года может устареть.
Что касается записей, возможно, новая система будет опираться на последний раунд полиморфных линз: объектив и / или семейство линз .