
On Thu, 2007-09-27 at 16:57 +0100, Tristan Allwood wrote:
On Thu, Sep 27, 2007 at 05:31:51PM +0200, apfelmus wrote:
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. Indeed. Does it still mess up with the result in IO Bool (as was my intent)?
In IO this should be fine, as IO is explicitly a non-determinism monad (along with everything else). jcc