{-# LANGUAGE
DataKinds,
PolyKinds,
TypeFamilies,
TypeInType,
TypeOperators,
UndecidableInstances #-}
module Fcf.Class.Functor
( Map
) where
import Fcf.Core (Exp, Eval)
data Map :: (a -> Exp b) -> f a -> Exp (f b)
type instance Eval (Map f '[]) = '[]
type instance Eval (Map f (a ': as)) = Eval (f a) ': Eval (Map f as)
type instance Eval (Map f 'Nothing) = 'Nothing
type instance Eval (Map f ('Just a)) = 'Just (Eval (f a))
type instance Eval (Map f ('Left x)) = 'Left x
type instance Eval (Map f ('Right a)) = 'Right (Eval (f a))
type instance Eval (Map f '(x, a)) =
'(x, Eval (f a))
type instance Eval (Map f '(x, y, a)) =
'(x, y, Eval (f a))
type instance Eval (Map f '(x, y, z, a)) =
'(x, y, z, Eval (f a))
type instance Eval (Map f '(x, y, z, w, a)) =
'(x, y, z, w, Eval (f a))