czytam to:ViewPatterns i wiele połączeń w Haskell
http://hackage.haskell.org/trac/ghc/wiki/ViewPatterns
podoba mi się pomysł, chcesz używać rozszerzenia. Chciałbym jednak upewnić się co do jednego: czy funkcja widoku jest oceniana raz dla pojedynczego dopasowania.
Więc powiedzmy mamy:
Teraz powiedzmy modlę f a
. Czy jest view
wywoływana dwukrotnie lub tylko raz dla danego argumentu a
?
EDIT:
Próbowałem dowiedzieć się, czy jest to przypadek i napisał następujący:
{-# 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 korzystając GHC:
Inside ble: Just 234
Inside ble: Just 234
Main: 234
wyjścia używając GHC (z optymalizacja)
Inside ble: Just 234
Main: 234
wyjścia używając GHCi:
Main: Inside ble: Just 234
Inside ble: Just 234
234
GHC ma specjalny hack, aby uniknąć ponownego obliczania identycznych wyrażeń widoku. – augustss