PiotrWolkowski
PiotrWolkowski

Reputation: 8782

F#: Creating a collection of integers from user input

I'm rather new to F# so the question may be fairly elementary. Still, I couldn't find any suggestion on SO.

I'm playing with an algorithmic task in F#. As a first step I want to create a collection of integers from user console input. The number of inputs is not defined. And I don't wont to use any while loops. I would prefer as much idiomatic approach as possible.

In a recursive function I'm reading the result and parsing it with Int32.TryParse. I match the bool result using match ... with. If successful then I attach a new value to a collection. Otherwise I return the collection.

Below is my code:

let rec getNumList listSoFar =
    let ok, num = Int32.TryParse(Console.ReadLine())
    match ok with
        | false -> listSoFar
        | true -> getNumList num::listSoFar

let l = getNumList []

And the error I get:

Type mismatch. Expecting a 'a
but given a 'a list

I'm aware I'm using types incorrectly, though I don't understand what exactly is wrong. Any explanation highly appreciated.

Upvotes: 3

Views: 381

Answers (1)

Petr
Petr

Reputation: 4280

In the match branch

| true -> getNumList num::listSoFar

You should use parenthesis:

| true -> getNumList (num::listSoFar)

Because function application has higher priority than the :: operator

Upvotes: 5

Related Questions