\begin{code}
{-# OPTIONS --cubical --safe #-}

open import Algebra
open import Level

module Control.Monad.Weighted.Semimodule {β„“} {𝑅 : Type β„“} (rng : Semiring 𝑅) where

open Semiring rng

open import Level
open import Path
open import Path.Reasoning
open import HLevels
open import Control.Monad.Weighted.Definition rng
open import Control.Monad.Weighted.Eliminators rng
open import Control.Monad.Weighted.Union rng
open import Control.Monad.Weighted.Cond rng

module _ {a} {A : Type a} where
  semimodule : LeftSemimodule rng (Weighted A)
  semimodule .LeftSemimodule.semimodule .CommutativeMonoid.monoid .Monoid._βˆ™_ = _βˆͺ_
  semimodule .LeftSemimodule.semimodule .CommutativeMonoid.monoid .Monoid.Ξ΅ = []
  semimodule .LeftSemimodule.semimodule .CommutativeMonoid.monoid .Monoid.assoc xs ys zs = sym (βˆͺ-assoc xs ys zs)
  semimodule .LeftSemimodule.semimodule .CommutativeMonoid.monoid .Monoid.Ξ΅βˆ™ _ = refl
  semimodule .LeftSemimodule.semimodule .CommutativeMonoid.monoid .Monoid.βˆ™Ξ΅ xs = βˆͺ-idr xs
  semimodule .LeftSemimodule.semimodule .CommutativeMonoid.comm = βˆͺ-com
  semimodule .LeftSemimodule._β‹Š_ = _β‹Š_
  semimodule .LeftSemimodule.⟨*βŸ©β‹Š = *-assoc-β‹Š
  semimodule .LeftSemimodule.⟨+βŸ©β‹Š x y xs = sym (β‹Š-distribΚ³ x y xs)
  semimodule .LeftSemimodule.β‹ŠβŸ¨βˆͺ⟩ x y xs = sym (β‹Š-distribΛ‘ x y xs)
  semimodule .LeftSemimodule.1β‹Š = 1β‹Š
  semimodule .LeftSemimodule.0β‹Š = 0β‹Š
  semimodule .LeftSemimodule.β‹Šβˆ… = β‹Šβˆ…
\end{code}