29 Sep
                
                    2013
                
            
            
                29 Sep
                
                '13
                
            
            
            
        
    
                5:44 a.m.
            
        Does anyone recognise these typeclasses: import Data.Profunctor (Profunctor) import Data.Functor.Contravariant (Contravariant) class Profunctor p => ProductProfunctor p where empty :: p () () (***!) :: p a b -> p a' b' -> p (a, a') (b, b') class Contravariant f => ProductContravariant f where point :: f () (***<) :: f a -> f b -> f (a, b) They are both a bit like Applicative, and ProductProfunctor is basically Arrow without the Category part. I'm finding ProductProfunctor useful for marshalling data from a database into Haskell, and both of them come up a lot inside my database library. Has anyone ever seen these before? Has Edward Kmett written a library for these already? Thanks, Tom