module UVMHS.Core.Classes.Constraints where import UVMHS.Core.Init infixr 1 :⇒: infixl 3 :∧: infixl 7 :∘: class U a instance U a class (c₁ a,c₂ a) ⇒ (c₁ :∧: c₂) a instance (c₁ a,c₂ a) ⇒ (c₁ :∧: c₂) a class (t (u a)) ⇒ (t :∘: u) a instance (t (u a)) ⇒ (t :∘: u) a class (:⇒:) c₁ c₂ where impl ∷ W c₁ → W c₂ type FCoercibleRel t t' = (∀ x x'. (Coercible x x') ⇒ Coercible (t x) (t' x')) ∷ Constraint type FCoercible t = FCoercibleRel t t fcoercibleW_UNSAFE ∷ W (FCoercible m) fcoercibleW_UNSAFE :: forall {k} {k} (m :: k -> k). W (FCoercible m) fcoercibleW_UNSAFE = W (FCoercible 𝑂) -> W (FCoercible m) forall a b. a -> b coerce_UNSAFE (W (FCoercible 𝑂) forall (c :: Constraint). c => W c W ∷ W (FCoercible 𝑂)) type Func (c ∷ ★ → Constraint) (t ∷ ★ → ★) = (∀ x. (c x) ⇒ c (t x)) ∷ Constraint type Const (c ∷ ★ → Constraint) (t ∷ ★ → ★) = (∀ x. c (t x)) ∷ Constraint