我有一个简单的问题,虽然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]]
答案 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
导出的定义冲突。删除您的定义并使用已存在的定义。