{-# LANGUAGE UndecidableSuperClasses #-}

module Data.Constraint.Compose (Compose, decompose) where

import Data.Constraint

class c (f a) => Compose (c :: β -> Constraint) (f :: α -> β) (a :: α)
instance c (f a) => Compose c f a

decompose :: Compose c f a :- c (f a)
decompose = Sub Dict