{-# 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