[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