Вы, очевидно, опечатка в коде.
Couldn't match expected type ‘Int’ with actual type ‘[Int]’
• In the expression: 1 + [size t | t <- ts]
In an equation for ‘size’:
size (Node a ts) = 1 + [size t | t <- ts]
Поскольку вы хотите Int
, вы должны найти способ, чтобы преобразовать ваш список Int
к Int
.
Другими словами, вы можете ввести отверстие, как это:
size :: Tree a -> Int
size Empty = 0
size (Node a ts) = 1 + _g [size t | t<-ts]
ведущее к сообщению об ошибке:
• Found hole: _g :: [Int] -> Int
Or perhaps ‘_g’ is mis-spelled, or not in scope
• In the expression: _g
In the second argument of ‘(+)’, namely ‘_g [size t | t <- ts]’
In the expression: 1 + _g [size t | t <- ts]
• Relevant bindings include
ts :: [Tree a]
(bound at /Users/jeeb/incubator/scratch/app/Main.hs:10:14)
a :: a (bound at /Users/jeeb/incubator/scratch/app/Main.hs:10:12)
size :: Tree a -> Int
(bound at /Users/jeeb/incubator/scratch/app/Main.hs:9:1)
В зависимости от того, что вы имеете в виду под «размером», вы должны быть в состоянии заменить g
на правильную функцию.
Вы пытаетесь добавить число и список. Можете ли вы придумать способ * суммировать * числа в списке? – molbdnilo
, но такой список возвращает int no? – gon91
Нет списков, которые «возвращают» int. Список - это список. – molbdnilo