[Haskell-cafe] Why can't I bind unlifted values at the top level?

David Feuer david.feuer at gmail.com
Sat Jan 21 19:10:33 UTC 2023


Unboxed things that don't contain pointers probably don't need to be
garbage collected, right?

On Sat, Jan 21, 2023, 2:01 PM Ben Gamari <ben at smart-cactus.org> wrote:

> Tom Ellis <tom-lists-haskell-cafe-2017 at jaguarpaw.co.uk> writes:
>
> > I can't bind unlifted values at the top level:
> >
> >     foo = (##)
> >
> >     Top-level bindings for unlifted types aren't allowed: foo = (##)
> >
> > I can understand why I shouldn't be able to bind unlifted
> > *expressions* at the top level
> >
> >     foo = complicatedExpression
> >
> > Perhaps complicatedExpression doesn't terminate!  But why can't I bind
> > _values_, i.e. things that are already evaluated?  Given that (##) and
> > proxy# already exist at the top-level it seems reasonable that I
> > should be allowed to define my own!
> >
> There are a few things going on here. The case you give here is not just
> unlifted but also unboxed (namely, being an unboxed tuple). It's hard to
> see how top-level binding of unboxed values would work operationally
> (e.g. how is the garbage collector to know how to trace this object,
> given that unboxed objects have no object header?).
>
> However, I suspect you do have a point when it comes to unlifted data
> constructors. I think it would be fine to allow an application of a
> data constructor of an unlifted type on the top-level:
>
>   type UMaybe :: Type -> UnliftedType
>   data UMaybe a = UNothing | UJust a
>
>   x :: UMaybe Int
>   x = UJust 42
>
> Perhaps you could open a ticket for this?
>
> Cheers,
>
> - Ben
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20230121/abd3571f/attachment.html>


More information about the Haskell-Cafe mailing list