<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Maybe you can use <a href="https://hackage.haskell.org/package/inspection-testing" class="">inspection-testing</a> to add test cases to ensure that these optimizations do not go away in the future. <div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class="">On Aug 9, 2019, at 2:40 PM, David Feuer <<a href="mailto:david.feuer@gmail.com" class="">david.feuer@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="auto" class=""><div class="">It's not faith; I checked the Core for the instances and found they all optimized properly, and produced optimized unfoldings. Complex has a totally strict constructor, which I think means it shouldn't have a Lazifiable instance. Good point about NonEmpty and the extra newtypes. I've thought about (a -> b), but it's not totally clear to me which instance is best. For consistency, probably</div><div dir="auto" class=""><br class=""></div><div dir="auto" class="">lazify f x = f x</div><div dir="auto" class=""><br class=""></div><div dir="auto" class="">but is that really useful and clear?</div><div dir="auto" class=""><br class=""></div><div dir="auto" class="">I'd be okay with lazy rather than lazify, but that clashes with GHC.Exts.lazy. How bad is that? How would you name the classes and package?<br class=""><br class=""><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr">On Sat, Aug 10, 2019, 1:11 AM Mario Blažević <<a href="mailto:mblazevic@stilo.com" class="">mblazevic@stilo.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 2019-08-06 3:29 a.m., David Feuer wrote:<br class="">
> Of course, I forgot to actually link to the package candidate. Whoops!<br class="">
> Here it is:<br class="">
> <br class="">
> <a href="http://hackage.haskell.org/package/lazify-0.1.0.0/candidate" rel="noreferrer noreferrer" target="_blank" class="">http://hackage.haskell.org/package/lazify-0.1.0.0/candidate</a><br class="">
<br class="">
I think lazy would be a better function name than lazify. Generally <br class="">
speaking, verbs (i.e., actions) should bind to monadic functions.<br class="">
<br class="">
You put a lot of faith in GHC optimizations. I wouldn't rely on the <br class="">
default lazify = glazify implementation so much.<br class="">
<br class="">
Finally, some missing instances from base:<br class="">
<br class="">
- a -> b<br class="">
- NonEmpty<br class="">
- Complex<br class="">
- Alt<br class="">
- Par1<br class="">
- Rec1<br class="">
</blockquote></div></div></div>
_______________________________________________<br class="">Libraries mailing list<br class=""><a href="mailto:Libraries@haskell.org" class="">Libraries@haskell.org</a><br class="">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries<br class=""></div></blockquote></div><br class=""></div></body></html>