module Fresnel.Prism.Internal
( IsPrism
) where

import Control.Arrow (Kleisli)
import Data.Profunctor (Choice, Forget, Star)
import Fresnel.Iso.Internal
import Fresnel.Profunctor.OptionalStar (OptionalStar)
import Fresnel.Profunctor.Recall (Recall)

class (IsIso p, Choice p) => IsPrism p

instance IsPrism (->)
instance Monad m => IsPrism (Kleisli m)
instance Monoid r => IsPrism (Forget r)
instance IsPrism (Recall e)
instance Applicative f => IsPrism (Star f)
instance Functor f => IsPrism (OptionalStar f)