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

Tristan Allwood tora at zonetora.co.uk
Thu Sep 27 11:57:54 EDT 2007


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)? 

Ah, I do realise my example use case above needs some =<<'s inserting
into it which may have led to some confusion.

Tris

-- 
Tristan Allwood
PhD Student
Department of Computing
Imperial College London


More information about the Haskell-Cafe mailing list