On 08/18/10 11:30, Dan Doel wrote:
> By contrast, here:
>>http://code.haskell.org/~dolio/agda-share/html/IOE.html>> is a term model of IO. It's in Agda, for some proofs, but it's easily done in
> GHC. And if we write the above loops in this model, we get:
>> loop = loop ==> undefined
> loop' = putStr "c" >> loop' ==> Put 'c' :>>= \_ -> loop'
>> so the model actually represents the difference between these two loops, and
> we don't have to fall back to saying, "well, they have different,
> unrepresented side-effects."
I see your point here, but I think that comparing loop' to loop is
misleading because they *are* values that can be distinguished. A
better example would be
loop' = putStr "c" >> loop'
loop'' = putStr "d" >> loop''
Now we have that loop' = loop''.
Cheers,
Greg