有没有办法断言某个函数被编译器识别为尾递归?

Mys*_*uff 11 haskell tail-recursion static-assert

假设我已经在Haskell中编写了一个函数,并且想断言它是尾递归的,并且编译器会对其进行优化。有办法吗?

我知道有一种方法可以在Scala中使用@tailrec注释。

例:

import scala.annotation.tailrec

class Factorial2 {
  def factorial(n: Int): Int = {
    @tailrec def factorialAcc(acc: Int, n: Int): Int = {
      if (n <= 1) acc
      else factorialAcc(n * acc, n - 1)
    }
    factorialAcc(1, n)
  }
}
Run Code Online (Sandbox Code Playgroud)

rad*_*row 1

至于 GHC 8.8.2 尾递归不能由任何编译指示或关键字强制断言。