{-|
Module: HasCups
Description: A cup operation for a meaning type.
License: GPL-3
Required operations for a meaning type to have some form of formal
cups. These can be used for Lambek reductions on the meaning of the
sentence.
|-}
module Discokitty.HasCups where
class HasCups m where
-- | Given an integer, performs that number of cups between the two
-- meaning spaces. In a monoidal category, this should be the composition
-- of the tensor product of two states with a certain number of cups.
cup :: Int -> m -> m -> m
-- | Neutral element for the cup operation. This could be given by the
-- identity morphism (state).
cunit :: m