Tristan Allwood wrote:
Does anyone know if there is a function that tells you if a haskell
value has been forced or not?
e.g.
isWHNF :: a -> IO Bool
let x = (map succ [0..]) in do
putStrLn . show (isWHNF x) -- False
putStrLn . show . head $ x
putStrLn . show (isWHNF x) -- True
putStrLn . show (isWHNF (Just undefined)) -- True
Note that this function is not referentially transparent since
isWHNF 2 = True
but
isWHNF (1+1) = False
although 1+1 = 2. In other words, it messes up the language semantics
(extensional equality) which is bad.
Regards,
apfelmus
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe