0xd34df00d
28.10.2011 11:56 Azoth
Ну вот, не успел написать очередной тайпкласс, как врезался в потребность в fundep'ах либо type families.
Требуется описать класс для хреновин, которые могут сочетаться с функциями. У функций есть принимаемое значение, у хреновин есть возвращаемое значение. Так что будет что-то типа
data Composable a where
type ComputeRes a :: *
compose :: GeneralFunc (ComputeRes a) → [a] → a
Кстати, как такой объект в каком-нибудь теоркате называется, если есть?
я ничего не понял. чем хреновины отличаются от функций?
Они деревья. Ну, суперпозиции из функций, по факту.
суперпозиция функций — тоже функция. если тебе надо навесить на них дополнительную структуру, воспользуйся стрелками Клейси:
http://www.haskell.org/haskellwiki/Arrow...
Меня смущает, что f → a → a имеет смысл, а о?ратный порядок аргументов — нет. Иными словами, приписать примитивную функцию над корнем дерева выражения имеет смысл, а о?ратная операция неочевидна. Можно, конечно, искусственно до?авить коммутативность, за?ивая на порядок аргументов, но что-то мне это не нравится. И да, compose :: a → a → a воо?ще не имеет смысла.
какой обратный порядок? функция вида g(f, x) = f(x) — это apply. поменять аргументы местами без изменения результата здесь можно только в случае f(x) = x(f) (и в принципе — только если обе записи тайпчекаются, т.е. и f и x имеют тип a → b)
насчёт compose не понял, но тип, очевидно, плохой (слишком широкий)
Я про то, что операция определена только для пары (примитивная функция, суперпозиция), и ее результат лежит в множестве суперпозиций, а для двух суперпозиций она не определена.
введи понятие суперпозиции, которым ты пользуешься, пожалуйста. оно, кажется, не общепринято
Суперпозиция — математическое выражение, ну или дерево, где в вершинах мои примитивные функции, а в листьях — сво?одные переменные и параметры.
Короче, мне нужно что-то вроде векторного пространства, но ?ез операций между векторами. Подумаю еще, как к этому свести.