Можно ли сымитировать функцию с вашим собственным типом данных с некоторым расширением GHC? Я хочу, например,
(воображаемый синтаксис)
data MyFunc = MyFunc String (Int->Int)
instance (Int->Int) MyFunc where
($) (MyFunc _ f) i = f i
inc = MyFunc "increment" (1+)
test = inc 1
Т.е. данные, которые несут с собой некоторую метаинформацию и могут быть сопоставлены с шаблоном, но при этом могут вызываться как обычная функция. Теперь я знаю, что могу определить свой собственный инфиксный оператор, например $$
, и вызвать inc $$ 1
, но возможность использовать обычный синтаксис вызова функции была бы очень полезна во встроенных DSL.