Digit Power Sum with BigInteger This is my 1st F# program so I'm open to any and all criticism on my syntax and the way I approached the problem.

Challenge

Project Euler 16: Power Digit Sum

2^15 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.
What is the sum of the digits of the number 2^1000?

open System
open System.Numerics

let digitPower (n:bigint) p = pown n p
let digitToPowerSum (n:bigint) p = 
    (digitPower n p) |&gt; 
    string |&gt; 
    (fun s -&gt; s.ToCharArray()) |&gt; 
    Array.map (fun x -&gt; Int32.Parse (x.ToString())) |&gt; 
    Array.sum

[&lt;EntryPoint&gt;]
let main argv =     
    let n = new bigint(2)
    let p = 1000
    let value = digitPower n p
    let sum = digitToPowerSum n p

    Console.WriteLine(String.Format("{0}^{1} = {2:n}", n, p, value))
    Console.WriteLine()
    Console.WriteLine(String.Format("Its digit sum is {0}", sum))
    Console.ReadKey() |&gt; ignore
    0


I'm primarily concerned with
It's quite common to convert a number to a string to get the digits, and most of the times, it ought to work, but it's a hack, instead of modelling what should happen.

Here's another way to do it, which deliberately separates integers into its digits.

let rec digits i =
    let tens = i / 10I
    if tens = 0I
    then [i]
    else
        let ones = i % 10I
        (digits tens) @ [ones]


The rest is easy:

let euler16 x y = pown x y |&gt; digits |&gt; List.sum


Some examples from F# Interactive:

&gt; euler16 2I 15;;
val it : System.Numerics.BigInteger = 26 {IsEven = true;
                                          IsOne = false;
                                          IsPowerOfTwo = false;
                                          IsZero = false;
                                          Sign = 1;}
&gt; euler16 2I 1000;;
val it : System.Numerics.BigInteger = 1366 {IsEven = true;
                                            IsOne = false;
                                            IsPowerOfTwo = false;
                                            IsZero = false;
                                            Sign = 1;}