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

Reply via email to