
On 2021-05-03 10:25 a.m., Richard Eisenberg wrote:
It's true that Safe cannot be overridden locally. This is implemented by the fact that NoSafe does not exist. To me, this design makes sense, because it means that compiling with `ghc -XSafe` is guaranteed to use Safe Haskell. So we would need something like a default-safety field in Cabal, that could be overridden locally.
But, still, this may be easier than the status quo.
I don't see why this should be easier. I do understand how type checking is easier than type inference, but in this case the "type" of the module (and every declaration in it) is a single bit: Safe or Unsafe. How can checking whether a declaration is safe can be easier than inferring whether it is? I must be misunderstanding your proposal.
Do we think this would work? Specifically:
* Introduce a new flag -fdefault-safety={safe,trustworthy,unsafe} that changes the module-level default. This default names the safety level in effect for any module that declares none of Safe, Trustworthy, or Unsafe. * If -fdefault-safety is not specified at the command line, it is as if the user wrote -fdefault-safety=unsafe.
And that's it.
Consequence: Safe-inference would never take place, because every module would have a declared level of Safety. The Safe-inference code could thus be removed.
Further work: Introduce default-safety in Cabal, but that's not really necessary to make the changes above.
What do we think?
Richard
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.