将代码从Haskell转换为SML时遇到麻烦

问题描述 投票:0回答: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但我不确定出什么问题/如何解决。任何帮助,将不胜感激!

haskell functional-programming sml category-theory catamorphism
1个回答
0
投票

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

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

注意,您的Haskell实现在x之后也传递了uList_alg

© www.soinside.com 2019 - 2024. All rights reserved.