所以我有两个基于其类型的功能,我觉得我应该能够与功能组合相结合。
ghci> :t show
show :: Show a => a -> String
ghci> :t putStrLn
putStrLn :: String -> IO ()
初步尝试成功,
ghci> ( putStrLn . show ) "Hello World!"
"Hello World!"
我想我尝试将新功能定义为该组合
ghci> let myShow = putStrLn . show
但它没有用:
ghci> myShow "Hello World!"
<interactive>:28:8:
Couldn't match expected type `()' with actual type `[Char]'
In the first argument of `myShow', namely `"Hello World!"'
In the expression: myShow "Hello World!"
In an equation for `it': it = myShow "Hello World!"
有趣的是,我的myShow
函数的类型变为() -> IO ()
ghci> :t myShow
myShow :: () -> IO ()
我原以为该类型应为Show a => a -> IO ()
。
有谁知道为什么这种功能组合尝试失败了?
(我意识到这可能是一个非常基本的问题,但我只是开始使用这种语言,所以请在这里忍受)