Consuming input line-by-line until the end is often useful. In C# I would write the following loop:
while ((line = Console.ReadLine()) != null) {
// ...
I wanted to do this using "idiomatic" F# (which to me includes avoiding let mutable
) and I came up with this:
let rec readlines = seq {
let line = Console.ReadLine()
if line <> null then
yield line
yield! readlines
}
The last line shows the following warning
Warning FS0040: This and other recursive references to the object(s) being defined will be checked for initialization-soundness at runtime through the use of a delayed reference. This is because you are defining one or more recursive objects, rather than recursive functions. This warning may be suppressed by using '#nowarn "40"' or '--nowarn:40'.
The warning would suggest I am actually not writing idiomatic F# (as warnings usually point out problematic code). Is there a better way to write the function that avoids the warnings?
()
addition in @MarkSeeman's answer. \$\endgroup\$