Учитывая список символов, вы можете использовать intersperse
, но это допускает только односимвольные разделители.
> "(" ++ intersperse ',' "123W55W3" ++ ")"
"(1,2,3,W,5,5,W,3)"
Для многосимвольного разделителя, такого как ", "
, вы можете использовать intercalate
, но тогда вам нужен список String
, а не список Char
.
Решение состоит в том, чтобы поднять каждый символ в строку, а затем использовать intercalate
.
> "(" ++ intercalate ", " (map pure "123W55W3") ++ ")"
"(1, 2, 3, W, 5, 5, W, 3)"
Я предполагаю, что ввод является фактическим значением [Char]
/ String
;если у вас действительно есть более сложная оболочка Char
, например
newtype Lettre = Steen Char
, которая может быть выведена из вашей попытки, используйте вместо этого что-то вроде
makeString :: [Lettre] -> String
makeString xs = "(" ++ intercalate ", " [[x] | Steen x <- xs] ++ ")"