所以我想说我在Haskell中写了一些type-level program:
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
我认为这很有用,我想在我的项目中使用它。所以我把它放在一个模块中。
模块的分层名称是什么? (c.f。Haskell Hierarchical Modules)
许多数据结构存在于Data
(Data.Text
,Data.List
等)中,各种结构效果的方式都在Control
中,例如Control.Monad
或Control.Applicative
。
类型级程序应该在哪里生活? Type
? TypeFamily
?是否已达成共识?
答案 0 :(得分:1)
我查看了hackage,大多数提供类型级别功能的软件包都位于Data
层次结构中,位于Data.Type
,Data.TypeLevel
之下,或者有时Data.Number.Etc.TypeLevel
。但也有一些例外。
type-level-natural-number包位于TypeLevel:http://hackage.haskell.org/package/type-level-natural-number
下tfp包位于“类型:http://hackage.haskell.org/package/tfp
”下许多nicolas frisby的软件包位于Type:http://hackage.haskell.org/package/type-booleans和http://hackage.haskell.org/package/type-cereal下。
显然,目前还没有达成共识。我个人认为Types
是适合所有这些事情的地方,但与Haskell社区一样,一切都以Data
结束。
几乎所有东西都是头等舱的语言的风险,我想: - )
您可以在hackage的“Type System”类别中看到部分(但不是全部)类型级别的包:http://hackage.haskell.org/packages/archive/pkg-list.html#cat:type%20system