<div dir="ltr"><div><div><div><div><div>Does RVM  know the type information at runtime? Is typed racket just a front-end parser (target to contracts)? In theory is it possible to manually optimize untyped racket to make it as fast as the typed one in most cases?<br>
</div><br></div>To ignore the developing features, do we lose any expressivenesses?<br><br></div>(lambda ([ì 0.0] [ó 1.0] #:multiple [p 1])<br>   (define samples (flnormal-sample ì ó p))<br>   (apply  values (flvector->list samples))<br>
<br></div>This example returns non-fix-length multiple values,  it seems impossible to annotate its type.<br></div><div>It took me hours and hours to enumerate all possible ways but still unsolved.<br><br>(define: random-gaussian : (case-> [[#:mean Flonum] [#:stddev Flonum] [#:multiple False] -> Flonum]<br>
                                   [[#:mean Flonum] [#:stddev Flonum] [#:multiple Index] -> (Listof Flonum)])<br>  {lambda {#:mean [ì 0.0] #:stddev [ó 1.0] #:multiple [p #false]}<br>    (define: samples : FlVector (flnormal-sample ì ó (if (false? p) 1 p)))<br>
    (cond [(false? p) (flvector-ref samples 0)]<br>          [else (flvector->list samples)])})<br><br></div><div>Actually, DrRacket complains about (Values Flonum) <br></div><div>So 'multiple values' is evil!<br>
<br></div><div>Keyword argument is also the optional one, it's good for stopping (case->) becoming too complexity. But why not (false? p) tells Typed Racket to choose the first function types?<br><br><br></div><div>
<br><br></div></div>