Я есть типдизайн программы, касающиеся ADTS
data Phase = PhaseOne
| PhaseTwo
| PhaseThree deriving Enum
и пять операций, чтобы сделать на каждом этапе
read
write
validate
evalStatus
update
Я начал пытаться создать класс типа. Проблема в том, что они все одинаковы. Я хотел бы быть в состоянии сделать что-то вроде
instance MyClass PhaseThree where
read a = ...
Кроме того, мне нужно перегрузить тип возвращаемого значения.
Я знаю, что классы классов не то, что я хочу. Но я не уверен, как делать то, что я хочу. Я думал, что GADT, но это не совсем правильно, поскольку мне нужно иметь каждый экземпляр в отдельном файле.
Я хотел бы получить совет относительно того, какие механизмы мне нужно исследовать? Я дал достаточно информации?
Если вы определяете отдельные функции для 'readPhaseOne',' readPhaseTwo', 'writePhaseOne',' writePhaseTwo' и т. Д., Какими будут их типы? – Heatsink
это поможет, если у вас будет немного больше информации. Что именно вы пытаетесь достичь? Почему не работает обычное сопоставление шаблонов? Почему Фаза должна быть одним типом вместо трех? –
Phillip: То, что я пытаюсь сделать, это сделать eDSL на основе вышеупомянутых операций. Обычное совпадение шаблонов не будет работать, потому что я пытаюсь перегрузить возвращаемый тип. Фаза должна быть перечислимым типом (нужен метод succ), поэтому может быть только один тип вместо трех (AFAIK). –