에서 여러 통화 나는이 글을 읽을 :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