我正在尝试找出如何定义一个能够作用于多种类型的参数(例如,int 和 int64)的函数。据我所知,在 F# 中无法进行函数重载(当然编译器会报错)。比如下面的函数:
let sqrt_int = function
| n:int -> int (sqrt (float n))
| n:int64 -> int64 (sqrt (float n))
编译器当然会抱怨语法无效(似乎不支持模式匹配中的类型约束),但我认为这说明了我想要实现的内容:一个在多个参数类型上操作并返回相应类型值的函数。我有种感觉,在F#中使用泛型类型/类型推断/模式匹配的某种组合是可能的,但语法使我无法理解。我还尝试在模式匹配块中使用:? (动态类型测试)和when子句,但这仍然会产生各种错误。
由于我对语言还比较陌生,我可能正在尝试做一些不可能的事情,请让我知道是否有其他解决方案。