idris-learning/chapter3/Matrix.idr
2021-07-09 11:36:37 +02:00

30 lines
897 B
Idris

module Matrix
import Data.Vect
addMatrix : Num numType =>
Vect rows (Vect cols numType) ->
Vect rows (Vect cols numType) ->
Vect rows (Vect cols numType)
addMatrix = zipWith (zipWith (+))
multMatrix : Num numType =>
Vect n (Vect m numType) -> Vect m (Vect p numType) ->
Vect n (Vect p numType)
-- 😔
createEmpties : Vect n (Vect 0 elem)
createEmpties = replicate _ []
createEmpties2 : Vect n (Vect 0 elem)
createEmpties2 {n = Z} = []
createEmpties2 {n = (S k)} = [] :: createEmpties2
transHelper : (x : Vect n elem) -> (xsTrans : Vect n (Vect len elem)) -> Vect n (Vect (S len) elem)
transHelper = zipWith (\x, y => x :: y)
transposeMat : Vect m (Vect n elem) -> Vect n (Vect m elem)
transposeMat [] = createEmpties
transposeMat (x :: xs) = let xsTrans = transposeMat xs in
transHelper x xsTrans