me leyeron:ViewPatterns y múltiples llamadas en Haskell
http://hackage.haskell.org/trac/ghc/wiki/ViewPatterns
me gusta la idea, quieren utilizar la extensión. Sin embargo, me gustaría asegurarme de una cosa: si la función de vista se evalúa una vez para una sola coincidencia.
Así que vamos a decir que tenemos:
Ahora digamos que invoco f a
. ¿Se invoca view
dos veces o solo una vez para el argumento dado a
?
EDITAR:
me trató de averiguar si este es el caso y escribió lo siguiente:
{-# 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)
salida usando GHC:
Inside ble: Just 234
Inside ble: Just 234
Main: 234
salida usando GHC (con optimización)
Inside ble: Just 234
Main: 234
de salida usando GHCi:
Main: Inside ble: Just 234
Inside ble: Just 234
234
GHC tiene un truco especial para evitar el recálculo de expresiones de vista idénticas. – augustss