module Pandora.Pattern.Junction.Transformer (Transformer (..), type (:>)) where import Pandora.Core.Transformation (type (~>)) import Pandora.Pattern.Junction.Composition (Composition) import Pandora.Pattern.Functor.Covariant (Covariant) import Pandora.Pattern.Functor.Pointable (Pointable) class Composition t => Transformer t where {-# MINIMAL lay, wrap #-} type Schema (t :: * -> *) (u :: * -> *) = (r :: * -> *) | r -> t u lay :: Covariant u => u ~> Schema t u wrap :: Pointable u => t ~> Schema t u infixr 1 :> type (:>) t u a = Transformer t => Schema t u a