polydata-core-0.1.0.0: src/Data/Poly/IsPoly.hs
{-# 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