Чтобы патч-патч на Pack xyz
в лямбде, нужно поставить его в скобки:
foldr (\(Pack (a,b)) -> ...)
То, что вы написали, на самом деле будет разбираться как два отдельных аргумента
foldr (\(Pack) -> \(a,b) -> ...)
Далее, вы не можете объединять строки с +
, это для чисел. ++
или <>
для списков / строк.
Тогда синтаксис -> concat
недопустим. То, что вы хотите сделать, это объединить оставшуюся часть вычисления Foldr с показанными a
и b
. Этот остаток является вторым аргументом функции свертывания:
foldr (\(Pack (a,b)) rest -> show a ++ show b ++ rest)
... или короче,
foldr (\(Pack (a,b)) -> shows a . shows b)