packages feed

pandora-0.2.1: Pandora/Paradigm/Basis/Predicate.hs

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

import Pandora.Core.Morphism ((.), (!))
import Pandora.Pattern.Functor.Contravariant (Contravariant ((>$<)))
import Pandora.Pattern.Functor.Determinable (Determinable (determine))
import Pandora.Pattern.Functor.Divariant (($))
import Pandora.Pattern.Object.Setoid (Boolean (True))

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

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

instance Determinable Predicate where
	determine = Predicate (True !)