this post was submitted on 06 Jan 2025
83 points (96.6% liked)

Programming

17893 readers
178 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities [email protected]



founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] onlinepersona 1 points 2 weeks ago (5 children)
data NonEmpty a = a :| [a]

Note that NonEmpty a is really just a tuple of an a and an ordinary, possibly-empty [a]. This conveniently models a non-empty list by storing the first element of the list separately from the list’s tail: even if the [a] component is [], the a component must always be present.

Wat? How can I "store the first element of the list separated from the lists tail" when the list is empty? Whether a list is empty or not is a runtime possibility, not a compile-time possibility.

Someone care to explain this part? It does not compute at all for me.

Anti Commercial-AI license

[–] Corbin 5 points 2 weeks ago

A list can store zero or more elements. A NonEmpty can store one or more element. That's all.

This overall strategy -- representing the top of a list as a dedicated value -- shows up elsewhere, notably in Forths, where it is called "top of stack" and often stored in a dedicated CPU register.

load more comments (4 replies)