将代码从 Haskell 转换为 SML 时遇到问题

Having trouble translating code from Haskell to SML

我正在尝试将以下代码从 SML 翻译成 haskell,但我遇到了一些麻烦。

type List_alg x u = (u, x->u->u)
list_cata :: List_alg x u -> [x] -> u list_cata (a,f) = cata where
  cata[] =a
  cata (x:l) = f x (cata l)

这是我试过的方法:

type ('a, 'b) List_alg = 'b * ('a -> 'b -> 'b)

fun list_cata (((a, f): List_alg), (l: 'a list)): 'b = 
  case l of
       [] => a
     | x::xs => f x (list_cata ((a,f), xs))

我收到错误 Error: type constructor List_alg given 0 arguments, wants 2 但我不确定 wrong/how 是什么来解决这个问题。如有任何帮助,我们将不胜感激!

List_alg 是一个需要两个参数的类型构造函数,但您在第三行没有任何参数地使用了它。尝试将其更改为 ('a, 'b) List_alg,如

fun list_cata (((a, f): ('a, 'b) List_alg), (l: 'a list)): 'b = 

请注意,您的 Haskell 实施还在 List_alg

之后通过了 xu