anchor.diff:      let shortestError =
           results
           |> List.choose (function Ok _ -> None | Error e -> Some e)
  -        |> List.sortBy (fun (_, inputs) -> inputs.Length)
  +        |> List.sortBy (fun inputs -> inputs.Length)
       match shortestError with
       | [] -> ()
  -    | (ex, inputs)::_ ->
  -        failwithf "Exeption: %s inputs: %A" ex inputs+    | kl::_ ->
  +        let shortestSublist =
  +            findShortening kl
  +        try
  +            tryList shortestSublist
  +        with ex -> failwithf "Exeption: %s inputs: %A" ex.Message shortestSublist
positive.code:             keyboard.LaTeX |> ignore
          with e ->
              result <-
                  Error(e.Message, reverseInputs |> List.rev)
      result
  
  [<Test>]
  let ``random inputs don't crash editor``() =
  
negative.code: 
  // can use Hedgehog or FSCheck instead for random testing
  
  let private getRandomMathKeyboardInput =
      let r = System.Random()
      let n = mathKeyboardInputs.Length
      fun () -> mathKeyboardInputs.[r.Next(n)]
  
  /// adds 100 random keypresses to a MathKeyboard and gets LaTeX and checks that there is no crash
  let private test100keypresses() =
      let keyboard = CSharpMath.Rendering.MathKeyboard()
      let mutable reverseInputs:MathKeyboardInput list = []
      let mutable result = Ok()
  