
John Meacham wrote:
This is why I think an 'Unsafe.*' would be a bad idea. it would be a dumping ground for lots of routines with nothing in common other than it made someone uncomfortable at some point.
Isn't this a good idea? I want to know about this "uncomfortableness" especially if I can use such "uncomfortable" routines to segfault my program.
I mean, think if all the ByteString functions dealing with pointers had to move there because you might pass in a bad pointer.
They should be moved there, shouldn't they? All the unsafe stuff is in a single module, Data.ByteString.Base. What's the purpose of this module? Wouldn't that purpose be better served if it were put in Unsafe.*? It's more helpful to me when reading a program to see the red flag "import Unsafe.ByteString" rather than the apparently innocuous "import Data.ByteString.Base"...
We really need to stop using the terms 'safe' and 'unsafe' so much actually.
There seems to be a clear dividing line (with, of course, FFI stuff on the "unsafe" side). But I guess it depends on your vision of the language: do you consider unsafePerformIO to be Haskell? At least with FFI you need to pass a flag to switch it on. -- Ashley Yakeley