gpt4 book ai didi

haskell - putStrLn 函数不接受 [Char] 参数

转载 作者:行者123 更新时间:2023-12-04 22:30:03 24 4
gpt4 key购买 nike

下面的代码:

Prelude> :t putStrLn
putStrLn :: String -> IO ()
Prelude> putStrLn "test"
test
it :: ()
Prelude> putStrLn "test" ++ "test"

<interactive>:25:1:
Couldn't match expected type ‘[Char]’ with actual type ‘IO ()’
In the first argument of ‘(++)’, namely ‘putStrLn "test"’
In the expression: putStrLn "test" ++ "test"
Prelude> :t "test"
"test" :: [Char]
Prelude> :t "test" ++ "test"
"test" ++ "test" :: [Char]
Prelude>

我不明白错误:
" Couldn't match expected type ‘[Char]’ with actual type ‘IO ()’
In the first argument of ‘(++)’, namely ‘putStrLn "test"’
In the expression: putStrLn "test" ++ "test""

putStrLn接受 [Char] 类型作为第一个参数(我假设它隐式转换为 String ?)。但这不会检查 "test" ++ "test"作为参数传递,即使 "test" ++ "test"[Char] 类型还 ?

最佳答案

您的代码未通过 "test" ++ "test"作为参数。函数应用程序比任何中缀运算符绑定(bind)得更紧密。您的代码被解析为

(putStrLn "test") ++ "test"

您得到的错误是指 putStrLn不返回字符串。

为了解决这个问题,写
putStrLn ("test" ++ "test")

注: String定义为 type String = [Char] ,即它只是同一类型的不同名称。

关于haskell - putStrLn 函数不接受 [Char] 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31688049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com