And define NameMap as a type alias for a NameMapE of a LiftE type. This follows a rationale (included) for why NameMapE (with the type it has) is the data structure you want for bottom-up traversals.
The reason to make NameMap an alias is to avoid duplicating the API surface between the two maps, so that it's not such a pain to eventually cover the entire API of Data.Map in the NameMapE API.
And define
NameMap
as a type alias for aNameMapE
of aLiftE
type. This follows a rationale (included) for whyNameMapE
(with the type it has) is the data structure you want for bottom-up traversals.The reason to make
NameMap
an alias is to avoid duplicating the API surface between the two maps, so that it's not such a pain to eventually cover the entire API ofData.Map
in theNameMapE
API.