module Pandora.Paradigm.Basis.Predicate (Predicate (..)) where

import Pandora.Core.Morphism ((.), ($))
import Pandora.Pattern.Functor.Contravariant (Contravariant ((>$<)))
import Pandora.Pattern.Object.Setoid (Boolean)

newtype Predicate a = Predicate { predicate :: a -> Boolean }

instance Contravariant Predicate where
        f >$< g = Predicate $ predicate g . f