Глядя на сообщение об ошибке, похоже, что GHC выводит неправильный тип для recGame
.(Откуда мне это знать? Это потому, что каждый раз, когда в сообщениях об ошибках упоминается recGame
, есть много вещей [a] -> [a]
, которые выглядят неправильно.) Итак, в качестве первого шага, давайте добавим сигнатуру типа:
solveGame :: [String] -> [[String]]
solveGame ts = recGame [] ts
where
recGame :: [String] -> [String] -> [[String]]
recGame xs [] = [xs]
recGame xs (t:ts) = map (recGame (xs ++ ) ts) [[x] | x <- (gen t)]
Как только мы сделаем это, мы получим еще несколько полезных сообщений об ошибках:
so.hs:10:30: error:
• Couldn't match expected type ‘[String] -> [String]’
with actual type ‘[[String]]’
• Possible cause: ‘recGame’ is applied to too many arguments
In the first argument of ‘map’, namely ‘(recGame (xs ++) ts)’
In the expression: map (recGame (xs ++) ts) [[x] | x <- (gen t)]
In an equation for ‘recGame’:
recGame xs (t : ts) = map (recGame (xs ++) ts) [[x] | x <- (gen t)]
|
10 | recGame xs (t:ts) = map (recGame (xs ++ ) ts) [[x] | x <- (gen t)]
| ^^^^^^^^^^^^^^^^^^^
so.hs:10:39: error:
• Couldn't match expected type ‘[String]’
with actual type ‘[String] -> [String]’
• In the first argument of ‘recGame’, namely ‘(xs ++)’
In the first argument of ‘map’, namely ‘(recGame (xs ++) ts)’
In the expression: map (recGame (xs ++) ts) [[x] | x <- (gen t)]
|
10 | recGame xs (t:ts) = map (recGame (xs ++ ) ts) [[x] | x <- (gen t)]
| ^^^^^
Итак, похоже, что в случае (t:ts)
вы даете (xs++)
в качестве параметра recGame
- но (xs++)
- это функция, поэтому вы не можете этого сделать!Я не знаю, что вы пытаетесь сделать здесь, поэтому я не могу предложить исправление, но это определенно ошибка, и вам следует ее исправить.