{-# Language DeriveDataTypeable, FlexibleContexts, FlexibleInstances, FunctionalDependencies, MultiParamTypeClasses,
PolyKinds, RankNTypes, StandaloneDeriving, TypeFamilies, TypeOperators, UndecidableInstances #-}
module Transformation where
import qualified Rank2
import Prelude hiding (Foldable(..), Traversable(..), Functor(..), Applicative(..), (<$>), fst, snd)
class Functor t p q x | t -> p q where
(<$>) :: t -> p x -> q x
class Foldable t p m x | t -> p m where
foldMap :: t -> p x -> m
class Traversable t p q m x | t -> p q m where
traverse :: t -> p x -> m (q x)
fmap :: Functor t p q x => t -> p x -> q x
fmap = (<$>)
instance Functor (Rank2.Arrow p q x) p q x where
(<$>) = Rank2.apply