Viewpatterns et plusieurs appels dans Haskell
-
07-11-2019 - |
Question
J'ai lu ceci:
http://hackage.haskell.org/trac/ghc/wiki/viewpatterns
J'aime l'idée, je veux utiliser l'extension. Cependant, je voudrais m'assurer une chose: si la fonction de vue est évaluée une fois pour une seule correspondance.
Alors disons que nous avons:
{-# LANGUAGE ViewPatterns #-}
...
f (view -> Nothing) = ...
f (view -> Just x) = ...
view :: a -> Maybe b
Maintenant disons que j'invoque f a
. Est view
invoqué deux fois ou juste une fois pour l'argument donné a
?
ÉDITER:
J'ai essayé de savoir si c'est le cas et j'ai écrit ce qui suit:
{-# 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)
Sortie à l'aide de GHC:
Inside ble: Just 234
Inside ble: Just 234
Main: 234
Sortie à l'aide de GHC (avec optimisation)
Inside ble: Just 234
Main: 234
Sortie à l'aide de GHCI:
Main: Inside ble: Just 234
Inside ble: Just 234
234
Pas de solution correcte
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow