{-# LANGUAGE TypeFamilies #-} module Data.Functor.Rep where import Data.Cotraversable class Cotraversable f => Representable f where type Rep f tabulate :: (Rep f -> a) -> f a index :: f a -> Rep f -> a