{-# LANGUAGE TypeFamilies #-} module Crypto.Lol.Types.IFunctor where import Crypto.Lol.Factored import Data.Constraint class IFunctor f where type IFElt f a :: Constraint fmapI :: (IFElt f a, IFElt f b, Fact m) => (a -> b) -> f m a -> f m b zipWithI :: (IFElt f a, IFElt f b, IFElt f c, Fact m) => (a -> b -> c) -> f m a -> f m b -> f m c