{-# OPTIONS --without-K --safe #-}

-- Bundled version of Monoidal Category
module Categories.Category.Monoidal.Bundle where

open import Level

open import Categories.Category.Core using (Category)
open import Categories.Category.Monoidal.Core using (Monoidal)
open import Categories.Category.Monoidal.Braided using (Braided)
open import Categories.Category.Monoidal.Symmetric using (Symmetric)

record MonoidalCategory o  e : Set (suc (o    e)) where
  field
    U        : Category o  e
    monoidal : Monoidal U

  open Category U public
  open Monoidal monoidal public

record BraidedMonoidalCategory o  e : Set (suc (o    e)) where
  field
    U         : Category o  e
    monoidal  : Monoidal U
    braided   : Braided monoidal

  monoidalCategory : MonoidalCategory o  e
  monoidalCategory = record { U = U ; monoidal = monoidal }

  open Category U public
  open Braided braided public

record SymmetricMonoidalCategory o  e : Set (suc (o    e)) where
  field
    U         : Category o  e
    monoidal  : Monoidal U
    symmetric : Symmetric monoidal

  open Category U public
  open Symmetric symmetric public

  braidedMonoidalCategory : BraidedMonoidalCategory o  e
  braidedMonoidalCategory = record
    { U        = U
    ; monoidal = monoidal
    ; braided  = braided
    }

  open BraidedMonoidalCategory braidedMonoidalCategory public
    using (monoidalCategory)