
27 Sep
2007
27 Sep
'07
3:31 p.m.
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