0

I'd like to use record update syntax to update a dependently-typed field without also changing the field it depends on. So I'd like to have Idris 2 evaluate the other field, and realize everything is kosher. Is this doable?

Here's a concrete minimal example:

%default total

0 Top : Type
Top = DPair Type (\t => t)

p1 : Top
p1 = MkDPair Bool True

p1' : Top
p1' = { snd $= not } p1

Here, the definition of p1' doesn't typecheck, because the type of snd is fst, not Bool. But if only Idris would evaluate p1.fst, it would all work out.

I am guessing the problem is that this is an application of a general record updater function { snd $= not } : Top -> Top to the argument p1 : Top, which of course doesn't quite work. So is there a way to instead start from p1, and change its field values in the context of its other field values?

Cactus
  • 27,075
  • 9
  • 69
  • 149

0 Answers0