-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMatrix.idr
39 lines (26 loc) · 868 Bytes
/
Matrix.idr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
module Matrix
data Vec : Nat -> Type -> Type where
Nil : Vec Z a
(::) : a -> Vec n a -> Vec (S n) a
empties : (m : Nat) -> Vec m (Vec 0 a)
empties Z = []
empties (S k) = [] :: empties k
help : Vec m (Vec n a) -> Vec m a -> Vec m (Vec (S n) a)
help [] [] = []
help (z :: w) (x :: y) = (x :: z) :: help w y
transpose : {m : _} -> (mat : Vec n (Vec m a)) -> Vec m (Vec n a)
transpose {m} [] = empties m
transpose (x :: y) = let y_trans = transpose y
in help y_trans x
test_mat : Vec 3 (Vec 2 Nat)
test_mat = [[1,2], [3,4], [5,6]]
test_mat' : Vec 2 (Vec 3 Nat)
test_mat' = transpose test_mat
test_mat'' : Vec 3 (Vec 2 Nat)
test_mat'' = transpose test_mat'
test_vec : Vec 1 (Vec 3 Nat)
test_vec = [[1,2,3]]
test_vec' : Vec 3 (Vec 1 Nat)
test_vec' = transpose test_vec
test_vec'' : Vec 1 (Vec 3 Nat)
test_vec'' = transpose test_vec'