<p dir="ltr">Suppose you have something like</p>
<p dir="ltr">data Free f a = Pure a | Free (f (Free f a))<br>
instance Functor f => Functor (Free f) where<br>
  fmap = mapFree</p>
<p dir="ltr">-- Separated out for clarity<br>
mapFree :: Functor f<br>
  => (a -> b)<br>
  -> Free f a -> Free f b<br>
mapFree f (Pure a) = Pure (f a)<br>
mapFree f (Free m) = Free (fmap (mapFree f) m)</p>
<p dir="ltr">Now void x = () <$ x, and `Free f` doesn't offer any potential for a cheap <$. So voiding out Free f a is going to cost you some. Laziness will help, but you'll face extra allocation.</p>
<div class="gmail_quote">On Apr 1, 2016 1:02 AM, "Erik de Castro Lopo" <<a href="mailto:mle%2Bhs@mega-nerd.com">mle+hs@mega-nerd.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">David Feuer wrote:<br>
<br>
> I think it's an interesting idea from a safety standpoint. Unfortunately,<br>
> as Ed pointed out to me in a similar context, `void` isn't always free.<br>
<br>
I would love to see an elaboration of that.<br>
<br>
Erik<br>
--<br>
----------------------------------------------------------------------<br>
Erik de Castro Lopo<br>
<a href="http://www.mega-nerd.com/" rel="noreferrer" target="_blank">http://www.mega-nerd.com/</a><br>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div>