<div dir="auto">Unboxed things that don't contain pointers probably don't need to be garbage collected, right?</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jan 21, 2023, 2:01 PM Ben Gamari <<a href="mailto:ben@smart-cactus.org">ben@smart-cactus.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Tom Ellis <<a href="mailto:tom-lists-haskell-cafe-2017@jaguarpaw.co.uk" target="_blank" rel="noreferrer">tom-lists-haskell-cafe-2017@jaguarpaw.co.uk</a>> writes:<br>
<br>
> I can't bind unlifted values at the top level:<br>
><br>
>     foo = (##)<br>
><br>
>     Top-level bindings for unlifted types aren't allowed: foo = (##)<br>
><br>
> I can understand why I shouldn't be able to bind unlifted<br>
> *expressions* at the top level<br>
><br>
>     foo = complicatedExpression<br>
><br>
> Perhaps complicatedExpression doesn't terminate!  But why can't I bind<br>
> _values_, i.e. things that are already evaluated?  Given that (##) and<br>
> proxy# already exist at the top-level it seems reasonable that I<br>
> should be allowed to define my own!<br>
><br>
There are a few things going on here. The case you give here is not just<br>
unlifted but also unboxed (namely, being an unboxed tuple). It's hard to<br>
see how top-level binding of unboxed values would work operationally<br>
(e.g. how is the garbage collector to know how to trace this object,<br>
given that unboxed objects have no object header?).<br>
<br>
However, I suspect you do have a point when it comes to unlifted data<br>
constructors. I think it would be fine to allow an application of a<br>
data constructor of an unlifted type on the top-level:<br>
<br>
  type UMaybe :: Type -> UnliftedType<br>
  data UMaybe a = UNothing | UJust a<br>
<br>
  x :: UMaybe Int<br>
  x = UJust 42<br>
<br>
Perhaps you could open a ticket for this?<br>
<br>
Cheers,<br>
<br>
- Ben<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div>