packages feed

pandora-0.5.3: Pandora/Pattern/Functor/Extendable.hs

module Pandora.Pattern.Functor.Extendable where

import Pandora.Pattern.Functor.Covariant (Covariant)

infixr 1 <<=======
infixr 2 <<======
infixr 3 <<=====
infixr 4 <<====
infixr 5 <<===
infixr 6 <<==
infixr 7 <<=

{- |
> When providing a new instance, you should ensure it satisfies:
> * Duplication interchange: (f -<-|-|--) . (identity <<=) ≡ (identity <<=) . (f <-|-)
> * Extension interchange: (f <<=) ≡ (f <-|-) . (identity <<=)
-}

class Covariant source source t => Extendable source t where
	(<<=) :: source (t a) b -> source (t a) (t b)

	(<<==), (<<===), (<<====), (<<=====), (<<======), (<<=======), (<<========)  :: source (t a) b -> source (t a) (t b)
	(<<========) = (<<=)
	(<<=======) = (<<=)
	(<<======) = (<<=)
	(<<=====) = (<<=)
	(<<====) = (<<=)
	(<<===) = (<<=)
	(<<==) = (<<=)