multirec-0.5: Generic programming for families of recursive datatypes





The definition of functorial map.


Generic map

class HFunctor phi f whereSource


hmapA :: Applicative a => (forall ix. phi ix -> r ix -> a (r' ix)) -> phi ix -> f r ix -> a (f r' ix)Source


HFunctor phi U 
HFunctor phi (K x) 
El phi xi => HFunctor phi (I xi) 
(Constructor c, HFunctor phi f) => HFunctor phi (C c f) 
HFunctor phi f => HFunctor phi (:>: f ix) 
(HFunctor phi f, HFunctor phi g) => HFunctor phi (:*: f g) 
(HFunctor phi f, HFunctor phi g) => HFunctor phi (:+: f g) 

hmap :: HFunctor phi f => (forall ix. phi ix -> r ix -> r' ix) -> phi ix -> f r ix -> f r' ixSource

The function hmap takes a functor f. All the recursive instances in that functor are wrapped by an application of r. The argument to hmap takes a function that transformes r occurrences into r' occurrences, for every ix. In order to associate the index ix with the correct family phi, the argument to hmap is additionally parameterized by a witness of type phi ix.

hmapM :: (HFunctor phi f, Monad m) => (forall ix. phi ix -> r ix -> m (r' ix)) -> phi ix -> f r ix -> m (f r' ix)Source

Monadic version of hmap.