apfelmus <[EMAIL PROTECTED]> writes:

> 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.

Isn't it OK if it's a -> IO Bool ? (Admittedly, the test
example above is wrong in that case).

-- 
Jón Fairbairn                                 [EMAIL PROTECTED]

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

Reply via email to