Haskell 字符到字符串函数

Haskell 字符到字符串函数,haskell,Haskell,我有一个非常简单的问题:给定一个接受字符并返回字符串的函数 test :: Char -> [String] 如何将字符转换成字符串?我对这两种类型感到困惑。在Haskell中,String是[Char]的别名: type String = [Char] 如果您只需要一个将单个字符转换为字符串的函数,例如 charToString :: Char -> String charToString c = [c] 如果你喜欢无点风格,你也可以写 charToString :: Cha

我有一个非常简单的问题:给定一个接受字符并返回字符串的函数

test :: Char -> [String]

如何将字符转换成字符串?我对这两种类型感到困惑。

在Haskell
中,String
[Char]
的别名:

type String = [Char]
如果您只需要一个将单个字符转换为字符串的函数,例如

charToString :: Char -> String
charToString c = [c]
如果你喜欢无点风格,你也可以写

charToString :: Char -> String
charToString = (:[])

字符串只是一个[Char]

但这只是一个很好的表达方式

'H':'E':'L':'L':'O':[]
因此,要使其成为[字符串],我们可以:

['H':'E':'L':'L':'O':[]]

另一种方法是使用

return . return

由于列表的
return
定义为
:[]

请注意,可以使用
Show
将实现
Show
类型类的任何类型转换为字符串:

(Show a) => a -> String

因为
Char
实现了这一点,所以函数已经为您编写好了

我知道以前我期望像[c]这样的输出,但现在改成了:[[c]]并且它可以工作:)谢谢simplePrelude>show'a'=>“'a'”(可能不起作用)。Prelude>return'a'=>'a'不起作用(return.return会给出一个错误).@paradoja
return
具有类型
Monad m=>a->ma
。默认情况下,ghci默认为monad实例采用
IO
。由于ghci也会为您打开(执行)IO单子中的值,因此您会将
返回
视为不可操作。请尝试
(return::a->[a])将单子修改为列表。您的问题是如何将字符转换为字符串,但您的代码块实际上涉及类型
字符
[string]
(而不是
String
)。请注意
[String]
表示
字符串的列表,即
String
定义为
[Char]
)字符列表。根据OP对已接受答案的评论,我相信它们的意思是
[String]
。这是否值得编辑?可能是一个XY问题,他们询问如何将字符转换为字符串,然后将其放入最有可能带有括号的列表中(具有讽刺意味的是,您首先就是这样将字符转换为字符串的)。