On Fri, 2008-12-05 at 18:50 +0100, Thomas Davie wrote: > On 5 Dec 2008, at 17:46, Duncan Coutts wrote: > > > On Fri, 2008-12-05 at 17:06 +0100, Thomas Davie wrote: > >> On 5 Dec 2008, at 17:00, Duncan Coutts wrote: > >> > >>> On Fri, 2008-12-05 at 16:50 +0100, Thomas Davie wrote: > >>> > >>>> Sure, and he could then use a fold instead of a map. Reading files > >>>> is > >>>> problematic, but as long as you're only doing it once (the most > >>>> common > >>>> situation) is entirely fine wrapped up in an unsafePerformIO. > >>> > >>> Nooooo! > >>> > >>> Please don't go telling people it's entirely fine to use > >>> unsafePerformIO > >>> like that (or at all really). > >> > >> Exactly what isn't fine about it? > > > > It's the antithesis of pure functional programming. It's so unsafe > > that > > we don't even have a semantics for it. > Yes, but we also don't have semantics for IO, so it's no real surprise > that we have none for something that runs an IO action.
We don't have a (denotational) semantics for Haskell, either. But, in principle, one could be produced if desired. The pure subset is easy; IO only requires a semantics for the underlying OS and --- in the presence of the FFI --- the C language. Unless you add unsafePerformIO or evaluate to the language. I think that, if someone was sufficiently motivated to work out the details, that you could prove that there is *no* denotational semantics for IO which admits either function without changing the definition of one or more pure Haskell types. jcc _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe