
That looks nice, just unfortunate you need to cast to ::Float in homer2?Age::Float. I don't see why this is needed, but I must say I don't understand your code completely yet, working on that :)
that annotation is not needed if you keep the functional dependency (which just states that record type and field label type together uniquely determine the field value type)
class Has field value record | field record -> value where (?) :: record -> field -> value (<:) :: (field,value) -> record -> record
Also, wouldn't this approach be less performant? Or is GHC that good that ist compiles away all the overhead?
in principle, there is no need for this to be less performant. in practice, overloading introduces overhead that might hamper performance. claus