a -> T a
будет означать, что a - это функция, которая возвращает что-то вроде T a
, так что я думаю, что это неправильно. Попробуйте что-то вроде этого.
data T a = N | R a (T a)
N - значение пустого списка (эквивалент []
), а R - конструктор значений (эквивалент :
)
С правой стороны вам нужен способ переноса значения a
. Теперь вы можете правильно списки, как.
> N -- The empty List
> R 5 N -- a list with a single element and then the end
> R 7 (R 6 (R 5 N)) -- the list 7, 6, 5