https://dorchard.wordpress.com/2011/10/18/subcategories-in-haskell-exofunctors/
Требует GHC 7.6
(10x
nponeccop)
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE TypeFamilies #-}
import qualified Data.Set as Set
class ExoFunctor f where
type SubCat f x :: Constraint
fmap :: (SubCat f a, SubCat f b) => (a -> b) -> f a -> f b
instance ExoFunctor Set.Set where
type SubCat Set.Set x = Ord x
fmap = Set.map
instance ExoFunctor [] where
type SubCat [] a = ()
fmap = map
Требует GHC 7.6
(10x