Есть ли способ, чтобы компилятор получить функциональные возможности, которые я хотел бы написать вручную:Автоматического Haskell получения декларации, поднимающая
instance Class c => Class (Trans c) where
foo1 = lift foo1
foo2 = lift foo2
...
foo999 = lift foo999
bar1 = \a b c -> lift $ bar1 a b c
...
baz1 = lift . baz1
...
т.е. когда тип класса Class
в настоящее время завернутые в Trans
, возможно получить бесплатный экземпляр Class
для Trans
автоматически без необходимости выполнять тяжелый подъем :)?
Я не уверен, что понял то, что вы на самом деле хотите. Этот экземпляр будет работать на всех 'c', поэтому вам нужно только написать его один раз. Я не думаю, что это может быть сделано короче, в общем случае. – chi
Но экземпляр скучный (он просто делает лифтинг для всех функций), возможно, можно было бы написать это кратко (не перечислив все 'fooX = lift fooX' и т. Д.) – jakubdaniel
Я вижу, но любая альтернатива (например, Шаблон Haskell) выглядит хуже, если у вас действительно нет большого количества методов класса. – chi