views:

316

answers:

2
/// 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)
+3  A: 

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.)

Brian
Is int64 a class?
Unknown
No, in this context it's a function defined in http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/FSharp.Core/Microsoft.FSharp.Core.Operators.html
Brian
Also can you tell me where to find the square root for a BigInt?
Unknown
There is no Sqrt function defined for BigInt in the library.
Brian
@Brian do you know if there will be one?
Unknown
No, I don't think one is planned for .Net 4.0's System.Numerics.BigInteger. You can always author your own.
Brian
A: 

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.

Chris Conway