Скажем, у меня есть функция f1 :: a -> b -> ... -> c и еще одна функция f2 :: возможныйTypeClass xy ... => x -> y -> ... -> z, I хотите определить во время выполнения, можно ли передать c (вывод f1) в f2 как x или y или любой другой ввод.
У меня есть некоторый контроль над источником, поэтому, если есть способ генерировать метаданные (шаблонный haskell, может быть?) Для использования во время выполнения, это было бы хорошо.
Другими словами ...
У меня есть ряд функций (может быть, в виде стрелок, вычислений, может быть с состоянием), которые имеют набор входов и выходов. Я хочу знать, какие входы могут соединяться с какими выходами, чтобы пользователь мог связать их вместе. Как только это произойдет, мы можем сгенерировать код (или что-то в этом роде) на основе того, как пользователь их настроил.
Функции, которые у меня есть, я либо написал сам, либо пользователи могут также писать их, поэтому я могу получить их в скомпилированном виде. Но я мог бы потребовать определенных вещей в их коде для генерации метаданных (если это необходимо), если бы это было очень просто.
Самая большая проблема связана с классами типов - как узнать, является ли конкретный тип вывода экземпляром класса типов ввода.