有一个简单的函数可以使一个字符串组成一个字符列表吗?

时间:2019-04-03 20:14:30

标签: string list haskell char

我想从字符列表[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。

非常感谢能帮助我的人:)

1 个答案:

答案 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] ++ ")"