{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE UndecidableInstances #-}

module Blanks.RightAdjunct
  ( RightAdjunct
  , RightAdjunction
  , RightAdjunctionApplicative
  ) where

import Control.Monad.Identity (Identity)
import Data.Functor.Adjunction (Adjunction (..))

type family RightAdjunct (t :: * -> *) :: * -> *

type instance RightAdjunct Identity = Identity

type RightAdjunction (t :: * -> *) = Adjunction t (RightAdjunct t)

type RightAdjunctionApplicative t = (RightAdjunction t, Applicative (RightAdjunct t))