Тип данных ванили в Haskell имеет ноль или более конструкторов, каждый из которых выполняет две роли.
В выражениях он поддерживает введение, его функцию от нуля или более аргументов к типу данных.
В шаблонах он поддерживает исключение, его вроде как функцию из типа данных в Maybe (кортеж типов аргументов).
Возможно ли, чтобы сигнатура модуля спрятала первую часть при экспонировании последнего?
Случай использования таков: у меня есть тип T, которые сами по себе типы конструкторов могут использоваться для создания бессмыслицы. У меня есть функции построения, которые могут быть использованы для создания экземпляров типа, которые гарантированно не являются бессмысленными. Было бы разумно скрыть конструкторы в этом случае, но все же было бы полезно, чтобы вызывающие абоненты имели возможность сопоставлять соответствие по гарантированно-ненужным, которые они строят с помощью функций построения.
Я подозреваю, что это невозможно, но если у кого-то есть способ сделать это, я бы попросил.
Следующее лучшее - скрыть конструкторы и создать кучу функций из T → Maybe (This, That), T → Maybe (The, Other, Thing) и т.д.