module Data.Functor.Module where

class LeftModule cat t1 f where
  lstrength :: f a `cat` f (t1 a x)

class RightModule cat t1 f where
  rstrength :: f a `cat` f (t1 x a)

class (LeftModule cat t1 f, RightModule cat t1 f) => Bimodule cat t1 f