So let's say I wrote some type-level program in Haskell:
type family NAryFn (n::Nat) (dom::*) (cod::*) :: *
type instance NAryFn Ze dom cod = cod
type instance NAryFn (Su n) dom cod = dom -> NAryFn n dom cod
I think this is useful and I want to use it all over my project. So I put it in a module.
What would be a good hierarchical name for the module? (c.f. Haskell Hierarchical Modules)
A lot of data structures live in Data
(Data.Text
, Data.List
, etc), various ways of structuring effects are in Control
such as Control.Monad
or Control.Applicative
.
Where should type-level programs live? Type
? TypeFamily
? Has consensus developed yet?