私はこれを読みました:
http://hackage.haskell.org/trac/ghc/wiki/ViewPatterns
私はアイデアが好きです、拡張機能を使いたいです。ただし、1 つのことを確認したいと思います: ビュー関数が 1 回の一致に対して 1 回評価されるかどうかです。
だから、私たちが持っているとしましょう:
{-# LANGUAGE ViewPatterns #-}
...
f (view -> Nothing) = ...
f (view -> Just x) = ...
view :: a -> Maybe b
を呼び出すとしましょうf a
。view
指定された引数に対して 2 回呼び出されるか、1 回だけ呼び出されますa
か?
編集:
私はこれが事実であるかどうかを調べようとし、次のように書きました:
{-# 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)
GHC を使用した出力:
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