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

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to