Я работаю с простыми преобразователями монад, представленными в http://www.cs.nott.ac.uk/~nhn/MGS2006/LectureNotes/lecture03-9up.pdf
Мой преобразователь обработки ошибок имеет тип
newtype ET m a = ET (m (Maybe a))
Я реализовал всю необходимую инфраструктуру и могу связать ее с монадой идентичности (которая в моей маленькой песочнице называется I
) и написать/скомпилировать нетривиальные функции.
Но я не могу вывести какое-либо результирующее значение на экран. Сообщение:
No instance for (Show (ET I Value)) arising from a use of ‘print’
Maybe
импортируется. И I
, и Value
являются производными от Show
и отображаются сами по себе без проблем. Микс с ET
не покажется. Я вижу два пути:
- попробуйте вставить
deriving Show
в объявлениеET m a
(что я пробовал разными способами, получая много разных сообщений об ошибках) - создать отображаемый экземпляр с «автономными производными объявлениями», как это предлагается некоторыми веб-ресурсами - пока безуспешно.
Как я могу отобразить ET I Value
в моем REPL?