{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeInType #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_HADDOCK not-home #-}
module Optics.Internal.Optic.Subtyping where
import GHC.TypeLits (ErrorMessage(..), TypeError)
import Optics.Internal.Optic.Types
class Is k l where
implies ::
proxy k l p -> (Constraints k p => r) -> (Constraints l p => r)
instance {-# OVERLAPPABLE #-} TypeError ('ShowType k
':<>: 'Text " cannot be used as "
':<>: 'ShowType l
) => Is k l where
implies :: proxy k l p -> (Constraints k p => r) -> Constraints l p => r
implies = [Char] -> proxy k l p -> (Constraints k p => r) -> r
forall a. HasCallStack => [Char] -> a
error "unreachable"
instance Is k k where
implies :: proxy k k p -> (Constraints k p => r) -> Constraints k p => r
implies _ = (Constraints k p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_Iso A_ReversedLens where implies :: proxy An_Iso A_ReversedLens p
-> (Constraints An_Iso p => r) -> Constraints A_ReversedLens p => r
implies _ = (Constraints An_Iso p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_Iso A_ReversedPrism where implies :: proxy An_Iso A_ReversedPrism p
-> (Constraints An_Iso p => r)
-> Constraints A_ReversedPrism p => r
implies _ = (Constraints An_Iso p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_Iso A_Prism where implies :: proxy An_Iso A_Prism p
-> (Constraints An_Iso p => r) -> Constraints A_Prism p => r
implies _ = (Constraints An_Iso p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_Iso A_Review where implies :: proxy An_Iso A_Review p
-> (Constraints An_Iso p => r) -> Constraints A_Review p => r
implies _ = (Constraints An_Iso p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_Iso A_Lens where implies :: proxy An_Iso A_Lens p
-> (Constraints An_Iso p => r) -> Constraints A_Lens p => r
implies _ = (Constraints An_Iso p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_Iso A_Getter where implies :: proxy An_Iso A_Getter p
-> (Constraints An_Iso p => r) -> Constraints A_Getter p => r
implies _ = (Constraints An_Iso p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_Iso An_AffineTraversal where implies :: proxy An_Iso An_AffineTraversal p
-> (Constraints An_Iso p => r)
-> Constraints An_AffineTraversal p => r
implies _ = (Constraints An_Iso p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_Iso An_AffineFold where implies :: proxy An_Iso An_AffineFold p
-> (Constraints An_Iso p => r) -> Constraints An_AffineFold p => r
implies _ = (Constraints An_Iso p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_Iso A_Traversal where implies :: proxy An_Iso A_Traversal p
-> (Constraints An_Iso p => r) -> Constraints A_Traversal p => r
implies _ = (Constraints An_Iso p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_Iso A_Fold where implies :: proxy An_Iso A_Fold p
-> (Constraints An_Iso p => r) -> Constraints A_Fold p => r
implies _ = (Constraints An_Iso p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_Iso A_Setter where implies :: proxy An_Iso A_Setter p
-> (Constraints An_Iso p => r) -> Constraints A_Setter p => r
implies _ = (Constraints An_Iso p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_ReversedLens A_Review where implies :: proxy A_ReversedLens A_Review p
-> (Constraints A_ReversedLens p => r)
-> Constraints A_Review p => r
implies _ = (Constraints A_ReversedLens p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_ReversedPrism A_Getter where implies :: proxy A_ReversedPrism A_Getter p
-> (Constraints A_ReversedPrism p => r)
-> Constraints A_Getter p => r
implies _ = (Constraints A_ReversedPrism p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_ReversedPrism An_AffineFold where implies :: proxy A_ReversedPrism An_AffineFold p
-> (Constraints A_ReversedPrism p => r)
-> Constraints An_AffineFold p => r
implies _ = (Constraints A_ReversedPrism p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_ReversedPrism A_Fold where implies :: proxy A_ReversedPrism A_Fold p
-> (Constraints A_ReversedPrism p => r)
-> Constraints A_Fold p => r
implies _ = (Constraints A_ReversedPrism p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Prism A_Review where implies :: proxy A_Prism A_Review p
-> (Constraints A_Prism p => r) -> Constraints A_Review p => r
implies _ = (Constraints A_Prism p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Prism An_AffineTraversal where implies :: proxy A_Prism An_AffineTraversal p
-> (Constraints A_Prism p => r)
-> Constraints An_AffineTraversal p => r
implies _ = (Constraints A_Prism p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Prism An_AffineFold where implies :: proxy A_Prism An_AffineFold p
-> (Constraints A_Prism p => r) -> Constraints An_AffineFold p => r
implies _ = (Constraints A_Prism p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Prism A_Traversal where implies :: proxy A_Prism A_Traversal p
-> (Constraints A_Prism p => r) -> Constraints A_Traversal p => r
implies _ = (Constraints A_Prism p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Prism A_Fold where implies :: proxy A_Prism A_Fold p
-> (Constraints A_Prism p => r) -> Constraints A_Fold p => r
implies _ = (Constraints A_Prism p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Prism A_Setter where implies :: proxy A_Prism A_Setter p
-> (Constraints A_Prism p => r) -> Constraints A_Setter p => r
implies _ = (Constraints A_Prism p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Lens A_Getter where implies :: proxy A_Lens A_Getter p
-> (Constraints A_Lens p => r) -> Constraints A_Getter p => r
implies _ = (Constraints A_Lens p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Lens An_AffineTraversal where implies :: proxy A_Lens An_AffineTraversal p
-> (Constraints A_Lens p => r)
-> Constraints An_AffineTraversal p => r
implies _ = (Constraints A_Lens p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Lens An_AffineFold where implies :: proxy A_Lens An_AffineFold p
-> (Constraints A_Lens p => r) -> Constraints An_AffineFold p => r
implies _ = (Constraints A_Lens p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Lens A_Traversal where implies :: proxy A_Lens A_Traversal p
-> (Constraints A_Lens p => r) -> Constraints A_Traversal p => r
implies _ = (Constraints A_Lens p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Lens A_Fold where implies :: proxy A_Lens A_Fold p
-> (Constraints A_Lens p => r) -> Constraints A_Fold p => r
implies _ = (Constraints A_Lens p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Lens A_Setter where implies :: proxy A_Lens A_Setter p
-> (Constraints A_Lens p => r) -> Constraints A_Setter p => r
implies _ = (Constraints A_Lens p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Getter An_AffineFold where implies :: proxy A_Getter An_AffineFold p
-> (Constraints A_Getter p => r)
-> Constraints An_AffineFold p => r
implies _ = (Constraints A_Getter p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Getter A_Fold where implies :: proxy A_Getter A_Fold p
-> (Constraints A_Getter p => r) -> Constraints A_Fold p => r
implies _ = (Constraints A_Getter p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_AffineTraversal An_AffineFold where implies :: proxy An_AffineTraversal An_AffineFold p
-> (Constraints An_AffineTraversal p => r)
-> Constraints An_AffineFold p => r
implies _ = (Constraints An_AffineTraversal p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_AffineTraversal A_Traversal where implies :: proxy An_AffineTraversal A_Traversal p
-> (Constraints An_AffineTraversal p => r)
-> Constraints A_Traversal p => r
implies _ = (Constraints An_AffineTraversal p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_AffineTraversal A_Fold where implies :: proxy An_AffineTraversal A_Fold p
-> (Constraints An_AffineTraversal p => r)
-> Constraints A_Fold p => r
implies _ = (Constraints An_AffineTraversal p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_AffineTraversal A_Setter where implies :: proxy An_AffineTraversal A_Setter p
-> (Constraints An_AffineTraversal p => r)
-> Constraints A_Setter p => r
implies _ = (Constraints An_AffineTraversal p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is An_AffineFold A_Fold where implies :: proxy An_AffineFold A_Fold p
-> (Constraints An_AffineFold p => r) -> Constraints A_Fold p => r
implies _ = (Constraints An_AffineFold p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Traversal A_Fold where implies :: proxy A_Traversal A_Fold p
-> (Constraints A_Traversal p => r) -> Constraints A_Fold p => r
implies _ = (Constraints A_Traversal p => r) -> r
forall (a :: OpticKind). a -> a
id
instance Is A_Traversal A_Setter where implies :: proxy A_Traversal A_Setter p
-> (Constraints A_Traversal p => r) -> Constraints A_Setter p => r
implies _ = (Constraints A_Traversal p => r) -> r
forall (a :: OpticKind). a -> a
id
type family Join (k :: OpticKind) (l :: OpticKind) where
Join An_Iso A_ReversedLens = A_ReversedLens
Join An_Iso A_ReversedPrism = A_ReversedPrism
Join An_Iso A_Prism = A_Prism
Join An_Iso A_Review = A_Review
Join An_Iso A_Lens = A_Lens
Join An_Iso A_Getter = A_Getter
Join An_Iso An_AffineTraversal = An_AffineTraversal
Join An_Iso An_AffineFold = An_AffineFold
Join An_Iso A_Traversal = A_Traversal
Join An_Iso A_Fold = A_Fold
Join An_Iso A_Setter = A_Setter
Join A_ReversedLens An_Iso = A_ReversedLens
Join A_ReversedLens A_Prism = A_Review
Join A_ReversedLens A_Review = A_Review
Join A_ReversedPrism An_Iso = A_ReversedPrism
Join A_ReversedPrism A_Prism = An_AffineFold
Join A_ReversedPrism A_Lens = A_Getter
Join A_ReversedPrism A_Getter = A_Getter
Join A_ReversedPrism An_AffineTraversal = An_AffineFold
Join A_ReversedPrism An_AffineFold = An_AffineFold
Join A_ReversedPrism A_Traversal = A_Fold
Join A_ReversedPrism A_Fold = A_Fold
Join A_Prism An_Iso = A_Prism
Join A_Prism A_ReversedLens = A_Review
Join A_Prism A_ReversedPrism = An_AffineFold
Join A_Prism A_Review = A_Review
Join A_Prism A_Lens = An_AffineTraversal
Join A_Prism A_Getter = An_AffineFold
Join A_Prism An_AffineTraversal = An_AffineTraversal
Join A_Prism An_AffineFold = An_AffineFold
Join A_Prism A_Traversal = A_Traversal
Join A_Prism A_Fold = A_Fold
Join A_Prism A_Setter = A_Setter
Join A_Review An_Iso = A_Review
Join A_Review A_ReversedLens = A_Review
Join A_Review A_Prism = A_Review
Join A_Lens An_Iso = A_Lens
Join A_Lens A_ReversedPrism = A_Getter
Join A_Lens A_Prism = An_AffineTraversal
Join A_Lens A_Getter = A_Getter
Join A_Lens An_AffineTraversal = An_AffineTraversal
Join A_Lens An_AffineFold = An_AffineFold
Join A_Lens A_Traversal = A_Traversal
Join A_Lens A_Fold = A_Fold
Join A_Lens A_Setter = A_Setter
Join A_Getter An_Iso = A_Getter
Join A_Getter A_ReversedPrism = A_Getter
Join A_Getter A_Prism = An_AffineFold
Join A_Getter A_Lens = A_Getter
Join A_Getter An_AffineTraversal = An_AffineFold
Join A_Getter An_AffineFold = An_AffineFold
Join A_Getter A_Traversal = A_Fold
Join A_Getter A_Fold = A_Fold
Join An_AffineTraversal An_Iso = An_AffineTraversal
Join An_AffineTraversal A_ReversedPrism = An_AffineFold
Join An_AffineTraversal A_Prism = An_AffineTraversal
Join An_AffineTraversal A_Lens = An_AffineTraversal
Join An_AffineTraversal A_Getter = An_AffineFold
Join An_AffineTraversal An_AffineFold = An_AffineFold
Join An_AffineTraversal A_Traversal = A_Traversal
Join An_AffineTraversal A_Fold = A_Fold
Join An_AffineTraversal A_Setter = A_Setter
Join An_AffineFold An_Iso = An_AffineFold
Join An_AffineFold A_ReversedPrism = An_AffineFold
Join An_AffineFold A_Prism = An_AffineFold
Join An_AffineFold A_Lens = An_AffineFold
Join An_AffineFold A_Getter = An_AffineFold
Join An_AffineFold An_AffineTraversal = An_AffineFold
Join An_AffineFold A_Traversal = A_Fold
Join An_AffineFold A_Fold = A_Fold
Join A_Traversal An_Iso = A_Traversal
Join A_Traversal A_ReversedPrism = A_Fold
Join A_Traversal A_Prism = A_Traversal
Join A_Traversal A_Lens = A_Traversal
Join A_Traversal A_Getter = A_Fold
Join A_Traversal An_AffineTraversal = A_Traversal
Join A_Traversal An_AffineFold = A_Fold
Join A_Traversal A_Fold = A_Fold
Join A_Traversal A_Setter = A_Setter
Join A_Fold An_Iso = A_Fold
Join A_Fold A_ReversedPrism = A_Fold
Join A_Fold A_Prism = A_Fold
Join A_Fold A_Lens = A_Fold
Join A_Fold A_Getter = A_Fold
Join A_Fold An_AffineTraversal = A_Fold
Join A_Fold An_AffineFold = A_Fold
Join A_Fold A_Traversal = A_Fold
Join A_Setter An_Iso = A_Setter
Join A_Setter A_Prism = A_Setter
Join A_Setter A_Lens = A_Setter
Join A_Setter An_AffineTraversal = A_Setter
Join A_Setter A_Traversal = A_Setter
Join k k = k
Join k l = TypeError ('ShowType k
':<>: 'Text " cannot be composed with "
':<>: 'ShowType l)