anchor.diff:  (* Searching for terms.                                                      *)
   (* ------------------------------------------------------------------------- *)
   
  -/// Searches a term for a subterm that satis-es a given predicate.
  +/// Searches a term for a subterm that satisfies a given predicate.
   let rec find_term p tm =
       choice {
       if p tm then return tm
       elif is_abs tm then
  -        // TODO : Change this to use the workflow instead of Choice.bind.
  -        return! Choice.bind (find_term p) (body tm)
  +        let! bod = body tm
  +        return! find_term p bod
       elif is_comb tm then
           let! l, r = dest_comb tm
           return!
  
positive.code:             return v :: vs
          }
      fun s avoid tys ->
          if length tys = 1 then 
              variant avoid (mk_var(s, hd tys)) |> Choice.map (fun x -> [x])
          else margs 0 s avoid tys
  
  (* ------------------------------------------------------------------------- *)
  
negative.code:         let! mat = type_match uty ty []
          let! con = mk_const(c, mat)
          let! tc = type_of con
          if tc = ty then
              return con
          else
              return! Choice.fail()
      }
      |> Choice.mapError (fun e ->
          nestedFailure e "mk_const: generic type cannot be instantiated")
  