<div dir="ltr"><div dir="ltr">Am Mi., 19. Dez. 2018 um 13:24 Uhr schrieb Paul <<a href="mailto:aquagnu@gmail.com">aquagnu@gmail.com</a>>:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">[...] @Ian: Example with unsafeCoerce is not correct: how is "unsafeCoerce" <br>
related to Maybe/pattern matching?</blockquote><div><br></div><div>I think Ian just wanted to demonstrate that it is possible to crash Haskell programs in the same way as C programs if you really want to. OTOH, the name "unsafeCoerce" of the function used and its type (a -> b) alone should be very visible warning signs. ;-) Mere mortals should better forget about its existence, but unsafeCoerce can be useful if it is wrapped correctly. So it's a bit like a buzz saw: Quite useful if you need it, but *very* dangerous unless you know what you're doing...</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> True is that Haskell is not safe, for <br>
example, it has unsafe functions fromJust, etc, while pattern-matching <br>
is only the right way to "extract" value from Maybe (OK, also "maybe" <br>
function).</blockquote><div><br></div><div>If you consider a language "safe" or not depends on your POV: Haskell is safe in the sense that programs written in it (without unsafeFOO stuff and without any FFI involved) do not segfault randomly like e.g. C programs. fromJust uses non-exhaustive pattern matching, which raises an exception if it encounters Nothing. This is fundametally different from e.g. dereferencing NULL/nullptr or accessing random memory.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> Ian, by the way, how can you guarantee that Segmentation <br>
Fault will not happen in Haskell application? I hit even freezing of <br>
Haskell apps, Haskell is not a language with such assertions. May be it <br>
will be Rust, but Haskell - never.<br></blockquote><div><br></div><div>Every turing complete language *will* include the possibility of non-termination (which is what I guess you mean by "freezing), so this part is irrelevant. But even if you ignore that, every useful programming language on earth will give you the possibility of crashing, if you want it or not: At one point you will need to call out to native/C land to use OS and/or library functionality. Well, unless you want to rewrite your OS and all libraries in your shiny new and safe language...</div></div></div>