\begin{code}
{-# OPTIONS --safe #-}
open import Algebra
open import Level
module Data.Weighted.Definition {ℓ} {𝑆 : Type ℓ} (sgp : Semigroup 𝑆) where
open Semigroup sgp renaming (_∙_ to _⊓_)
open import Path
open import HLevels
infixr 5 _▹_∷_
data Weighted (A : Type a) : Type (a ℓ⊔ ℓ)
\end{code}
%<*head>
\begin{code}
data Weighted A where
\end{code}
%</head>
%<*point>
\begin{code}
⟅⟆ : Weighted A
_▹_∷_ : (p : 𝑆) (x : A) (xs : Weighted A) → Weighted A
\end{code}
%</point>
%<*com>
\begin{code}
com : ∀ p x q y xs → p ▹ x ∷ q ▹ y ∷ xs ≡ q ▹ y ∷ p ▹ x ∷ xs
\end{code}
%</com>
%<*dup>
\begin{code}
dup : ∀ p q x xs → p ▹ x ∷ q ▹ x ∷ xs ≡ p ⊓ q ▹ x ∷ xs
\end{code}
%</dup>
%<*trunc>
\begin{code}
trunc : ∀ xs ys (p q : xs ≡ ys) → p ≡ q
\end{code}
%</trunc>