我想从字符列表[Lettre]中创建一个字符串
例如, ['1','2','3','W','5','5','W','3'] 应该打印为(1、2、3,W,5、5,W,3)
现在,我使用
data Lettre = Steen Char
makeString :: [Lettre] -> String
makeString [] = ""
makeString [Steen(x)] = x:[]
makeString (Steen(x):xs) = (x:", ") ++ makeString xs
但是我觉得这可能会更容易。
是否有一个简单的函数,如toString?我尝试使用一些我知道的函数,但似乎无法在我的代码上使用,所以我继续使用makeString。
非常感谢能帮助我的人:)
答案 0 :(得分:7)
给出一个字符列表,您可以使用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] ++ ")"