module Fresnel.Traversal.Internal
( IsTraversal
) where

import Control.Arrow (Kleisli)
import Data.Profunctor (Forget, Star)
import Data.Profunctor.Traversing (Traversing)
import Fresnel.Optional.Internal (IsOptional)

class (IsOptional p, Traversing p) => IsTraversal p

instance IsTraversal (->)
instance Monad m => IsTraversal (Kleisli m)
instance Monoid r => IsTraversal (Forget r)
instance Applicative f => IsTraversal (Star f)