{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeFamilies #-}
module ByOtherNames.Constraint (Top, Impossible) where
import Data.Void (Void)

-- | A constraint that can always be satisfied.
--
-- Copied from the @sop-core@ package.
--
class Top x
instance Top x

-- | A constraint that can't be satisfied.
--
-- Mostly useful with enum-like sum types to denote that they don't have fields.
class (x ~ Void) => Impossible x
instance (x ~ Void) => Impossible x