I’m working on a project which requires us to have a “standard library” across various languages/platforms. Portions of this “standard library” map very close to the elm/core
library for the Elm platform/language.
One function I need to define is add. In Elm they have a numeric “type class”, but F# doesn’t support this. How can I define a generic add function in my module that works for different numeric types? The code-snippet below shows the issue. For all functions below I was able to map the equivalent Elm functions to F# and F# infers the types properly. The add function however always warns, with this message:
FS0064: This construct causes code to be less generic than indicated by the type annotations.
How can I fix this (Please note I will be applying this solution to define subtract, multiply, etc)
[<AutoOpen>]
module Morphir.SDK.Basics
let (<|) = Microsoft.FSharp.Core.Operators.(<|)
let (|>) = Microsoft.FSharp.Core.Operators.(|>)
let add (a:^a) (b:^b) :^c = (+) a b
let inline abs (n:^a) =
Microsoft.FSharp.Core.Operators.abs(n)
let inline pow (x:^a) (n:int) =
Microsoft.FSharp.Core.Operators.pown x n