ho letto questo:ViewPatterns e più chiamate a Haskell
http://hackage.haskell.org/trac/ghc/wiki/ViewPatterns
Mi piace l'idea, vuole utilizzare l'estensione. Vorrei tuttavia accertarmi di una cosa: se la funzione di visualizzazione viene valutata una sola volta per una singola corrispondenza.
Quindi diciamo che abbiamo:
Ora diciamo che invoco f a
. view
invocato due volte o solo una volta per l'argomento specificato a
?
EDIT:
ho cercato di scoprire se questo è il caso e ha scritto quanto segue:
{-# 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)
output utilizzando GHC:
Inside ble: Just 234
Inside ble: Just 234
Main: 234
output utilizzando GHC (con ottimizzazione)
Inside ble: Just 234
Main: 234
uscita utilizzando GHCi:
Main: Inside ble: Just 234
Inside ble: Just 234
234
GHC ha un hack speciale per evitare il ricalcolo di identiche espressioni di visualizzazione. – augustss