2012-10-03

juan_gandhi: (Default)
2012-10-03 10:11 am

программистская мысль вышла за пределы эндофункторов

https://dorchard.wordpress.com/2011/10/18/subcategories-in-haskell-exofunctors/

{-# 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 [livejournal.com profile] nponeccop)