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
scroll top