матрицы, состоящей из элеметов типа Int, таким образом, чтобы под него подходили матрицы произвольного размера?
Другими словами, если есть:
- тип матрицы Matrix,
- тип трансформации MatrixTransform :: Matrix -> Matrix,
и если:
- S это множество трансформаций типа MatrixTransform,
- • это . (function composition),
- identity - это функция id,
То является ли это моноидом?
Конкретно меня интересует ассоциативность.
. :: (b -> c) -> (a -> b) -> (a -> c)
Так что, вроде как, технически даже наличие трансформаций, меняющих размер матрицы, не должно ничего нарушить, если тип матрицы позволяет иметь разные размеры.
Думаю, конструктор можно как минимум определить как [Int] -> h -> w, главное, чтобы h * w были равны длине списка.
Технически, честного моноида тут не получится, получится категория
https://hackage.haskell.org/package/matrix-0.3.6.1/docs/src/Data-Matrix.html#Matrix Вот тут что-то похожее сделано
если есть тип Matrix : Nat -> Nat -> Type который представляем матрицу n*m в виде значения типа Matrix n m то для любых n : Nat, множество функций Matrix n n -> Matrix n n с функцией (\x. x) : Matrix n n -> Matrix n n в качестве id будет моноидом
Обсуждают сегодня