Question: In C#, I would write this:

```
string input;
do
{
    Console.Write("Enter an equation: ");
    input = Console.ReadLine();
} while (FSharpOption<Expression>.get_IsNone(Infix.TryParse(input)));

```

This would prompt the user to enter an equation repeatedly until they enter one that can be parsed. How would I do this in F#?

Answer: 
You could write a recursive function:

```
let rec readInput () =
    Console.Write("Enter an equation: ")
    let input = Console.ReadLine()
    match Infix.TryParse(input) with
    | Some(e) -> e
    | None -> readInput()

```
Might be a bit over the top but I once wrote the following:

```
let inputParseLoop msg parser =
    let isNull x = Core.obj.ReferenceEquals (x, null)
    Seq.initInfinite (fun _ ->
        printf "%s " msg
        try Some (stdin.ReadLine ()) with _ -> None)
    |> Seq.takeWhile Option.isSome
    |> Seq.map Option.get
    |> Seq.takeWhile (fun s -> not (isNull s))
    |> Seq.map parser
    |> Seq.skipWhile Option.isNone
    |> Seq.head
    |> Option.get

```

For your use case, call it like this:

```
inputParseLoop "Enter an equation: " Infix.TryParse

```