<div dir="rtl"><div dir="ltr">Hi,</div><div dir="ltr">After reading "<a href="https://pdfs.semanticscholar.org/fb7a/879d639641341e025197b40afad9e21f0ce5.pdf">Push-Pull Functional Reactive Programming</a>" I had an idea about deciding which, of two events, comes first. Instead of using forkIO, I tried something like the following:</div><div dir="ltr"><br></div><div dir="ltr"><div dir="ltr">infi :: Maybe Int</div><div dir="ltr">infi = infi</div><div dir="ltr"><br></div><div dir="ltr">stop :: Maybe Int</div><div dir="ltr">stop = Nothing</div><div dir="ltr"><br></div><div dir="ltr">test :: Int</div><div dir="ltr">test = case (infi, stop) of</div><div dir="ltr">    (Nothing, Just _) -> 1</div><div dir="ltr">    (_, _) -> 2</div><div dir="ltr"><br></div><div>Here, infi is an action that never ends, and stop a function that ends immediately. I thought that the compiler would see that stop evaluates immediately to Nothing and thus will return 2, but it tries to evaluate infi and get stuck.</div><div><br></div><div>I think it happens because I am using a tuple to hold both values (but not really sure about it). Do you know a way to make this arrangement work?</div><div><br></div><div>Yotam</div></div></div>