这个问题是由于一些F#的内置函数不能在任何情况下直接内联引起的。为了解决这个问题,可以通过手动别名或使用函数替换技术来重写代码。
示例中,可以使用以下方式对问题进行解决:
let inline createRange (start: ^t) (stop: ^t) =
let rec current(a: ^t) b acc =
if a <= b then current (a + LanguagePrimitives.GenericOne) b (a::acc)
else acc
current start stop []
let myRange = createRange 1 5
这会将createRange函数定义为“inline”,并使用语言原语定义循环以在代码中替换函数。这样,就避免了使用'function'函数内联的问题。