[Ur] css_style and 'Anonymous function remains at code generation'

Adam Chlipala adamc at csail.mit.edu
Fri Oct 4 10:48:16 EDT 2013


On 10/04/2013 10:30 AM, Sergey Mironov wrote:
> fun mkcss (n:string) (v:string) : (css_style ->  css_style) = fn x =>
> oneProperty x (value (property n) (atom v))
>
> fun css (l : list (css_style ->  css_style)) : css_style =
>    List.foldr (fn f s =>  f s) noStyle l
>    

This issue isn't directly related to CSS.  Rather, in Ur/Web, no 
first-class functions are allowed to exist in server-side code at 
runtime.  The compiler can't find a way to optimize your code to hide 
the first-class functions of type [css_style -> css_style], since there 
is currently no optimization to simplify calls to recursive functions 
(e.g., [foldr]) statically.

Two effective refactorings that come to mind are:
1. Fold over a record instead of a list.
2. Fold over a list of "(n, v) pairs" instead of a list of functions, 
calling [mkcss] within the first argument to [List.foldr].



More information about the Ur mailing list