Viewpattern e più chiamate in Haskell
-
07-11-2019 - |
Domanda
Ho letto questo:
http://hackage.haskell.org/trac/ghc/wiki/viewpatterns
Mi piace l'idea, voglio usare l'estensione. Tuttavia, vorrei assicurarmi di una cosa: se la funzione di vista viene valutata una volta per una singola corrispondenza.
Quindi diciamo che abbiamo:
{-# LANGUAGE ViewPatterns #-}
...
f (view -> Nothing) = ...
f (view -> Just x) = ...
view :: a -> Maybe b
Ora diciamo che invocho f a
. È view
invocato due volte o solo una volta per l'argomento dato a
?
MODIFICARE:
Ho provato a scoprire se questo è il caso e ho 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 usando GHC:
Inside ble: Just 234
Inside ble: Just 234
Main: 234
Output usando GHC (con ottimizzazione)
Inside ble: Just 234
Main: 234
Output usando GHCI:
Main: Inside ble: Just 234
Inside ble: Just 234
234
Nessuna soluzione corretta
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow