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