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は 2 つの引数を必要とする型コンストラクターですが、3 行目で引数なしで使用しました。('a, 'b) List_algのように変更してみてください

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

Haskell の実装もパスxし、uその後も成功することに注意してください。List_alg

于 2020-04-30T17:26:32.710 に答える