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

Jonathan Cast 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
> intent)? 

In IO this should be fine, as IO is explicitly a non-determinism monad
(along with everything else).

jcc



More information about the Haskell-Cafe mailing list