To preserve source information, the Haskell implementation uses a Note constructor as a wrapper.
We get this data already from Instaparse as metadata, so we should just pass this metadata around.
This would probably mean be careful about creating new objects (because they should carry the meta from the old ones) or even just applying non-meta-aware functions to them.