{-# LANGUAGE AllowAmbiguousTypes #-} module Pandora.Paradigm.Structure.Ability.Convertible where import Pandora.Pattern.Category ((.)) import Pandora.Paradigm.Primary.Functor.Tagged (Tagged (Tag)) class Convertible f t u a where conversion :: Tagged f (t a) -> u a convert :: forall f t u a . Convertible f t u a => t a -> u a convert :: t a -> u a convert = Tagged f (t a) -> u a forall k k (f :: k) (t :: k -> *) (u :: k -> *) (a :: k). Convertible f t u a => Tagged f (t a) -> u a conversion (Tagged f (t a) -> u a) -> (t a -> Tagged f (t a)) -> t a -> u a forall (m :: * -> * -> *) b c a. Category m => m b c -> m a b -> m a c . forall a. a -> Tagged f a forall k (tag :: k) a. a -> Tagged tag a Tag @f