[Haskell-cafe] Re: isWHNF :: a -> IO Bool ?
jcast at ou.edu
Thu Sep 27 12:08:29 EDT 2007
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
In IO this should be fine, as IO is explicitly a non-determinism monad
(along with everything else).
More information about the Haskell-Cafe