'\n'
- это Char
. Функция (++) :: [a] -> [a] -> [a]
добавляет два списка вместе. A Char
это не список. Строка, однако, так как String
это просто псевдоним для [Char]
, поэтому список Char
s.
Таким образом, вы можете сделать это с помощью:
my_version_unlines list = [show li ++ <b>"\n"</b> | li <- list]
Здесь таким образом, двойные кавычки "…"
указывают на строку, тогда как одинарные кавычки '…'
используются для Char
.
. В качестве альтернативы мы можем использовать map
здесь:
my_version_unlines :: Show a => [a] -> [String]
my_version_unlines = <b>map</b> ((++ "\n") . show)
Однако если вы хотите преобразовать список объектов в String
, разделенный строками, лучше использовать unlines :: [String] -> String
:
my_version_unlines :: Show a => [a] -> String
my_version_unlines = <b>unlines</b> . map show
Примечание : Использование (!!) :: [a] -> Int -> a
часто не очень хорошая идея. Список реализован в Haskell как связанный список, и, таким образом, это будет занимать линейное время, кроме того, функция равна non-total , поскольку для отрицательных индексов или индексов, превышающих длину списка, это будет ошибка. Часто лучше перебирать сам список.