Uziel
Uziel

Reputation: 349

Why does this formula return a unit?

I understand that F# functions return a unit if nothing else is returned, but this function returns a string. Can someone please help me understand why it returns a unit?

let rec processList aList str = 
    match aList with
    | h::t  ->  let x = Regex.Replace(str, h, h, RegexOptions.IgnoreCase)
                processList t x
    | []    ->  printfn "%s" str

Upvotes: 1

Views: 198

Answers (2)

John Palmer
John Palmer

Reputation: 25516

If we analyse the two recursive branches, their return types must be identical.

The first branch has some return type 'a which is the return value of processList

The second branch returns unit as that is the return type of printfn. You probably want to have just

| [] -> str

or for a more complex case, you can use sprintf to return a formatted string as follows

| [] -> sprintfn "%s" str

Upvotes: 3

Wei Ma
Wei Ma

Reputation: 3155

The stopping case for this recursive function | [] -> printfn "%s" str

returns unit, and therefore the function returns a unit. The other branch only recursively call the same function.

Upvotes: 3

Related Questions