Unknown
Unknown

Reputation: 46831

Why can't F# infer the type of this statement?

/// I can't do this
let max =  float n |> sqrt |> int64 |> Math.BigInt

/// But this is allowed
let max =  Math.BigInt(float n |> sqrt |> int64)

Upvotes: 4

Views: 618

Answers (2)

Chris Conway
Chris Conway

Reputation: 56019

In my version of F# (1.9.4.19 on Mono), both versions fail with:

The member or object constructor 'BigInt' takes 0 argument(s) but is here given 1. The required signature is 'Math.BigInt()'.

I can use

let max =  float n |> sqrt |> int64 |> Math.BigInt.of_int64

to get a bigint or

let max =  float n |> sqrt |> int64 |> Math.BigInt.FromInt64

to get a Math.BigInt.

Upvotes: 0

Brian
Brian

Reputation: 118935

Class constructors cannot be used without arguments. You can write

let max =  float n |> sqrt |> int64 |> (fun x -> Math.BigInt(x))

if you like. (Offhand I don't know the reason for this restriction, though.)

Upvotes: 3

Related Questions