unison/unison-src/transcripts/fix2663.output.md

801 B

Tests a variable capture problem.

After pattern compilation, the match would end up:

T p1 p3 p3

and z would end up referring to the first p3 rather than the second.

structural type Trip = T Nat Nat Nat

bad : Nat -> (Nat, Nat)
bad x = match Some (Some x) with
  Some (Some x) -> match T 3 4 5 with
    T _ _ z -> (x, z)
  _ -> (0,0)

> bad 2

  Loading changes detected in scratch.u.

  I found and typechecked these definitions in scratch.u. If you
  do an `add` or `update`, here's how your codebase would
  change:
  
    ⍟ These new definitions are ok to `add`:
    
      structural type Trip
      bad : Nat -> (Nat, Nat)
  
  Now evaluating any watch expressions (lines starting with
  `>`)... Ctrl+C cancels.

    9 | > bad 2
          ⧩
          (2, 5)