Consider the following code example:
-- Update the fields of a record. (It must have the fields already.)
{ person |
name = "George" }
-- Update multiple fields at once, using the current values.
{ particle |
position = particle.position + particle.velocity,
velocity = particle.velocity + particle.acceleration }
Source: Learn Elm in X Minutes
How to read |in this example and in Elm in general?
I am familiar with it in set-builder notation as "where" / "such that", and in the contexts of a list in Haskell it has a very similar purpose, for example.
[ x*2 | x <- [1..10] ]
logically equivalent

source: Teach you A Haskell
(Obviously, I am also familiar with its use as a unary "or" operator in languages like C)
How about something like type Msg = Increment | Decrement?
Source: https://guide.elm-lang.org
Or in this example, when discussing Connection Types :
type Boolean
= T
| F
| Not Boolean
| And Boolean Boolean
| Or Boolean Boolean