Предположим, что у меня есть произвольный модуль
module Foo where
foo :: Moo -> Goo
bar :: Car -> Far
baz :: Can -> Haz
где foo
, bar
и baz
правильно реализованы и т.д.
Я хотел бы подтвердить этот модуль на автоматически созданный тип данных и соответствующий объект:
import Foo (Moo, Goo, Car, Far, Can, Haz)
import qualified Foo
data FooModule = Foo
{ foo :: Moo -> Goo
, bar :: Car -> Far
, baz :: Can -> Haz
}
_Foo_ = Foo
{ foo = Foo.foo
, bar = Foo.bar
, baz = Foo.baz
}
Имена должны быть точно такими же, как исходный модуль.
Я мог бы сделать это вручную, но это очень утомительно, поэтому я хотел бы написать код для выполнения этой задачи для меня.
Я не уверен, как подойти к такой задаче. Предоставляет ли Template Haskell способ проверки модулей? Должен ли я подключаться к некоторым GHC api? Или мне так же хорошо, что и более ad-hoc-подход, например, очистка страниц пикши?