This file is indexed.

/usr/share/doc/mlton/guide/UnresolvedBugs is in mlton-doc 20100608-5.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta name="robots" content="index,nofollow">



<title>UnresolvedBugs - MLton Standard ML Compiler (SML Compiler)</title>
<link rel="stylesheet" type="text/css" charset="iso-8859-1" media="all" href="common.css">
<link rel="stylesheet" type="text/css" charset="iso-8859-1" media="screen" href="screen.css">
<link rel="stylesheet" type="text/css" charset="iso-8859-1" media="print" href="print.css">


<link rel="Start" href="Home">


</head>

<body lang="en" dir="ltr">

<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-833377-1";
urchinTracker();
</script>
<table bgcolor = lightblue cellspacing = 0 style = "border: 0px;" width = 100%>
  <tr>
    <td style = "
		border: 0px;
		color: darkblue; 
		font-size: 150%;
		text-align: left;">
      <a class = mltona href="Home">MLton MLTONWIKIVERSION</a>
    <td style = "
		border: 0px;
		font-size: 150%;
		text-align: center;
		width: 50%;">
      UnresolvedBugs
    <td style = "
		border: 0px;
		text-align: right;">
      <table cellspacing = 0 style = "border: 0px">
        <tr style = "vertical-align: middle;">
      </table>
  <tr style = "background-color: white;">
    <td colspan = 3
	style = "
		border: 0px;
		font-size:70%;
		text-align: right;">
      <a href = "Home">Home</a>
      &nbsp;<a href = "TitleIndex">Index</a>
      &nbsp;
</table>
<div id="content" lang="en" dir="ltr">
Here are the places where MLton deviates from  <a href="DefinitionOfStandardML">The Definition of Standard ML</a>.  In general, MLton complies with the Definition quite closely, typically much more closely than other SML compilers (see, e.g., our list of <a href="SMLNJDeviations">SML/NJ's deviations</a>).  In fact, the four deviations listed here are the only known deviations, and we have no plans to fix them.  If you find a deviation not listed here, please report a <a href="Bug">Bug</a>. <p>
We don't plan to fix these bugs because one of them (parsing nested cases) has historically never been accepted by any SML compiler, while the other three clearly indicate problems in the Definition. 
</p>

    <ul>

    <li>
<p>
 MLton does not correctly parse case expressions nested within other  matches. For example, the following fails. 
<pre class=code>
<B><FONT COLOR="#A020F0">fun</FONT></B> f <B><FONT COLOR="#5F9EA0">0</FONT></B> y =
      <B><FONT COLOR="#A020F0">case</FONT></B> x <B><FONT COLOR="#A020F0">of</FONT></B>
         <B><FONT COLOR="#5F9EA0">1</FONT></B> =&gt; <B><FONT COLOR="#5F9EA0">2</FONT></B>
       | _ =&gt; <B><FONT COLOR="#5F9EA0">3</FONT></B>
  | f _ y = <B><FONT COLOR="#5F9EA0">4</FONT></B>
</PRE>
   To do this in a program, simply parenthesize the case expression. 
</p>
<p>
 Allowing such expressions, although compliant with the Definition,  would be a mistake, since using parentheses is clearer and no SML  compiler has ever allowed them.  Furthermore, implementing this would  require serious yacc grammar rewriting followed by postprocessing. 
</p>
</li>
    <li class="gap">
<p>
 MLton rejects rebinding of constructors with <tt>val&nbsp;rec</tt>  declarations, as in 
<pre class=code>
 <B><FONT COLOR="#A020F0">val</FONT></B> <B><FONT COLOR="#A020F0">rec</FONT></B> NONE = <B><FONT COLOR="#A020F0">fn</FONT></B> () =&gt; ()
</PRE>
  The Definition (bizarrely) requires this  program to type check, but to raise <tt>Bind</tt>.  
</p>
<p>
 We have no plans to change this behavior, as the Definition's  behavior is clearly an error, a mismatch between the static semantics  and the dynamic semantics. 
</p>
</li>
    <li class="gap">
<p>
 MLton does not hide the equality aspect of types declared in  abstype declarations. So, MLton accepts programs like the following,  while the Definition rejects them. 
<pre class=code>
<B><FONT COLOR="#A020F0">abstype</FONT></B><B><FONT COLOR="#228B22"> t </FONT></B>=<B><FONT COLOR="#228B22"> <FONT COLOR="#B8860B">T</FONT> </FONT></B><B><FONT COLOR="#A020F0">with</FONT></B> <B><FONT COLOR="#A020F0">end</FONT></B>
<B><FONT COLOR="#A020F0">val</FONT></B> _ = <B><FONT COLOR="#A020F0">fn</FONT></B> (t1, t2 : t) =&gt; t1 = t2

<B><FONT COLOR="#A020F0">abstype</FONT></B><B><FONT COLOR="#228B22"> t </FONT></B>=<B><FONT COLOR="#228B22"> <FONT COLOR="#B8860B">T</FONT> </FONT></B><B><FONT COLOR="#A020F0">with</FONT></B> <B><FONT COLOR="#A020F0">val</FONT></B> a = T <B><FONT COLOR="#A020F0">end</FONT></B>
<B><FONT COLOR="#A020F0">val</FONT></B> _ = a = a
</PRE>
  One consequence of this choice is that MLton accepts the following  program, in accordance with the Definition. 
<pre class=code>
 <B><FONT COLOR="#A020F0">abstype</FONT></B><B><FONT COLOR="#228B22"> t </FONT></B>=<B><FONT COLOR="#228B22"> <FONT COLOR="#B8860B">T</FONT> </FONT></B><B><FONT COLOR="#A020F0">with</FONT></B> <B><FONT COLOR="#A020F0">val</FONT></B> eq = <B><FONT COLOR="#A020F0">op</FONT></B> = <B><FONT COLOR="#A020F0">end</FONT></B>
 <B><FONT COLOR="#A020F0">val</FONT></B> _ = <B><FONT COLOR="#A020F0">fn</FONT></B> (t1, t2 : t) =&gt; eq (t1, t2)
</PRE>
  Other implementations will typically reject this program, because  they make an early choice for the type of <tt>eq</tt> to be   <tt>''a&nbsp;*&nbsp;''a&nbsp;-&gt;&nbsp;bool</tt> instead of <tt>t&nbsp;*&nbsp;t&nbsp;-&gt;&nbsp;bool</tt>.  The choice  is understandable, since the Definition  accepts the following program. 
<pre class=code>
 <B><FONT COLOR="#A020F0">abstype</FONT></B><B><FONT COLOR="#228B22"> t </FONT></B>=<B><FONT COLOR="#228B22"> <FONT COLOR="#B8860B">T</FONT> </FONT></B><B><FONT COLOR="#A020F0">with</FONT></B> <B><FONT COLOR="#A020F0">val</FONT></B> eq = <B><FONT COLOR="#A020F0">op</FONT></B> = <B><FONT COLOR="#A020F0">end</FONT></B>
 <B><FONT COLOR="#A020F0">val</FONT></B> _ = eq (<B><FONT COLOR="#5F9EA0">1</FONT></B>, <B><FONT COLOR="#5F9EA0">2</FONT></B>)
</PRE>
 
</p>
</li>
    <li class="gap">
<p>
 MLton (re-)type checks each functor definition at every  corresponding functor application (the compilation technique of   defunctorization).  One consequence of this implementation is that  MLton accepts the following program, while the  Definition rejects it. 
<pre class=code>
<B><FONT COLOR="#0000FF">functor</FONT></B> F (X: <B><FONT COLOR="#0000FF">sig</FONT></B> <B><FONT COLOR="#A020F0">type</FONT></B><B><FONT COLOR="#228B22"> t </FONT></B><B><FONT COLOR="#0000FF">end</FONT></B>) = <B><FONT COLOR="#0000FF">struct</FONT></B>
    <B><FONT COLOR="#A020F0">val</FONT></B> f = id id
<B><FONT COLOR="#0000FF">end</FONT></B>
<B><FONT COLOR="#0000FF">structure</FONT></B> A = F (<B><FONT COLOR="#0000FF">struct</FONT></B> <B><FONT COLOR="#A020F0">type</FONT></B><B><FONT COLOR="#228B22"> t </FONT></B>=<B><FONT COLOR="#228B22"> int </FONT></B><B><FONT COLOR="#0000FF">end</FONT></B>)
<B><FONT COLOR="#0000FF">structure</FONT></B> B = F (<B><FONT COLOR="#0000FF">struct</FONT></B> <B><FONT COLOR="#A020F0">type</FONT></B><B><FONT COLOR="#228B22"> t </FONT></B>=<B><FONT COLOR="#228B22"> bool </FONT></B><B><FONT COLOR="#0000FF">end</FONT></B>)
<B><FONT COLOR="#A020F0">val</FONT></B> _ = A.f <B><FONT COLOR="#5F9EA0">10</FONT></B>
<B><FONT COLOR="#A020F0">val</FONT></B> _ = B.f <B><FONT COLOR="#BC8F8F">&quot;dude&quot;</FONT></B>
</PRE>
 On the other hand, other implementations will typically reject the  following program, while MLton and the   Definition accept it. 
<pre class=code>
<B><FONT COLOR="#0000FF">functor</FONT></B> F (X: <B><FONT COLOR="#0000FF">sig</FONT></B> <B><FONT COLOR="#A020F0">type</FONT></B><B><FONT COLOR="#228B22"> t </FONT></B><B><FONT COLOR="#0000FF">end</FONT></B>)
= <B><FONT COLOR="#0000FF">struct</FONT></B>
    <B><FONT COLOR="#A020F0">val</FONT></B> f = id id
<B><FONT COLOR="#0000FF">end</FONT></B>
<B><FONT COLOR="#0000FF">structure</FONT></B> A = F (<B><FONT COLOR="#0000FF">struct</FONT></B> <B><FONT COLOR="#A020F0">type</FONT></B><B><FONT COLOR="#228B22"> t </FONT></B>=<B><FONT COLOR="#228B22"> int </FONT></B><B><FONT COLOR="#0000FF">end</FONT></B>)
<B><FONT COLOR="#0000FF">structure</FONT></B> B = F (<B><FONT COLOR="#0000FF">struct</FONT></B> <B><FONT COLOR="#A020F0">type</FONT></B><B><FONT COLOR="#228B22"> t </FONT></B>=<B><FONT COLOR="#228B22"> bool </FONT></B><B><FONT COLOR="#0000FF">end</FONT></B>)
<B><FONT COLOR="#A020F0">val</FONT></B> _ = A.f <B><FONT COLOR="#5F9EA0">10</FONT></B>
<B><FONT COLOR="#A020F0">val</FONT></B> _ = B.f false
</PRE>
 See <a href = "References#DreyerBlume07">DreyerBlume07</a> for more details. 
</p>
</li>
</ul>

</div>



<p>
<hr>
Last edited on 2009-10-23 04:21:00 by <span title="v129-22-124-241.VCLIENT.CWRU.Edu">RanAriGur</span>.
</body></html>