Можно ли эмулировать функцию с вашим собственным типом данных с некоторым расширением 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.