Возникли проблемы при переводе кода с Haskell на SML - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь перевести следующий фрагмент кода из 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, но я не уверен, что не так / как это исправить. Любая помощь будет оценена!

1 Ответ

3 голосов
/ 30 апреля 2020

List_alg - это конструктор типа, который ожидает два аргумента, но вы использовали его без каких-либо аргументов в третьей строке. Попробуйте изменить его на ('a, 'b) List_alg, как в

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

Обратите внимание, что ваша реализация Haskell также проходит x и u после List_alg

...