在玩單子時,我經常遇到評價問題。現在,我理解懶惰評估的基本概念,但我沒有看到單子在Haskell中如何被懶惰地評估。哈斯克爾和懶Monads評價
考慮下面的代碼
module Main where
import Control.Monad
import Control.Applicative
import System
main = print <$> head <$> getArgs
在我看來,應該主要功能應打印第一個控制檯的說法,但事實並非如此。
我知道
getArgs :: IO [String]
head <$> getArgs :: IO String
print <$> (head <$> getArgs) :: IO (IO())
main :: IO (IO())
所以顯然,第一個參數不被打印在標準輸出,因爲第一單子的內容IO不評估。所以如果我加入這兩個monad,它就會起作用。
main = join $ print <$> head <$> getArgs
請問誰能爲我澄清一下? (或給我一個指針)
非常感謝您的詳盡回覆。 – Jack 2011-10-17 14:18:51