Lazy is purely and entirely for speed reason, the referential equality is
for that purpose. If it used equality then imagine suddenly comparing a
huge model that you passed in, the speed benefits are entirely gone at that
point. It is very much a corner case that should not be used except in
very specific situations. :-)
On Tuesday, September 13, 2016 at 7:43:28 AM UTC-6, James Wilson wrote:
>
> I had similar feelings; lazy uses a magical referential equality between
> things that afaik isn't exposed elsewhere; to me it would be more
> obvious/clear if it used the same sort of equality as everything else (==),
> which I'd hope would be able to short circuit the meat of the checking if
> referentially equal anyway.
>
> Basically, I'd be interested to hear more about the decision to use
> referential equality with lazy too :)
>
> On Tuesday, 13 September 2016 12:09:05 UTC+1, Yosuke Torii wrote:
>>
>> Hi,
>>
>> I have a question about Html.Lazy.
>>
>> Now I'm optimizing rendering using Html.Lazy but I feel it is difficult
>> to use. I found the arguments are not often *referentially* equal and
>> the view functions are unfortunately called. There are some problems around
>> this.
>>
>>
>> 1. Sometimes new values are created every time.
>>
>> view model = lazy someView { data = model.data }
>>
>> 2. Views do not know how arguments are passed.
>>
>> view model = lazy grandchildView model
>>
>> 3. It is not easy to know if optimization succeeds or not.
>>
>> view model = Debug.log "Unfortunately called!" <| text (toString model)
>>
>>
>> I made a demo to describe this problem.
>>
>> Source: https://github.com/jinjor/elm-issues/blob/master/src/HtmlLazy.elm
>> Demo: https://jinjor.github.io/elm-issues/html-lazy.html
>> (9 example views, but 4 ~ 9 are not optimized unfortunately)
>>
>> So my question is:
>>
>> - Is it a bad idea to compare by *normal *equal?
>> - Have anyone already solved this problem?
>>
>>
>> Thanks.
>>
>
--
You received this message because you are subscribed to the Google Groups "Elm
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.