[英]fmap print value doesn't print anything
為什么以下內容不打印任何內容:
λ> fmap print (pure 2)
像這樣的作品:
λ> fmap id (pure 2)
2
遵循以下類型:
fmap print (pure 2) :: Applicative f => f (IO ())
fmap id (pure 2) :: (Num b, Applicative f) => f b
讓我們用IO
替換f
:
fmap print (pure 2) :: IO (IO ()) -- #1
fmap id (pure 2) :: (Num b) => IO b -- #2
現在,您可以清楚地看到#2是帶有數字結果的動作,而#1是帶有另一個結果的動作。
此外,GHCi具有以下有關交互式評估的規則 :
2.4。 即時互動評估
在提示符下鍵入表達式時,GHCi立即評估並打印結果:
2.4.1。 提示時的I / O操作
GHCi不僅可以立即執行簡單的表達式評估。 如果輸入型的東西
IO a
對一些a
,然后GHCI執行它作為一個IO-計算。此外,在以下情況下(且僅在以下情況下),GHCi將打印I / O操作的結果:
結果類型是
Show
的實例。結果類型不是()。
由於IO a
不是Show
的實例,所以它不會打印IO操作的結果。
您的表達式返回一個計算(不執行它)。
你要
fmap print (pure 2) >>= id
這樣,我們得到您的計算並在monad中運行它。
看你的類型
fmap print (pure 2) :: Applicative f => f (IO ())
注意
fmap print (pure 2) >>= id -- #1
與(與“視覺”結果相同)與
fmap id (pure 2) -- #2
使用#1,我們進行計算並在monad內運行它以打印數字
在#2中,我們獲取一個數字,並通過fmap
返回一個數字來獲取值
(再次查看類型
fmap id (pure 2) :: (Num b, Applicative f) => f b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.