2013-03-08 2 views
6

Так что давайте говорить, что я написал несколько 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 

Я думаю, что это полезно, и я хочу, чтобы использовать все это по моему проекту. Поэтому я поместил его в модуль.

Что было бы хорошим иерархическим именем для модуля? (C.f. Haskell Hierarchical Modules)

Множество структур данных живут в Data (Data.Text, Data.List, и т.д.), различные способы структурирования эффектов в Control, таких как Control.Monad или Control.Applicative.

Где должны быть программы на уровне уровня? Type? TypeFamily? Достигнут ли консенсус?

ответ

1

Я проверил на hackage, и большинство пакетов, обеспечивающих функциональность уровня типа живут в Data иерархии, под Data.Type, Data.TypeLevel или тому подобное, или иногда Data.Number.Etc.TypeLevel. Однако есть несколько исключений.

Пакет типа уровня естественно-номер живет под TypeLevel: http://hackage.haskell.org/package/type-level-natural-number

Пакет TFP живет по типам: http://hackage.haskell.org/package/tfp

ряд пакетов NicoLas Фрисби живут под Тип: 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

Смежные вопросы