E4196

E4196#

Compiler diagnostic name: where_clause_reasoning_not_string.

The proof_reasoning field in a where clause records explanatory text for the proof. Its value must be a string literal or a multiline string literal, not a variable or another expression.

Erroneous example#

///|
fn keep(
  x : Int,
) -> Int where {
  proof_ensure: result => result == x,
  proof_reasoning: x,
} {
  x
}

///|
test {
  ignore(keep)
}

Suggestion#

Use a string literal for proof_reasoning.

///|
fn (
   : ,
) ->  where {
  proof_ensure:  =>  == ,
  proof_reasoning: "The function returns its argument unchanged.",
} {
  
}

///|
test {
  ((2), ="2")
}