бесформенного Я пытаюсь написать функцию, что она принимает два HLists l1
и l2
произвольной длины, которые проявляют следующие свойства:В бесформенном, есть два список таким образом, что одна содержат классы типов из другой
- Длина
l1
иl2
являются одинаковыми l2
содержит точные типыl1
, завернутые в постоянном конструктора внешнего типа.
Так что, если l1
был
1 :: 1.2 :: "hello" :: HNil`
l2
может быть
Ordering[Int] :: Ordering[Double] :: Ordering[String] :: HNil
Использование UnaryTCConstraint
и LengthAux
позволяет мне ограничить длину и требуется статический внешний конструктор для l2
, однако наличие их Соответствие стало проблемой.
Любые идеи о том, как я могу это сделать?
Вместо того, чтобы думать о нем как о типах стилей, то, что вы действительно хотите, это тип 'All' (кража из номенклатуры Agda), который принимает тип вида' * -> * '(« предикат »по типам;' Ordering 'в вашем случае) и' HList'. Я могу написать его в чистом Scala, но я уверен, что есть бесформенный способ сделать это, поэтому я буду ждать, пока кто-то еще появится с этим. –
Это нехорошее решение, но как доказательство концепции: [ссылка на pastebin] (http://pastebin.com/1KmuvHJJ). – senia
@senia: На самом деле это не было бы плохим решением, если «Mapped» не существовало. –