mrh

joined 1 year ago
MODERATOR OF
lem
9
submitted 9 months ago by mrh to c/emacs
5
Lem 2.1.0 (github.com)
submitted 9 months ago by mrh to c/lem
[–] mrh 1 points 1 year ago

I should have been clearer that it's initial input to the program, not queried input during the middle of its runtime.

I think what's easiest is reading in the named records as hashmaps and dealing with them that way, so that I can do filters/comparisons on the keys (which are the headers). I don't need anything more specialized that warrants creating a new FromRecord instance.

[–] mrh 1 points 1 year ago

Right Map is polymorphic while records are concrete, make sense.

Those parser definitions in the source are enlightening, I see now I was thinking a bit narrowly about how e.g. parseNamedRecord could be instantiated for a type.

[–] mrh 1 points 1 year ago* (last edited 1 year ago) (2 children)

Ah yeah thanks that works! I didn't think to look for already pre-defined instances of the typeclass. Though I still wonder how the Parser for Map/HashMap is defined, since Maps can hold an arbitrary number of values rather than a record's fixed number of fields.

I also wonder why (it seems) I need to put a type annotation that I want to decode the incoming data as a Map, since you don't have to do that if you call e.g. a field accessor method on one of your custom record instances. That is, if you try to call Map.size on an incoming CSV record, you need to explicitly annotate with a type annotation that you want that record decoded as a Map. Whereas if you have a record data Foo = Foo {bar :: String} and define its parser in the standard way, you can just call bar on the incoming CSV record and it will work, no annotation required.