多次調用我這樣說的:ViewPatterns和哈斯克爾
http://hackage.haskell.org/trac/ghc/wiki/ViewPatterns
我喜歡這個主意,想用擴展。然而,我想確保一件事:視圖函數是否僅針對單個匹配進行一次評估。
所以我們可以說,我們有:
現在,讓我們說,我調用f a
。對於給定的參數a
,view
被調用兩次或只調用一次?
編輯:
我試圖找出是否是這種情況,並寫道:使用GHC
{-# LANGUAGE ViewPatterns #-}
import System.IO.Unsafe
blah (ble -> Nothing) = 123
blah (ble -> Just x) = x
ble x = unsafePerformIO $ do
putStrLn $ "Inside ble: " ++ show x
return x
main :: IO()
main = do
putStrLn $ "Main: " ++ show (blah $ Just 234)
輸出:
Inside ble: Just 234
Inside ble: Just 234
Main: 234
使用GHC輸出(帶優化)
Inside ble: Just 234
Main: 234
輸出使用GHCI:
Main: Inside ble: Just 234
Inside ble: Just 234
234
GHC有避免重新計算相同視圖表達式的特殊方法。 – augustss