如何将嵌套的Chars列表转换为String Haskell

时间:2015-10-13 22:24:49

标签: string list haskell char

我有一个简单的问题,虽然Char的列表似乎等同于String s,但它们在功能上并不相同。如果我有Char的{​​{1}} s类型的嵌套列表,我想将其转换为[[Char]],我将如何进行此操作?

当我尝试在[String]上执行某个功能并将其视为一个字符串时我得到了:

[[Char]]

当我尝试声明Couldn't match expected type `([String] -> (Int, Int, Board)) -> t' with actual type `[[Char]]' 时,我得到了:

type String = [[Char]]

2 个答案:

答案 0 :(得分:2)

这两种类型完全相同,因为String[Char]的类型同义词。 String的定义是

type String = [Char]

type关键字表示它是类型同义词。类型同义词总是可以与它定义的类型互换。

你可以在GHCi中看到这样(注意Haskell不允许转换):

ghci> let test :: [Char];   test = "abc"
ghci> test :: String
"abc"
ghci> :t (test :: [Char]) :: String
(test :: [Char]) :: String :: String

答案 1 :(得分:1)

  

当我尝试声明type String = [[Char]]时,我得到了:

Ambiguous occurrence `String'
It could refer to either `Main.String', defined at Testing.hs:19:1
                      or `Prelude.String',
                         imported from `Prelude' at Testing.hs:16:1-14
                         (and originally defined in `GHC.Base')

您收到此错误的原因是String的定义与base中已定义并由Prelude导出的定义冲突。删除您的定义并使用已存在的定义。