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 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe