Haskell函数组成 - putStrLn。节目

时间:2017-05-15 03:08:42

标签: haskell functional-programming function-composition

所以我有两个基于其类型的功能,我觉得我应该能够与功能组合相结合。

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 ()

有谁知道为什么这种功能组合尝试失败了?

(我意识到这可能是一个非常基本的问题,但我只是开始使用这种语言,所以请在这里忍受)

0 个答案:

没有答案