Учитывая класс«Свободные» переменные типа, связанные с помощью функциональных зависимостей в синонимов типа
class MonadSignal m sigs | m -> sigs where ...
и класс
class CanSignal sigs sigs' where ...
Я хочу, чтобы определить синоним типа, как этот
type MonadSignal' sigs m = (MonadSignal m sigs', CanSignal sigs sigs')
Здесь переменная sigs'
не упоминается в заголовке синонима типа MonadSignal'
, но она там только для того, чтобы соединить первое и второе ограничение, и оно однозначно определяется m
, которое - это, упомянутое в голове.
Обычно я думаю, что я был бы в состоянии forall
его на РИТ, но так как это просто Constraint
синоним, нет никакого фактического тела для переменной появляться в.
Можно что-нибудь сделать здесь? (К тому же положить переменную в голову и дает неправильное впечатление, когда синоним фактически используется, что это фактическая «переменная»)
Это правильное решение, которое я использовал раньше, но мне нужна была дополнительная гибкость, которую я получаю от функциональных зависимостей. –
А это позор, Какая дополнительная гибкость из любопытства? – jozefg
Мне нужны еще несколько параметров типа, поэтому их взаимные зависимости становятся немного сложнее, чем то, что может быть выражено связанными типами. –