0xd34df00d 28.10.2011 11:56 Azoth

Ну вот, не успел написать очередной тайпкласс, как врезался в потребность в fundep'ах либо type families.

Требуется описать класс для хреновин, которые могут сочетаться с функциями. У функций есть принимаемое значение, у хреновин есть возвращаемое значение. Так что будет что-то типа
data Composable a where
type ComputeRes a :: *
compose :: GeneralFunc (ComputeRes a) → [a] → a

Кстати, как такой объект в каком-нибудь теоркате называется, если есть?

1. jtootf 28.10.2011 12:40

я ничего не понял. чем хреновины отличаются от функций?

2. 0xd34df00djtootf /1 28.10.2011 12:44 Azoth

Они деревья. Ну, суперпозиции из функций, по факту.

3. jtootf0xd34df00d /2 28.10.2011 13:14

суперпозиция функций — тоже функция. если тебе надо навесить на них дополнительную структуру, воспользуйся стрелками Клейси:

http://www.haskell.org/haskellwiki/Arrow...

4. 0xd34df00djtootf /3 28.10.2011 13:33 Jabiru

Меня смущает, что f → a → a имеет смысл, а о?ратный порядок аргументов — нет. Иными словами, приписать примитивную функцию над корнем дерева выражения имеет смысл, а о?ратная операция неочевидна. Можно, конечно, искусственно до?авить коммутативность, за?ивая на порядок аргументов, но что-то мне это не нравится. И да, compose :: a → a → a воо?ще не имеет смысла.

5. jtootf0xd34df00d /4 28.10.2011 14:19

какой обратный порядок? функция вида g(f, x) = f(x) — это apply. поменять аргументы местами без изменения результата здесь можно только в случае f(x) = x(f) (и в принципе — только если обе записи тайпчекаются, т.е. и f и x имеют тип a → b)

насчёт compose не понял, но тип, очевидно, плохой (слишком широкий)

6. 0xd34df00djtootf /5 28.10.2011 14:24 Jabiru

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

7. jtootf0xd34df00d /6 28.10.2011 14:28

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

8. 0xd34df00djtootf /7 28.10.2011 14:30 Jabiru

Суперпозиция — математическое выражение, ну или дерево, где в вершинах мои примитивные функции, а в листьях — сво?одные переменные и параметры.

9. 0xd34df00d0xd34df00d /8 28.10.2011 14:41 Jabiru

Короче, мне нужно что-то вроде векторного пространства, но ?ез операций между векторами. Подумаю еще, как к этому свести.

Do you really want to delete ?