[Haskell-cafe] Re: isWHNF :: a -> IO Bool ?

apfelmus apfelmus at quantentunnel.de
Thu Sep 27 11:31:51 EDT 2007


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



More information about the Haskell-Cafe mailing list