<div dir="auto">If-then-else is a syntactic convenience. Missing cases are usually wrong. We don't want to go out of our way to make it convenient to write wrong code.</div><br><div class="gmail_quote"><div dir="ltr">On Mon, Jul 9, 2018, 1:20 PM Johannes Waldmann <<a href="mailto:johannes.waldmann@htwk-leipzig.de">johannes.waldmann@htwk-leipzig.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear Cafe,<br>
<br>
a student in my class detected<br>
this inconsistency in the design of Haskell:<br>
<br>
> Why require that each "if-then" has an "else"<br>
> while still allowing incomplete sets of patterns?<br>
> We could define "if p then a"<br>
> by translating to "case p of { True -> a }"<br>
<br>
I think that "but then we'd have the dangling-else problem"<br>
is not a good answer because this is really about semantics,<br>
not surface syntax.<br>
<br>
For reference, Scheme has short-if, see<br>
<a href="http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-14.html#node_sec_11.4.3" rel="noreferrer noreferrer" target="_blank">http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-14.html#node_sec_11.4.3</a><br>
(value is "unspecified" if condition is false)<br>
and Common LISP does as well<br>
<a href="https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node84.html#SECTION001160000000000000000" rel="noreferrer noreferrer" target="_blank">https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node84.html#SECTION001160000000000000000</a><br>
(value is "nil")<br>
<br>
Was this considered at some point in Haskell's design process?<br>
There is Section 5.2 on pattern matching in<br>
<a href="http://haskell.cs.yale.edu/wp-content/uploads/2011/02/history.pdf" rel="noreferrer noreferrer" target="_blank">http://haskell.cs.yale.edu/wp-content/uploads/2011/02/history.pdf</a> (*)<br>
but it does not mention if-then(-else).<br>
<br>
- J.W.<br>
<br>
(*) can we please add this to <a href="https://www.haskell.org/documentation" rel="noreferrer noreferrer" target="_blank">https://www.haskell.org/documentation</a><br>
Upvote this: <a href="https://github.com/haskell-infra/hl/issues/86" rel="noreferrer noreferrer" target="_blank">https://github.com/haskell-infra/hl/issues/86</a><br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div>