Как я могу ограничить тип (вид?) только типами продукта

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

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

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

Как я мог это сделать? Если да, не могли бы вы порекомендовать несколько примеров чтения и/или кода, пожалуйста.

Редактировать:Спасибо, у меня есть несколько хороших путей, которым нужно следовать, которые требуют дополнительного чтения :) А вот и длинные выходные.

5
задан dikini 5 April 2012 в 20:17
поделиться