-- THIS FILE WAS AUTOMATICALLY GENERATED BY AENEAS
-- [polonius_list]
import Base
open Primitives
set_option linter.dupNamespace false
set_option linter.hashCommand false
set_option linter.unusedVariables false

namespace polonius_list

/- [polonius_list::List]
   Source: 'tests/src/polonius_list.rs', lines 6:0-6:16 -/
inductive List (T : Type) :=
| Cons : T → List T → List T
| Nil : List T

/- [polonius_list::get_list_at_x]:
   Source: 'tests/src/polonius_list.rs', lines 16:0-16:76 -/
divergent def get_list_at_x
  (ls : List U32) (x : U32) :
  Result ((List U32) × (List U32 → Result (List U32)))
  :=
  match ls with
  | List.Cons hd tl =>
    if hd = x
    then Result.ok (List.Cons hd tl, Result.ok)
    else
      do
      let (l, get_list_at_x_back) ← get_list_at_x tl x
      let back :=
        fun ret =>
          do
          let tl1 ← get_list_at_x_back ret
          Result.ok (List.Cons hd tl1)
      Result.ok (l, back)
  | List.Nil => Result.ok (List.Nil, Result.ok)

end polonius_list
