1

我正在尝试将以下代码从 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 ,但我不确定出了什么问题/如何解决。任何帮助,将不胜感激!

4

1 回答 1

3

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

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

请注意,您的 Haskell 实现也通过xuList_alg

于 2020-04-30T17:26:32.710 回答