假设我写了一些 type-level program在 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
我认为这很有用,我想在我的项目中使用它。所以我把它放在一个模块中。
模块的良好分层名称是什么? (参见 Haskell Hierarchical Modules )
许多数据结构存在于Data
中(Data.Text
、Data.List
等),构造效果的各种方式是在 Control
中,例如 Control.Monad
或 Control.Applicative
。
类型级别的程序应该放在哪里? 类型
? 类型家族
?达成共识了吗?
最佳答案
我检查了 hackage,大多数提供类型级别功能的包都位于 Data
层次结构中,位于 Data.Type
、Data.TypeLevel
下等等,或者有时是Data.Number.Etc.TypeLevel
。但也有一些异常(exception)。
type-level-natural-number 包位于 TypeLevel: http://hackage.haskell.org/package/type-level-natural-number 下
tfp 包位于类型: http://hackage.haskell.org/package/tfp 下
许多 nicolas frisby 的包裹都位于类型:http://hackage.haskell.org/package/type-booleans 下。和 http://hackage.haskell.org/package/type-cereal例如。
显然,目前还没有达成共识。就我个人而言,我认为 Types
是放置所有这些东西的合适位置,但正如 Haskell 社区通常那样,所有内容最终都以 Data
结束。
我认为几乎一切都是一流的语言的危险:-)
您可以在 hackage 的“类型系统”类别中看到一些(但不是全部)类型级包:http://hackage.haskell.org/packages/archive/pkg-list.html#cat:type%20system
关于haskell - 类型级程序的分层模块名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15285197/