I was wandering if it would be possible to optimize <a href="http://hackage.haskell.org/packages/archive/unamb/0.1.9/doc/html/Data-Unamb.html#v%3Aunamb">unamb</a> by checking if a value is already evaluated to head normal form. <div>
<br></div><div>So </div><div><br></div><div>f `unamb` g</div><div><div><br></div><div>would then be extremely fast if either f or g is already evaluated to head normal form. </div><div><br></div><div><div>Maybe using some vacuum tricks?</div>
<div><br></div><div><div>This function would need to be in IO since it is of course not referentially transparent.</div><div><br></div></div></div><div>Although threads are lightweight in Haskell, forking/waiting/killing surely must have more overhead than just checking the thunk of an expression?</div>
<div><br></div><div>Of course one could also make unamb a primitive :-)</div><div><br></div><div><br></div></div>