{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleInstances #-} module Data.Poly.IsPoly ( GetPolyConstraint, IsPoly ) where import GHC.Exts (Constraint) import Data.Poly {-| Gets the type of the constraint in a 'Poly' -} type family GetPolyConstraint a :: * -> Constraint where GetPolyConstraint (Poly c) = c {- Constraint that asserts @t@ is a @Poly u@ for some @u@. -} class (a ~ Poly (GetPolyConstraint a)) => IsPoly a instance (a ~ Poly (GetPolyConstraint a)) => IsPoly a