簡體   English   中英

fmap打印值不打印任何內容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM