Plantillas de funciones en F #

Digamos que estoy resolviendo un problema particular y se me ocurre una función

let function parameter1 ... = 
     a lot of adding, multiplying & so on with a lot of 
     literals all over the place

Ahora esta función funciona bien si mis parámetros son de tipo int. Pero en algún lugar lo necesitaré para subir a 11, necesitaré ese impulso adicional en int64 o incluso BigInteger. ¿Entonces qué hago? Copio y pego la función, cambio el nombre y busco todas las apariencias literales que hacen que el compilador piense que la función debería funcionar en int. Y esto apesta.

Hay alguna forma de hacer esto:

let greatFunction param1 param2 = (param1+1)/(param2*2)

donde param1 y param2 pueden ser cualquier combo de tipos enteros?

Editar:

Ampliando un poco en un gran consejo por kvb a continuación, se me ocurrió lo siguiente

module NumericLiteralG 

  let inline FromZero() = LanguagePrimitives.GenericZero
  let inline FromOne() = LanguagePrimitives.GenericOne
  let inline FromInt32 n =
    let rec loop nIn nOut = 
        if nIn>0 then loop (nIn - 1) (nOut + LanguagePrimitives.GenericOne)
        else nOut
    loop n LanguagePrimitives.GenericZero

por lo que se vuelve un poco menos feo cuando se usa

let inline halfSquare num =
   let res = num / 2G
   res * res

let solve1 = halfSquare 5I 
let solve2 = halfSquare 5.0
let solve3 = halfSquare 5uy

Ahora la pregunta es ¿debo usar esto? ¿Si no, porque no?

Respuestas a la pregunta(4)

Su respuesta a la pregunta