In other words, can we model many to many relationships in a persistent data structure efficiently?
A pair of unidirectional multimaps was suggested. However,
Proof by construction: the bimap package for Haskell.
A Bimap is essentially a bijection between subsets of its two argument types
And how is it implemented?
data Bimap a b = MkBimap !(M.Map a b) !(M.Map b a)
As a pair of unidirectional maps.