Como escrever uma função para números genéricos?

Eu sou bastante novo em F # e acho que a inferência de tipo é realmente uma coisa legal. Mas atualmente parece que isso também pode levar à duplicação de código, o que énão é uma coisa legal. Quero somar os dígitos de um número como este:

let rec crossfoot n =
  if n = 0 then 0
  else n % 10 + crossfoot (n / 10)

crossfoot 123

Isso imprime corretamente6. Mas agora meu número de entrada não cabe int 32 bits, então eu tenho que transformá-lo em.

let rec crossfoot n =
  if n = 0L then 0L
  else n % 10L + crossfoot (n / 10L)

crossfoot 123L

Então umaBigInteger vem no meu caminho e adivinhem ...

Claro, eu só poderia ter obigint versão e converter parâmetros de entrada para cima e parâmetros de saída para baixo conforme necessário. Mas primeiro eu assumo o usoBigInteger sobreint tem algumas penalidades de desempenho. Segundolet cf = int (crossfoot (bigint 123)) simplesmente não lê bem.

Não existe uma maneira genérica de escrever isso?

questionAnswers(6)

yourAnswerToTheQuestion