Определить совместимость параметров функции во время выполнения в Haskell - PullRequest
1 голос
/ 21 марта 2011

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

У меня есть некоторый контроль над источником, поэтому, если есть способ генерировать метаданные (шаблонный haskell, может быть?) Для использования во время выполнения, это было бы хорошо.

Другими словами ...

У меня есть ряд функций (может быть, в виде стрелок, вычислений, может быть с состоянием), которые имеют набор входов и выходов. Я хочу знать, какие входы могут соединяться с какими выходами, чтобы пользователь мог связать их вместе. Как только это произойдет, мы можем сгенерировать код (или что-то в этом роде) на основе того, как пользователь их настроил.

Функции, которые у меня есть, я либо написал сам, либо пользователи могут также писать их, поэтому я могу получить их в скомпилированном виде. Но я мог бы потребовать определенных вещей в их коде для генерации метаданных (если это необходимо), если бы это было очень просто.

Самая большая проблема связана с классами типов - как узнать, является ли конкретный тип вывода экземпляром класса типов ввода.

Ответы [ 2 ]

2 голосов
/ 21 марта 2011

Из вашего комментария к вашему вопросу, я думаю, что вы ищете что-то вроде GHC API или подсказку.Оба являются способами доступа к некоторому представлению AST кода, который вы только что скомпилировали.GHCi основан на GHC API, и подсказка является хорошей оболочкой для GHC API.

1 голос
/ 21 марта 2011

Полагаю, то, что вы хотите, возможно с модулем Data.Dynamic.Он предоставляет алгебраический тип данных Dynamic для динамического программирования.Модуль сохранен для использования, хотя вы можете использовать только мономорфные типы.

...