module Data.Singular where import Data.Countable import Data.Searchable -- | There is exactly one value. class (Finite a, AtLeastOneCountable a) => Singular a where single :: a instance Singular () where single :: () single = () instance (Singular a, Singular b) => Singular (a, b) where single :: (a, b) single = (a forall a. Singular a => a single, b forall a. Singular a => a single)