[Haskell-cafe] Re: FRP for game programming / artifical life simulation

Antoine Latter aslatter at gmail.com
Fri Apr 30 11:23:19 EDT 2010


On Fri, Apr 30, 2010 at 3:37 AM, Daniel Fischer
<daniel.is.fischer at web.de> wrote:
> Am Donnerstag 29 April 2010 20:08:00 schrieb Ben:
>> A technical question: it seems like the instance of ArrowLoop is too
>> strict (this is something I've wondered about in Liu's paper too.)
>> Shouldn't it be
>>
>>  instance ArrowLoop SFAuto where
>>      loop (SFAuto s f) = SFAuto s f'
>>          where
>>            f' (b, s1) = let (~(c, d), s2) = f ((b, d), s1)
>>                         in (c, s2)
>
> Let-bindings are already lazy, so the '~' makes no difference here.
> Apart from the readability, both are the same as
>
> where
>  f' (b,s1) = let x = f ((b, snd $ fst x),s1) in (fst $ fst x, snd x)

Ben's version is slightly lazier - even though the let binding is
lazy, pattern matching is strict.

so (let ((x,y).z) = (undefined, "hello") in z) will exception out, but
(let (~(x,y),z) = (undefined, "hello") in z) will not.

I don't know if you need that level of laziness, though.

Antoine


More information about the Haskell-Cafe mailing list