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