[Haskell-cafe] Linking and unsafePerformIO

Alexander Dunlap alexander.dunlap at gmail.com
Tue Oct 14 18:42:28 EDT 2008

On Tue, Oct 14, 2008 at 2:14 PM, Jules Bean <jules at jellybean.co.uk> wrote:
> David Roundy wrote:
>> On Tue, Oct 14, 2008 at 05:20:35PM +0100, Jules Bean wrote:
>>> Running a program on a different interpreter or compiler had better
>>> not change its denotation, otherwise it [the denotation] is not much
>>> use as a basis for reasoning.
>> But you're saying above that we can't change programs, right? You
>> probably won't be surprised to hear that different compilers are
>> different programs.  And different packages are also different
>> programs.  Are you the only one who's allowed to fix bugs?
> No. I think we must be at cross purposes.
> I'm saying that we can change programs, and that changes their denotation,
> and that's fine, and anyone can do that. But the denotation of a program is
> supposed to be something independent of a particular compiler or OS or MAC
> address or RAM size or any of the millions of other things which probably
> don't change during the single run of a program.
> Putting these things into the IO monad is not an abuse of the IO monad. It
> is simply an acknowledgement that they are runtime things, and not
> denotational constructs.
> Jules
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

But they aren't runtime constructs, they are compile-time constructs,
just like how (+) has a different meaning when you are on Windows than
it does when you are on Linux: they have different ways of allocating
memory, adding two numbers, putting the result somewhere, etc. Really,
they still denote the same thing ("add two numbers"), they just
abstract over system-dependent details.


More information about the Haskell-Cafe mailing list