module Fresnel.Getter.Internal
( IsGetter
) where

import Data.Functor.Contravariant (Contravariant)
import Data.Profunctor (Cochoice, Forget, Star)
import Fresnel.Bifunctor.Contravariant (Bicontravariant)
import Fresnel.Lens.Internal (IsLens)
import Fresnel.Profunctor.OptionalStar (OptionalStar)
import Fresnel.Profunctor.Star1 (Star1)

class (IsLens p, Bicontravariant p, Cochoice p) => IsGetter p

instance IsGetter (Forget r)
instance (Contravariant f, Traversable f) => IsGetter (Star f)
instance (Contravariant f, Traversable f) => IsGetter (Star1 f)
instance (Contravariant f, Traversable f) => IsGetter (OptionalStar f)