On Fri, Dec 30, 2011 at 9:11 AM, Chris Smith <cdsm...@gmail.com> wrote:
> > > time t: f 42 (computational process implementing func application > > begins…) > > t+1: <keystroke> = 1 > > t+2: 43 (… and ends) > > > > > > time t+3: f 42 > > t+4: <keystroke> = 2 > > t+5: 44 > > > > > > Conclusion: f 42 != f 42 > > That conclusion would only follow if the same IO action always produced > the same result when performed twice in a row. That's obviously untrue, > so the conclusion doesn't follow. What you've done is entirely > consistent with the fact that f 42 = f 42... it just demonstrates that > whatever f 42 is, it doesn't always produce the same result when you o > it twice. > Exactly. Gregg threw in two different executions, which of course can produce two different values, whether or not the IOs are equal. > What Conal is getting at is that we don't have a formal model of what an > IO action means. Nevertheless, we know because f is a function, that > when it is applied twice to the same argument, the values we get back > (which are IO actions, NOT integers) are the same. And I also raised a more fundamental question than whether this claim of sameness is true, namely what is equality on IO? Without a precise & consistent definition of equality, the claims like "f 42 == f (43 - 1)" are even defined, let alone true. And since the conversation is about Haskell IO, I'm looking for a definition that applies to all of IO, not just some relatively well-behaved subset like putchar/getchar+IORefs+threads. - Conal - Conal
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe