@@ -0,0 +1,903 @@
1+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-pragma">{-# LANGUAGE AllowAmbiguousTypes #-}</span><span>
2+</span><a name="line-2"></a><span class="hs-pragma">{-# LANGUAGE DataKinds #-}</span><span>
3+</span><a name="line-3"></a><span class="hs-pragma">{-# LANGUAGE FlexibleContexts #-}</span><span>
4+</span><a name="line-4"></a><span class="hs-pragma">{-# LANGUAGE FlexibleInstances #-}</span><span>
5+</span><a name="line-5"></a><span class="hs-pragma">{-# LANGUAGE GADTs #-}</span><span>
6+</span><a name="line-6"></a><span class="hs-pragma">{-# LANGUAGE InstanceSigs #-}</span><span>
7+</span><a name="line-7"></a><span class="hs-pragma">{-# LANGUAGE MultiParamTypeClasses #-}</span><span>
8+</span><a name="line-8"></a><span class="hs-pragma">{-# LANGUAGE NoStarIsType #-}</span><span>
9+</span><a name="line-9"></a><span class="hs-pragma">{-# LANGUAGE ScopedTypeVariables #-}</span><span>
10+</span><a name="line-10"></a><span class="hs-pragma">{-# LANGUAGE StandaloneDeriving #-}</span><span>
11+</span><a name="line-11"></a><span class="hs-pragma">{-# LANGUAGE TypeApplications #-}</span><span>
12+</span><a name="line-12"></a><span class="hs-pragma">{-# LANGUAGE TypeFamilies #-}</span><span>
13+</span><a name="line-13"></a><span class="hs-pragma">{-# LANGUAGE TypeOperators #-}</span><span>
14+</span><a name="line-14"></a><span class="hs-pragma">{-# LANGUAGE UndecidableInstances #-}</span><span>
15+</span><a name="line-15"></a><span>
16+</span><a name="line-16"></a><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
17+</span><a name="line-17"></a><span class="hs-comment">-- |</span><span>
18+</span><a name="line-18"></a><span class="hs-comment">-- Module : Matrix.Internal</span><span>
19+</span><a name="line-19"></a><span class="hs-comment">-- Copyright : (c) Armando Santos 2019-2020</span><span>
20+</span><a name="line-20"></a><span class="hs-comment">-- Maintainer : armandoifsantos@gmail.com</span><span>
21+</span><a name="line-21"></a><span class="hs-comment">-- Stability : experimental</span><span>
22+</span><a name="line-22"></a><span class="hs-comment">--</span><span>
23+</span><a name="line-23"></a><span class="hs-comment">-- The LAoP discipline generalises relations and functions treating them as</span><span>
24+</span><a name="line-24"></a><span class="hs-comment">-- Boolean matrices and in turn consider these as arrows.</span><span>
25+</span><a name="line-25"></a><span class="hs-comment">--</span><span>
26+</span><a name="line-26"></a><span class="hs-comment">-- __LAoP__ is a library for algebraic (inductive) construction and manipulation of matrices</span><span>
27+</span><a name="line-27"></a><span class="hs-comment">-- in Haskell. See <https://github.com/bolt12/master-thesis my Msc Thesis> for the</span><span>
28+</span><a name="line-28"></a><span class="hs-comment">-- motivation behind the library, the underlying theory, and implementation details.</span><span>
29+</span><a name="line-29"></a><span class="hs-comment">--</span><span>
30+</span><a name="line-30"></a><span class="hs-comment">-- This module offers many of the combinators mentioned in the work of</span><span>
31+</span><a name="line-31"></a><span class="hs-comment">-- Macedo (2012) and Oliveira (2012). </span><span>
32+</span><a name="line-32"></a><span class="hs-comment">--</span><span>
33+</span><a name="line-33"></a><span class="hs-comment">-- This is an Internal module and it is no supposed to be imported.</span><span>
34+</span><a name="line-34"></a><span class="hs-comment">--</span><span>
35+</span><a name="line-35"></a><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
36+</span><a name="line-36"></a><span>
37+</span><a name="line-37"></a><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">Matrix.Internal</span><span>
38+</span><a name="line-38"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-comment">-- | This definition makes use of the fact that 'Void' is</span><span>
39+</span><a name="line-39"></a><span> </span><span class="hs-comment">-- isomorphic to 0 and '()' to 1 and captures matrix</span><span>
40+</span><a name="line-40"></a><span> </span><span class="hs-comment">-- dimensions as stacks of 'Either's.</span><span>
41+</span><a name="line-41"></a><span> </span><span class="hs-comment">--</span><span>
42+</span><a name="line-42"></a><span> </span><span class="hs-comment">-- There exists two type families that make it easier to write</span><span>
43+</span><a name="line-43"></a><span> </span><span class="hs-comment">-- matrix dimensions: 'FromNat' and 'Count'. This approach</span><span>
44+</span><a name="line-44"></a><span> </span><span class="hs-comment">-- leads to a very straightforward implementation </span><span>
45+</span><a name="line-45"></a><span> </span><span class="hs-comment">-- of LAoP combinators. </span><span>
46+</span><a name="line-46"></a><span>
47+</span><a name="line-47"></a><span> </span><span class="hs-comment">-- * Type safe matrix representation</span><span>
48+</span><a name="line-48"></a><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
49+</span><a name="line-49"></a><span>
50+</span><a name="line-50"></a><span> </span><span class="hs-comment">-- * Primitives</span><span>
51+</span><a name="line-51"></a><span> </span><a href="Matrix.Internal.html#empty"><span class="hs-identifier hs-var">empty</span></a><span class="hs-special">,</span><span>
52+</span><a name="line-52"></a><span> </span><a href="Matrix.Internal.html#one"><span class="hs-identifier hs-var">one</span></a><span class="hs-special">,</span><span>
53+</span><a name="line-53"></a><span> </span><a href="Matrix.Internal.html#junc"><span class="hs-identifier hs-var">junc</span></a><span class="hs-special">,</span><span>
54+</span><a name="line-54"></a><span> </span><a href="Matrix.Internal.html#split"><span class="hs-identifier hs-var">split</span></a><span class="hs-special">,</span><span>
55+</span><a name="line-55"></a><span>
56+</span><a name="line-56"></a><span> </span><span class="hs-comment">-- * Auxiliary type families</span><span>
57+</span><a name="line-57"></a><span> </span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">FromNat</span></a><span class="hs-special">,</span><span>
58+</span><a name="line-58"></a><span> </span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span class="hs-special">,</span><span>
59+</span><a name="line-59"></a><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span class="hs-special">,</span><span>
60+</span><a name="line-60"></a><span>
61+</span><a name="line-61"></a><span> </span><span class="hs-comment">-- * Matrix construction and conversion</span><span>
62+</span><a name="line-62"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span class="hs-special">,</span><span>
63+</span><a name="line-63"></a><span> </span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span class="hs-special">,</span><span>
64+</span><a name="line-64"></a><span> </span><a href="Matrix.Internal.html#toLists"><span class="hs-identifier hs-var">toLists</span></a><span class="hs-special">,</span><span>
65+</span><a name="line-65"></a><span> </span><a href="Matrix.Internal.html#toList"><span class="hs-identifier hs-var">toList</span></a><span class="hs-special">,</span><span>
66+</span><a name="line-66"></a><span> </span><a href="Matrix.Internal.html#matrixBuilder"><span class="hs-identifier hs-var">matrixBuilder</span></a><span class="hs-special">,</span><span>
67+</span><a name="line-67"></a><span> </span><a href="Matrix.Internal.html#row"><span class="hs-identifier hs-var">row</span></a><span class="hs-special">,</span><span>
68+</span><a name="line-68"></a><span> </span><a href="Matrix.Internal.html#col"><span class="hs-identifier hs-var">col</span></a><span class="hs-special">,</span><span>
69+</span><a name="line-69"></a><span> </span><a href="Matrix.Internal.html#zeros"><span class="hs-identifier hs-var">zeros</span></a><span class="hs-special">,</span><span>
70+</span><a name="line-70"></a><span> </span><a href="Matrix.Internal.html#ones"><span class="hs-identifier hs-var">ones</span></a><span class="hs-special">,</span><span>
71+</span><a name="line-71"></a><span> </span><a href="Matrix.Internal.html#bang"><span class="hs-identifier hs-var">bang</span></a><span class="hs-special">,</span><span>
72+</span><a name="line-72"></a><span> </span><a href="Matrix.Internal.html#constant"><span class="hs-identifier hs-var">constant</span></a><span class="hs-special">,</span><span>
73+</span><a name="line-73"></a><span>
74+</span><a name="line-74"></a><span> </span><span class="hs-comment">-- * Misc</span><span>
75+</span><a name="line-75"></a><span> </span><span class="hs-comment">-- ** Get dimensions</span><span>
76+</span><a name="line-76"></a><span> </span><a href="Matrix.Internal.html#columns"><span class="hs-identifier hs-var">columns</span></a><span class="hs-special">,</span><span>
77+</span><a name="line-77"></a><span> </span><a href="Matrix.Internal.html#rows"><span class="hs-identifier hs-var">rows</span></a><span class="hs-special">,</span><span>
78+</span><a name="line-78"></a><span>
79+</span><a name="line-79"></a><span> </span><span class="hs-comment">-- ** Matrix Transposition</span><span>
80+</span><a name="line-80"></a><span> </span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">tr</span></a><span class="hs-special">,</span><span>
81+</span><a name="line-81"></a><span>
82+</span><a name="line-82"></a><span> </span><span class="hs-comment">-- ** Selective operator</span><span>
83+</span><a name="line-83"></a><span> </span><a href="Matrix.Internal.html#select"><span class="hs-identifier hs-var">select</span></a><span class="hs-special">,</span><span>
84+</span><a name="line-84"></a><span>
85+</span><a name="line-85"></a><span> </span><span class="hs-comment">-- ** McCarthy's Conditional</span><span>
86+</span><a name="line-86"></a><span> </span><a href="Matrix.Internal.html#cond"><span class="hs-identifier hs-var">cond</span></a><span class="hs-special">,</span><span>
87+</span><a name="line-87"></a><span>
88+</span><a name="line-88"></a><span> </span><span class="hs-comment">-- ** Matrix "abiding"</span><span>
89+</span><a name="line-89"></a><span> </span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span class="hs-special">,</span><span>
90+</span><a name="line-90"></a><span> </span><a href="Matrix.Internal.html#abideSJ"><span class="hs-identifier hs-var">abideSJ</span></a><span class="hs-special">,</span><span>
91+</span><a name="line-91"></a><span>
92+</span><a name="line-92"></a><span> </span><span class="hs-comment">-- * Biproduct approach</span><span>
93+</span><a name="line-93"></a><span> </span><span class="hs-comment">-- ** Split</span><span>
94+</span><a name="line-94"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#%3D%3D%3D"><span class="hs-operator hs-var">===</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
95+</span><a name="line-95"></a><span> </span><span class="hs-comment">-- *** Projections</span><span>
96+</span><a name="line-96"></a><span> </span><a href="Matrix.Internal.html#p1"><span class="hs-identifier hs-var">p1</span></a><span class="hs-special">,</span><span>
97+</span><a name="line-97"></a><span> </span><a href="Matrix.Internal.html#p2"><span class="hs-identifier hs-var">p2</span></a><span class="hs-special">,</span><span>
98+</span><a name="line-98"></a><span> </span><span class="hs-comment">-- ** Junc</span><span>
99+</span><a name="line-99"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#%7C%7C%7C"><span class="hs-operator hs-var">|||</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
100+</span><a name="line-100"></a><span> </span><span class="hs-comment">-- *** Injections</span><span>
101+</span><a name="line-101"></a><span> </span><a href="Matrix.Internal.html#i1"><span class="hs-identifier hs-var">i1</span></a><span class="hs-special">,</span><span>
102+</span><a name="line-102"></a><span> </span><a href="Matrix.Internal.html#i2"><span class="hs-identifier hs-var">i2</span></a><span class="hs-special">,</span><span>
103+</span><a name="line-103"></a><span> </span><span class="hs-comment">-- ** Bifunctors</span><span>
104+</span><a name="line-104"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#-%7C-"><span class="hs-operator hs-var">-|-</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
105+</span><a name="line-105"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#%3E%3C"><span class="hs-operator hs-var">><</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
106+</span><a name="line-106"></a><span>
107+</span><a name="line-107"></a><span> </span><span class="hs-comment">-- ** Applicative matrix combinators</span><span>
108+</span><a name="line-108"></a><span>
109+</span><a name="line-109"></a><span> </span><span class="hs-comment">-- | Note that given the restrictions imposed it is not possible to</span><span>
110+</span><a name="line-110"></a><span> </span><span class="hs-comment">-- implement the standard type classes present in standard Haskell.</span><span>
111+</span><a name="line-111"></a><span> </span><span class="hs-comment">-- *** Matrix pairing projections</span><span>
112+</span><a name="line-112"></a><span> </span><a href="Matrix.Internal.html#kp1"><span class="hs-identifier hs-var">kp1</span></a><span class="hs-special">,</span><span>
113+</span><a name="line-113"></a><span> </span><a href="Matrix.Internal.html#kp2"><span class="hs-identifier hs-var">kp2</span></a><span class="hs-special">,</span><span>
114+</span><a name="line-114"></a><span>
115+</span><a name="line-115"></a><span> </span><span class="hs-comment">-- *** Matrix pairing</span><span>
116+</span><a name="line-116"></a><span> </span><a href="Matrix.Internal.html#khatri"><span class="hs-identifier hs-var">khatri</span></a><span class="hs-special">,</span><span>
117+</span><a name="line-117"></a><span>
118+</span><a name="line-118"></a><span> </span><span class="hs-comment">-- * Matrix composition and lifting</span><span>
119+</span><a name="line-119"></a><span>
120+</span><a name="line-120"></a><span> </span><span class="hs-comment">-- ** Arrow matrix combinators</span><span>
121+</span><a name="line-121"></a><span>
122+</span><a name="line-122"></a><span> </span><span class="hs-comment">-- | Note that given the restrictions imposed it is not possible to</span><span>
123+</span><a name="line-123"></a><span> </span><span class="hs-comment">-- implement the standard type classes present in standard Haskell.</span><span>
124+</span><a name="line-124"></a><span> </span><a href="Matrix.Internal.html#identity"><span class="hs-identifier hs-var">identity</span></a><span class="hs-special">,</span><span>
125+</span><a name="line-125"></a><span> </span><a href="Matrix.Internal.html#comp"><span class="hs-identifier hs-var">comp</span></a><span class="hs-special">,</span><span>
126+</span><a name="line-126"></a><span> </span><a href="Matrix.Internal.html#fromF"><span class="hs-identifier hs-var">fromF</span></a><span class="hs-special">,</span><span>
127+</span><a name="line-127"></a><span> </span><a href="Matrix.Internal.html#fromF%27"><span class="hs-identifier hs-var">fromF'</span></a><span class="hs-special">,</span><span>
128+</span><a name="line-128"></a><span>
129+</span><a name="line-129"></a><span> </span><span class="hs-comment">-- * Matrix printing</span><span>
130+</span><a name="line-130"></a><span> </span><a href="Matrix.Internal.html#pretty"><span class="hs-identifier hs-var">pretty</span></a><span class="hs-special">,</span><span>
131+</span><a name="line-131"></a><span> </span><a href="Matrix.Internal.html#prettyPrint"><span class="hs-identifier hs-var">prettyPrint</span></a><span class="hs-special">,</span><span>
132+</span><a name="line-132"></a><span>
133+</span><a name="line-133"></a><span> </span><span class="hs-comment">-- * Other</span><span>
134+</span><a name="line-134"></a><span> </span><a href="Matrix.Internal.html#toBool"><span class="hs-identifier hs-var">toBool</span></a><span class="hs-special">,</span><span>
135+</span><a name="line-135"></a><span> </span><a href="Matrix.Internal.html#fromBool"><span class="hs-identifier hs-var">fromBool</span></a><span class="hs-special">,</span><span>
136+</span><a name="line-136"></a><span> </span><a href="Matrix.Internal.html#compRel"><span class="hs-identifier hs-var">compRel</span></a><span class="hs-special">,</span><span>
137+</span><a name="line-137"></a><span> </span><a href="Matrix.Internal.html#fromFRel"><span class="hs-identifier hs-var">fromFRel</span></a><span class="hs-special">,</span><span>
138+</span><a name="line-138"></a><span> </span><a href="Matrix.Internal.html#fromFRel%27"><span class="hs-identifier hs-var">fromFRel'</span></a><span class="hs-special">,</span><span>
139+</span><a name="line-139"></a><span> </span><a href="Matrix.Internal.html#orM"><span class="hs-identifier hs-var">orM</span></a><span class="hs-special">,</span><span>
140+</span><a name="line-140"></a><span> </span><a href="Matrix.Internal.html#andM"><span class="hs-identifier hs-var">andM</span></a><span class="hs-special">,</span><span>
141+</span><a name="line-141"></a><span> </span><a href="Matrix.Internal.html#subM"><span class="hs-identifier hs-var">subM</span></a><span>
142+</span><a name="line-142"></a><span> </span><span class="hs-special">)</span><span>
143+</span><a name="line-143"></a><span> </span><span class="hs-keyword">where</span><span>
144+</span><a name="line-144"></a><span>
145+</span><a name="line-145"></a><span class="hs-keyword">import</span><span> </span><a href="Utils.html"><span class="hs-identifier">Utils</span></a><span>
146+</span><a name="line-146"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.Bool</span><span>
147+</span><a name="line-147"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.Kind</span><span>
148+</span><a name="line-148"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.List</span><span>
149+</span><a name="line-149"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.Proxy</span><span>
150+</span><a name="line-150"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.Void</span><span>
151+</span><a name="line-151"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">GHC.TypeLits</span><span>
152+</span><a name="line-152"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.Type.Equality</span><span>
153+</span><a name="line-153"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">GHC.Generics</span><span>
154+</span><a name="line-154"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Control.DeepSeq</span><span>
155+</span><a name="line-155"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Control.Category</span><span>
156+</span><a name="line-156"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Prelude</span><span> </span><span class="hs-keyword">hiding</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-operator hs-var">.</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
157+</span><a name="line-157"></a><span>
158+</span><a name="line-158"></a><span class="hs-comment">-- | LAoP (Linear Algebra of Programming) Inductive Matrix definition.</span><span>
159+</span><a name="line-159"></a><span class="hs-keyword">data</span><span> </span><a name="Matrix"><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier">Matrix</span></a></a><span> </span><a name="local-6989586621679038240"><a href="#local-6989586621679038240"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038241"><a href="#local-6989586621679038241"><span class="hs-identifier">cols</span></a></a><span> </span><a name="local-6989586621679038242"><a href="#local-6989586621679038242"><span class="hs-identifier">rows</span></a></a><span> </span><span class="hs-keyword">where</span><span>
160+</span><a name="line-160"></a><span> </span><a name="Empty"><a href="Matrix.Internal.html#Empty"><span class="hs-identifier">Empty</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038243"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-identifier hs-type">Void</span><span> </span><span class="hs-identifier hs-type">Void</span><span>
161+</span><a name="line-161"></a><span> </span><a name="One"><a href="Matrix.Internal.html#One"><span class="hs-identifier">One</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="#local-6989586621679038244"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038244"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
162+</span><a name="line-162"></a><span> </span><a name="Junc"><a href="Matrix.Internal.html#Junc"><span class="hs-identifier">Junc</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038245"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038246"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038247"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038245"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038248"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679038247"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038245"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038246"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038248"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038247"><span class="hs-identifier hs-type">rows</span></a><span>
163+</span><a name="line-163"></a><span> </span><a name="Split"><a href="Matrix.Internal.html#Split"><span class="hs-identifier">Split</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038249"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038250"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038251"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038249"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038250"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038252"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038249"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038250"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038251"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038252"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
164+</span><a name="line-164"></a><span>
165+</span><a name="line-165"></a><span class="hs-keyword">deriving</span><span> </span><span class="hs-keyword">instance</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Show</span><span> </span><a href="#local-6989586621679039296"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-identifier hs-type">Show</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679039296"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679039297"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679039298"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span>
166+</span><a name="line-166"></a><span>
167+</span><a name="line-167"></a><span class="hs-comment">-- | Type family that computes the cardinality of a given type dimension.</span><span>
168+</span><a name="line-168"></a><span class="hs-comment">--</span><span>
169+</span><a name="line-169"></a><span class="hs-comment">-- It can also count the cardinality of custom types that implement the</span><span>
170+</span><a name="line-170"></a><span class="hs-comment">-- 'Generic' instance.</span><span>
171+</span><a name="line-171"></a><span class="hs-keyword">type</span><span> </span><span class="hs-keyword">family</span><span> </span><a name="Count"><a href="Matrix.Internal.html#Count"><span class="hs-identifier">Count</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679038215"><a href="#local-6989586621679038215"><span class="hs-identifier">d</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Type</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Nat</span><span> </span><span class="hs-keyword">where</span><span>
172+</span><a name="line-172"></a><span> </span><span class="hs-identifier">Count</span><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><a href="#local-6989586621679038216"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679038217"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679038216"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator">+</span><span> </span><span class="hs-number">1</span><span>
173+</span><a name="line-173"></a><span> </span><span class="hs-identifier">Count</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038218"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038219"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-operator hs-type">+</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038218"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038219"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
174+</span><a name="line-174"></a><span> </span><span class="hs-identifier">Count</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038220"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038221"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-operator hs-type">*</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038220"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038221"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
175+</span><a name="line-175"></a><span> </span><span class="hs-identifier">Count</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038222"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="#local-6989586621679038223"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-operator hs-type">^</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038223"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038222"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
176+</span><a name="line-176"></a><span> </span><span class="hs-comment">-- Generics</span><span>
177+</span><a name="line-177"></a><span> </span><span class="hs-identifier">Count</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">M1</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span> </span><a href="#local-6989586621679038224"><span class="hs-identifier hs-type">f</span></a><span> </span><a href="#local-6989586621679038225"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038224"><span class="hs-identifier hs-type">f</span></a><span> </span><a href="#local-6989586621679038225"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">)</span><span>
178+</span><a name="line-178"></a><span> </span><span class="hs-identifier">Count</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">K1</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-number">1</span><span>
179+</span><a name="line-179"></a><span> </span><span class="hs-identifier">Count</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">V1</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-number">0</span><span>
180+</span><a name="line-180"></a><span> </span><span class="hs-identifier">Count</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">U1</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-number">1</span><span>
181+</span><a name="line-181"></a><span> </span><span class="hs-identifier">Count</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-operator hs-type">:*:</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038233"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038234"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679038235"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-type">Count</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038233"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038235"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator">*</span><span> </span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038234"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679038235"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">)</span><span>
182+</span><a name="line-182"></a><span> </span><span class="hs-identifier">Count</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-operator hs-type">:+:</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038236"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038237"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679038238"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-type">Count</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038236"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038238"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator">+</span><span> </span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038237"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679038238"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">)</span><span>
183+</span><a name="line-183"></a><span> </span><span class="hs-identifier">Count</span><span> </span><a href="#local-6989586621679038239"><span class="hs-identifier hs-type">d</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Rep</span><span> </span><a href="#local-6989586621679038239"><span class="hs-identifier hs-type">d</span></a><span> </span><span class="hs-identifier hs-type">R</span><span class="hs-special">)</span><span>
184+</span><a name="line-184"></a><span>
185+</span><a name="line-185"></a><span class="hs-comment">-- | Type family that computes of a given type dimension from a given natural</span><span>
186+</span><a name="line-186"></a><span class="hs-comment">--</span><span>
187+</span><a name="line-187"></a><span class="hs-comment">-- Thanks to Li-Yao Xia this type family is super fast.</span><span>
188+</span><a name="line-188"></a><span class="hs-keyword">type</span><span> </span><span class="hs-keyword">family</span><span> </span><a name="FromNat"><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier">FromNat</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679038213"><a href="#local-6989586621679038213"><span class="hs-identifier">n</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Nat</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Type</span><span> </span><span class="hs-keyword">where</span><span>
189+</span><a name="line-189"></a><span> </span><span class="hs-identifier">FromNat</span><span> </span><span class="hs-number">0</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-type">Void</span><span>
190+</span><a name="line-190"></a><span> </span><span class="hs-identifier">FromNat</span><span> </span><span class="hs-number">1</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
191+</span><a name="line-191"></a><span> </span><span class="hs-identifier">FromNat</span><span> </span><a href="#local-6989586621679038214"><span class="hs-identifier hs-type">n</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#FromNat%27"><span class="hs-identifier hs-type">FromNat'</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Mod</span><span> </span><a href="#local-6989586621679038214"><span class="hs-identifier hs-type">n</span></a><span> </span><span class="hs-number">2</span><span> </span><span class="hs-operator">==</span><span> </span><span class="hs-number">0</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Div</span><span> </span><a href="#local-6989586621679038214"><span class="hs-identifier hs-type">n</span></a><span> </span><span class="hs-number">2</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
192+</span><a name="line-192"></a><span>
193+</span><a name="line-193"></a><span class="hs-keyword">type</span><span> </span><span class="hs-keyword">family</span><span> </span><a name="FromNat%27"><a href="Matrix.Internal.html#FromNat%27"><span class="hs-identifier">FromNat'</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679038066"><a href="#local-6989586621679038066"><span class="hs-identifier">b</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Bool</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a name="local-6989586621679038067"><a href="#local-6989586621679038067"><span class="hs-identifier">m</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Type</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Type</span><span> </span><span class="hs-keyword">where</span><span>
194+</span><a name="line-194"></a><span> </span><span class="hs-identifier">FromNat'</span><span> </span><span class="hs-special">'</span><span class="hs-identifier hs-type">True</span><span> </span><a href="#local-6989586621679038068"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038068"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038068"><span class="hs-identifier hs-type">m</span></a><span>
195+</span><a name="line-195"></a><span> </span><span class="hs-identifier">FromNat'</span><span> </span><span class="hs-special">'</span><span class="hs-identifier hs-type">False</span><span> </span><a href="#local-6989586621679038212"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038212"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038212"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span>
196+</span><a name="line-196"></a><span>
197+</span><a name="line-197"></a><span class="hs-comment">-- | Type family that normalizes the representation of a given data</span><span>
198+</span><a name="line-198"></a><span class="hs-comment">-- structure</span><span>
199+</span><a name="line-199"></a><span class="hs-keyword">type</span><span> </span><span class="hs-keyword">family</span><span> </span><a name="Normalize"><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier">Normalize</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679038064"><a href="#local-6989586621679038064"><span class="hs-identifier">d</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Type</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Type</span><span> </span><span class="hs-keyword">where</span><span>
200+</span><a name="line-200"></a><span> </span><span class="hs-identifier">Normalize</span><span> </span><a href="#local-6989586621679038065"><span class="hs-identifier hs-type">d</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">FromNat</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038065"><span class="hs-identifier hs-type">d</span></a><span class="hs-special">)</span><span>
201+</span><a name="line-201"></a><span>
202+</span><a name="line-202"></a><span class="hs-comment">-- | It isn't possible to implement the 'id' function so it's</span><span>
203+</span><a name="line-203"></a><span class="hs-comment">-- implementation is 'undefined'. However 'comp' can be and this partial</span><span>
204+</span><a name="line-204"></a><span class="hs-comment">-- class implementation exists just to make the code more readable.</span><span>
205+</span><a name="line-205"></a><span class="hs-comment">--</span><span>
206+</span><a name="line-206"></a><span class="hs-comment">-- Please use 'identity' instead.</span><span>
207+</span><a name="line-207"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038572"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-identifier hs-type">Category</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038572"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
208+</span><a name="line-208"></a><span> </span><a name="local-8214565720323789508"><span class="hs-identifier">id</span></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">undefined</span><span>
209+</span><a name="line-209"></a><span> </span><span class="hs-special">(</span><a name="local-8214565720323789507"><span class="hs-operator">.</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#comp"><span class="hs-identifier hs-var">comp</span></a><span>
210+</span><a name="line-210"></a><span>
211+</span><a name="line-211"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-identifier hs-type">NFData</span><span> </span><a href="#local-6989586621679038564"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-identifier hs-type">NFData</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038564"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038565"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038566"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
212+</span><a name="line-212"></a><span> </span><a name="local-8214565720323790686"><span class="hs-identifier">rnf</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
213+</span><a name="line-213"></a><span> </span><span class="hs-identifier">rnf</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038567"><a href="#local-6989586621679038567"><span class="hs-identifier">e</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">rnf</span><span> </span><a href="#local-6989586621679038567"><span class="hs-identifier hs-var">e</span></a><span>
214+</span><a name="line-214"></a><span> </span><span class="hs-identifier">rnf</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038568"><a href="#local-6989586621679038568"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038569"><a href="#local-6989586621679038569"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">rnf</span><span> </span><a href="#local-6989586621679038568"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-special">`</span><span class="hs-identifier hs-var">seq</span><span class="hs-special">`</span><span> </span><span class="hs-identifier hs-var">rnf</span><span> </span><a href="#local-6989586621679038569"><span class="hs-identifier hs-var">b</span></a><span>
215+</span><a name="line-215"></a><span> </span><span class="hs-identifier">rnf</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038570"><a href="#local-6989586621679038570"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038571"><a href="#local-6989586621679038571"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">rnf</span><span> </span><a href="#local-6989586621679038570"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-special">`</span><span class="hs-identifier hs-var">seq</span><span class="hs-special">`</span><span> </span><span class="hs-identifier hs-var">rnf</span><span> </span><a href="#local-6989586621679038571"><span class="hs-identifier hs-var">b</span></a><span>
216+</span><a name="line-216"></a><span>
217+</span><a name="line-217"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-identifier hs-type">Eq</span><span> </span><a href="#local-6989586621679038547"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-identifier hs-type">Eq</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038547"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038548"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038549"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
218+</span><a name="line-218"></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><a name="local-3458764513820541095"><span class="hs-operator">==</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">True</span><span>
219+</span><a name="line-219"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038550"><a href="#local-6989586621679038550"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-operator">==</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038551"><a href="#local-6989586621679038551"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679038550"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><a href="#local-6989586621679038551"><span class="hs-identifier hs-var">b</span></a><span>
220+</span><a name="line-220"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038552"><a href="#local-6989586621679038552"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038553"><a href="#local-6989586621679038553"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-operator">==</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038554"><a href="#local-6989586621679038554"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679038555"><a href="#local-6989586621679038555"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679038552"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><a href="#local-6989586621679038554"><span class="hs-identifier hs-var">c</span></a><span> </span><span class="hs-operator hs-var">&&</span><span> </span><a href="#local-6989586621679038553"><span class="hs-identifier hs-var">b</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><a href="#local-6989586621679038555"><span class="hs-identifier hs-var">d</span></a><span>
221+</span><a name="line-221"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038556"><a href="#local-6989586621679038556"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038557"><a href="#local-6989586621679038557"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-operator">==</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038558"><a href="#local-6989586621679038558"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679038559"><a href="#local-6989586621679038559"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679038556"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><a href="#local-6989586621679038558"><span class="hs-identifier hs-var">c</span></a><span> </span><span class="hs-operator hs-var">&&</span><span> </span><a href="#local-6989586621679038557"><span class="hs-identifier hs-var">b</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><a href="#local-6989586621679038559"><span class="hs-identifier hs-var">d</span></a><span>
222+</span><a name="line-222"></a><span> </span><a name="local-6989586621679038560"><a href="#local-6989586621679038560"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-operator">==</span><span> </span><a name="local-6989586621679038561"><a href="#local-6989586621679038561"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679038560"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038561"><span class="hs-identifier hs-var">y</span></a><span>
223+</span><a name="line-223"></a><span> </span><a name="local-6989586621679038562"><a href="#local-6989586621679038562"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-operator">==</span><span> </span><a name="local-6989586621679038563"><a href="#local-6989586621679038563"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038562"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><a href="#local-6989586621679038563"><span class="hs-identifier hs-var">y</span></a><span>
224+</span><a name="line-224"></a><span>
225+</span><a name="line-225"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038492"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038492"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038493"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038494"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
226+</span><a name="line-226"></a><span>
227+</span><a name="line-227"></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><a name="local-8214565720323790403"><span class="hs-operator">+</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
228+</span><a name="line-228"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038495"><a href="#local-6989586621679038495"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-operator">+</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038496"><a href="#local-6989586621679038496"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038495"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">+</span><span> </span><a href="#local-6989586621679038496"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
229+</span><a name="line-229"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038497"><a href="#local-6989586621679038497"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038498"><a href="#local-6989586621679038498"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-operator">+</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038499"><a href="#local-6989586621679038499"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679038500"><a href="#local-6989586621679038500"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038497"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">+</span><span> </span><a href="#local-6989586621679038499"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038498"><span class="hs-identifier hs-var">b</span></a><span> </span><span class="hs-operator hs-var">+</span><span> </span><a href="#local-6989586621679038500"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
230+</span><a name="line-230"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038501"><a href="#local-6989586621679038501"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038502"><a href="#local-6989586621679038502"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-operator">+</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038503"><a href="#local-6989586621679038503"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679038504"><a href="#local-6989586621679038504"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038501"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">+</span><span> </span><a href="#local-6989586621679038503"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038502"><span class="hs-identifier hs-var">b</span></a><span> </span><span class="hs-operator hs-var">+</span><span> </span><a href="#local-6989586621679038504"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
231+</span><a name="line-231"></a><span> </span><a name="local-6989586621679038505"><a href="#local-6989586621679038505"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-operator">+</span><span> </span><a name="local-6989586621679038506"><a href="#local-6989586621679038506"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679038505"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">+</span><span> </span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038506"><span class="hs-identifier hs-var">y</span></a><span>
232+</span><a name="line-232"></a><span> </span><a name="local-6989586621679038507"><a href="#local-6989586621679038507"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-operator">+</span><span> </span><a name="local-6989586621679038508"><a href="#local-6989586621679038508"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038507"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">+</span><span> </span><a href="#local-6989586621679038508"><span class="hs-identifier hs-var">y</span></a><span>
233+</span><a name="line-233"></a><span>
234+</span><a name="line-234"></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
235+</span><a name="line-235"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038509"><a href="#local-6989586621679038509"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038510"><a href="#local-6989586621679038510"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038509"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679038510"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
236+</span><a name="line-236"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038511"><a href="#local-6989586621679038511"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038512"><a href="#local-6989586621679038512"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038513"><a href="#local-6989586621679038513"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679038514"><a href="#local-6989586621679038514"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038511"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679038513"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038512"><span class="hs-identifier hs-var">b</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679038514"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
237+</span><a name="line-237"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038515"><a href="#local-6989586621679038515"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038516"><a href="#local-6989586621679038516"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038517"><a href="#local-6989586621679038517"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679038518"><a href="#local-6989586621679038518"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038515"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679038517"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038516"><span class="hs-identifier hs-var">b</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679038518"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
238+</span><a name="line-238"></a><span> </span><a name="local-6989586621679038519"><a href="#local-6989586621679038519"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-</span><span> </span><a name="local-6989586621679038520"><a href="#local-6989586621679038520"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679038519"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038520"><span class="hs-identifier hs-var">y</span></a><span>
239+</span><a name="line-239"></a><span> </span><a name="local-6989586621679038521"><a href="#local-6989586621679038521"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-</span><span> </span><a name="local-6989586621679038522"><a href="#local-6989586621679038522"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038521"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679038522"><span class="hs-identifier hs-var">y</span></a><span>
240+</span><a name="line-240"></a><span>
241+</span><a name="line-241"></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><a name="local-8214565720323790402"><span class="hs-operator">*</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
242+</span><a name="line-242"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038523"><a href="#local-6989586621679038523"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-operator">*</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038524"><a href="#local-6989586621679038524"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038523"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="#local-6989586621679038524"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
243+</span><a name="line-243"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038525"><a href="#local-6989586621679038525"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038526"><a href="#local-6989586621679038526"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-operator">*</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038527"><a href="#local-6989586621679038527"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679038528"><a href="#local-6989586621679038528"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038525"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="#local-6989586621679038527"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038526"><span class="hs-identifier hs-var">b</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="#local-6989586621679038528"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
244+</span><a name="line-244"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038529"><a href="#local-6989586621679038529"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038530"><a href="#local-6989586621679038530"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-operator">*</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038531"><a href="#local-6989586621679038531"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679038532"><a href="#local-6989586621679038532"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038529"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="#local-6989586621679038531"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038530"><span class="hs-identifier hs-var">b</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="#local-6989586621679038532"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
245+</span><a name="line-245"></a><span> </span><a name="local-6989586621679038533"><a href="#local-6989586621679038533"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-operator">*</span><span> </span><a name="local-6989586621679038534"><a href="#local-6989586621679038534"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679038533"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038534"><span class="hs-identifier hs-var">y</span></a><span>
246+</span><a name="line-246"></a><span> </span><a name="local-6989586621679038535"><a href="#local-6989586621679038535"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-operator">*</span><span> </span><a name="local-6989586621679038536"><a href="#local-6989586621679038536"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038535"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="#local-6989586621679038536"><span class="hs-identifier hs-var">y</span></a><span>
247+</span><a name="line-247"></a><span>
248+</span><a name="line-248"></a><span> </span><a name="local-8214565720323790401"><span class="hs-identifier">abs</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
249+</span><a name="line-249"></a><span> </span><span class="hs-identifier">abs</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038537"><a href="#local-6989586621679038537"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">abs</span><span> </span><a href="#local-6989586621679038537"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span>
250+</span><a name="line-250"></a><span> </span><span class="hs-identifier">abs</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038538"><a href="#local-6989586621679038538"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038539"><a href="#local-6989586621679038539"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">abs</span><span> </span><a href="#local-6989586621679038538"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">abs</span><span> </span><a href="#local-6989586621679038539"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
251+</span><a name="line-251"></a><span> </span><span class="hs-identifier">abs</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038540"><a href="#local-6989586621679038540"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038541"><a href="#local-6989586621679038541"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">abs</span><span> </span><a href="#local-6989586621679038540"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">abs</span><span> </span><a href="#local-6989586621679038541"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
252+</span><a name="line-252"></a><span>
253+</span><a name="line-253"></a><span> </span><a name="local-8214565720323790400"><span class="hs-identifier">signum</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
254+</span><a name="line-254"></a><span> </span><span class="hs-identifier">signum</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038542"><a href="#local-6989586621679038542"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">signum</span><span> </span><a href="#local-6989586621679038542"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span>
255+</span><a name="line-255"></a><span> </span><span class="hs-identifier">signum</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038543"><a href="#local-6989586621679038543"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038544"><a href="#local-6989586621679038544"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">signum</span><span> </span><a href="#local-6989586621679038543"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">signum</span><span> </span><a href="#local-6989586621679038544"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
256+</span><a name="line-256"></a><span> </span><span class="hs-identifier">signum</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038545"><a href="#local-6989586621679038545"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038546"><a href="#local-6989586621679038546"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">signum</span><span> </span><a href="#local-6989586621679038545"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">signum</span><span> </span><a href="#local-6989586621679038546"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
257+</span><a name="line-257"></a><span>
258+</span><a name="line-258"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><a href="#local-6989586621679038475"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038475"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038476"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038477"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
259+</span><a name="line-259"></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><a name="local-8214565720323790495"><span class="hs-operator"><=</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">True</span><span>
260+</span><a name="line-260"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038478"><a href="#local-6989586621679038478"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-operator"><=</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038479"><a href="#local-6989586621679038479"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679038478"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var"><=</span><span> </span><a href="#local-6989586621679038479"><span class="hs-identifier hs-var">b</span></a><span>
261+</span><a name="line-261"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038480"><a href="#local-6989586621679038480"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038481"><a href="#local-6989586621679038481"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-operator"><=</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038482"><a href="#local-6989586621679038482"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679038483"><a href="#local-6989586621679038483"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038480"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var"><=</span><span> </span><a href="#local-6989586621679038482"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">&&</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038481"><span class="hs-identifier hs-var">b</span></a><span> </span><span class="hs-operator hs-var"><=</span><span> </span><a href="#local-6989586621679038483"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
262+</span><a name="line-262"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038484"><a href="#local-6989586621679038484"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038485"><a href="#local-6989586621679038485"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-operator"><=</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038486"><a href="#local-6989586621679038486"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679038487"><a href="#local-6989586621679038487"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038484"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var"><=</span><span> </span><a href="#local-6989586621679038486"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">&&</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038485"><span class="hs-identifier hs-var">b</span></a><span> </span><span class="hs-operator hs-var"><=</span><span> </span><a href="#local-6989586621679038487"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
263+</span><a name="line-263"></a><span> </span><a name="local-6989586621679038488"><a href="#local-6989586621679038488"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-operator"><=</span><span> </span><a name="local-6989586621679038489"><a href="#local-6989586621679038489"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679038488"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var"><=</span><span> </span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038489"><span class="hs-identifier hs-var">y</span></a><span>
264+</span><a name="line-264"></a><span> </span><a name="local-6989586621679038490"><a href="#local-6989586621679038490"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-operator"><=</span><span> </span><a name="local-6989586621679038491"><a href="#local-6989586621679038491"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038490"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var"><=</span><span> </span><a href="#local-6989586621679038491"><span class="hs-identifier hs-var">y</span></a><span>
265+</span><a name="line-265"></a><span>
266+</span><a name="line-266"></a><span class="hs-comment">-- Primitives</span><span>
267+</span><a name="line-267"></a><span>
268+</span><a name="line-268"></a><span class="hs-comment">-- | Empty matrix constructor</span><span>
269+</span><a name="line-269"></a><span class="hs-identifier">empty</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038712"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-identifier hs-type">Void</span><span> </span><span class="hs-identifier hs-type">Void</span><span>
270+</span><a name="line-270"></a><a name="empty"><a href="Matrix.Internal.html#empty"><span class="hs-identifier">empty</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
271+</span><a name="line-271"></a><span>
272+</span><a name="line-272"></a><span class="hs-comment">-- | Unit matrix constructor</span><span>
273+</span><a name="line-273"></a><span class="hs-identifier">one</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="#local-6989586621679038711"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038711"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
274+</span><a name="line-274"></a><a name="one"><a href="Matrix.Internal.html#one"><span class="hs-identifier">one</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span>
275+</span><a name="line-275"></a><span>
276+</span><a name="line-276"></a><span class="hs-comment">-- | Matrix 'Junc' constructor</span><span>
277+</span><a name="line-277"></a><span class="hs-identifier">junc</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038707"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038708"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038709"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038707"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038710"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679038709"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038707"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038708"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038710"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038709"><span class="hs-identifier hs-type">rows</span></a><span>
278+</span><a name="line-278"></a><a name="junc"><a href="Matrix.Internal.html#junc"><span class="hs-identifier">junc</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span>
279+</span><a name="line-279"></a><span>
280+</span><a name="line-280"></a><span class="hs-keyword">infixl</span><span> </span><span class="hs-number">3</span><span> </span><a href="Matrix.Internal.html#%7C%7C%7C"><span class="hs-operator hs-var">|||</span></a><span>
281+</span><a name="line-281"></a><span>
282+</span><a name="line-282"></a><span class="hs-comment">-- | Matrix 'Junc' constructor</span><span>
283+</span><a name="line-283"></a><span class="hs-special">(</span><span class="hs-operator">|||</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038703"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038704"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038705"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038703"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038706"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679038705"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038703"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038704"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038706"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038705"><span class="hs-identifier hs-type">rows</span></a><span>
284+</span><a name="line-284"></a><span class="hs-special">(</span><a name="%7C%7C%7C"><a href="Matrix.Internal.html#%7C%7C%7C"><span class="hs-operator">|||</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span>
285+</span><a name="line-285"></a><span>
286+</span><a name="line-286"></a><span class="hs-comment">-- | Matrix 'Split' constructor</span><span>
287+</span><a name="line-287"></a><span class="hs-identifier">split</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038699"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038700"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038701"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038699"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038700"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038702"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038699"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038700"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038701"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038702"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
288+</span><a name="line-288"></a><a name="split"><a href="Matrix.Internal.html#split"><span class="hs-identifier">split</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span>
289+</span><a name="line-289"></a><span>
290+</span><a name="line-290"></a><span class="hs-keyword">infixl</span><span> </span><span class="hs-number">2</span><span> </span><a href="Matrix.Internal.html#%3D%3D%3D"><span class="hs-operator hs-var">===</span></a><span>
291+</span><a name="line-291"></a><span>
292+</span><a name="line-292"></a><span class="hs-comment">-- | Matrix 'Split' constructor</span><span>
293+</span><a name="line-293"></a><span class="hs-special">(</span><span class="hs-operator">===</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038695"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038696"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038697"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038695"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038696"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038698"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038695"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038696"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038697"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038698"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
294+</span><a name="line-294"></a><span class="hs-special">(</span><a name="%3D%3D%3D"><a href="Matrix.Internal.html#%3D%3D%3D"><span class="hs-operator">===</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span>
295+</span><a name="line-295"></a><span>
296+</span><a name="line-296"></a><span class="hs-comment">-- Construction</span><span>
297+</span><a name="line-297"></a><span>
298+</span><a name="line-298"></a><span class="hs-comment">-- | Type class for defining the 'fromList' conversion function.</span><span>
299+</span><a name="line-299"></a><span class="hs-comment">--</span><span>
300+</span><a name="line-300"></a><span class="hs-comment">-- Given that it is not possible to branch on types at the term level type</span><span>
301+</span><a name="line-301"></a><span class="hs-comment">-- classes are needed bery much like an inductive definition but on types.</span><span>
302+</span><a name="line-302"></a><span class="hs-keyword">class</span><span> </span><a name="FromLists"><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier">FromLists</span></a></a><span> </span><a name="local-6989586621679038061"><a href="#local-6989586621679038061"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038062"><a href="#local-6989586621679038062"><span class="hs-identifier">cols</span></a></a><span> </span><a name="local-6989586621679038063"><a href="#local-6989586621679038063"><span class="hs-identifier">rows</span></a></a><span> </span><span class="hs-keyword">where</span><span>
303+</span><a name="line-303"></a><span> </span><span class="hs-comment">-- | Build a matrix out of a list of list of elements. Throws a runtime</span><span>
304+</span><a name="line-304"></a><span> </span><span class="hs-comment">-- error if the dimensions do not match.</span><span>
305+</span><a name="line-305"></a><span> </span><a name="fromLists"><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier">fromLists</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="hs-special">[</span><a href="#local-6989586621679038061"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038061"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038062"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038063"><span class="hs-identifier hs-type">rows</span></a><span>
306+</span><a name="line-306"></a><span>
307+</span><a name="line-307"></a><span class="hs-keyword">instance</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038474"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-identifier hs-type">Void</span><span> </span><span class="hs-identifier hs-type">Void</span><span> </span><span class="hs-keyword">where</span><span>
308+</span><a name="line-308"></a><span> </span><a name="local-8214565720323812914"><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier">fromLists</span></a></a><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
309+</span><a name="line-309"></a><span> </span><span class="hs-identifier">fromLists</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">error</span><span> </span><span class="hs-string">"Wrong dimensions"</span><span>
310+</span><a name="line-310"></a><span>
311+</span><a name="line-311"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-pragma">{-# OVERLAPPING</span><span> </span><span class="hs-pragma">#-}</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038472"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
312+</span><a name="line-312"></a><span> </span><a name="local-8214565720323812914"><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier">fromLists</span></a></a><span> </span><span class="hs-special">[</span><span class="hs-special">[</span><a name="local-6989586621679038473"><a href="#local-6989586621679038473"><span class="hs-identifier">e</span></a></a><span class="hs-special">]</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a href="#local-6989586621679038473"><span class="hs-identifier hs-var">e</span></a><span>
313+</span><a name="line-313"></a><span> </span><span class="hs-identifier">fromLists</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">error</span><span> </span><span class="hs-string">"Wrong dimensions"</span><span>
314+</span><a name="line-314"></a><span>
315+</span><a name="line-315"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-pragma">{-# OVERLAPPING</span><span> </span><span class="hs-pragma">#-}</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038468"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038469"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038468"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038469"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
316+</span><a name="line-316"></a><span> </span><a name="local-8214565720323812914"><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier">fromLists</span></a></a><span> </span><span class="hs-special">[</span><a name="local-6989586621679038470"><a href="#local-6989586621679038470"><span class="hs-identifier">h</span></a></a><span> </span><span class="hs-glyph">:</span><span> </span><a name="local-6989586621679038471"><a href="#local-6989586621679038471"><span class="hs-identifier">t</span></a></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a href="#local-6989586621679038470"><span class="hs-identifier hs-var">h</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><span class="hs-special">[</span><a href="#local-6989586621679038471"><span class="hs-identifier hs-var">t</span></a><span class="hs-special">]</span><span class="hs-special">)</span><span>
317+</span><a name="line-317"></a><span> </span><span class="hs-identifier">fromLists</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">error</span><span> </span><span class="hs-string">"Wrong dimensions"</span><span>
318+</span><a name="line-318"></a><span>
319+</span><a name="line-319"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-pragma">{-# OVERLAPPABLE</span><span> </span><span class="hs-pragma">#-}</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038463"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038464"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038463"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038465"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038464"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038463"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038464"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038465"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
320+</span><a name="line-320"></a><span> </span><a name="local-8214565720323812914"><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier">fromLists</span></a></a><span> </span><span class="hs-special">[</span><a name="local-6989586621679038466"><a href="#local-6989586621679038466"><span class="hs-identifier">l</span></a></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">=</span><span>
321+</span><a name="line-321"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679038467"><a href="#local-6989586621679038467"><span class="hs-identifier">rowsA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038464"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
322+</span><a name="line-322"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679038467"><span class="hs-identifier hs-var">rowsA</span></a><span> </span><a href="#local-6989586621679038466"><span class="hs-identifier hs-var">l</span></a><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-var">drop</span><span> </span><a href="#local-6989586621679038467"><span class="hs-identifier hs-var">rowsA</span></a><span> </span><a href="#local-6989586621679038466"><span class="hs-identifier hs-var">l</span></a><span class="hs-special">]</span><span class="hs-special">)</span><span>
323+</span><a name="line-323"></a><span> </span><span class="hs-identifier">fromLists</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">error</span><span> </span><span class="hs-string">"Wrong dimensions"</span><span>
324+</span><a name="line-324"></a><span>
325+</span><a name="line-325"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-pragma">{-# OVERLAPPING</span><span> </span><span class="hs-pragma">#-}</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038459"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038460"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038459"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038460"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
326+</span><a name="line-326"></a><span> </span><a name="local-8214565720323812914"><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier">fromLists</span></a></a><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><a name="local-6989586621679038461"><a href="#local-6989586621679038461"><span class="hs-identifier">h</span></a></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">:</span><span> </span><a name="local-6989586621679038462"><a href="#local-6989586621679038462"><span class="hs-identifier">t</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a href="#local-6989586621679038461"><span class="hs-identifier hs-var">h</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><a href="#local-6989586621679038462"><span class="hs-identifier hs-var">t</span></a><span class="hs-special">)</span><span>
327+</span><a name="line-327"></a><span> </span><span class="hs-identifier">fromLists</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">error</span><span> </span><span class="hs-string">"Wrong dimensions"</span><span>
328+</span><a name="line-328"></a><span>
329+</span><a name="line-329"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-pragma">{-# OVERLAPPABLE</span><span> </span><span class="hs-pragma">#-}</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038454"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038455"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038454"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038456"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038455"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038454"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038455"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038456"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
330+</span><a name="line-330"></a><span> </span><a name="local-8214565720323812914"><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier">fromLists</span></a></a><span> </span><a name="local-6989586621679038457"><a href="#local-6989586621679038457"><span class="hs-identifier">l</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-identifier">_</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">:</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
331+</span><a name="line-331"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679038458"><a href="#local-6989586621679038458"><span class="hs-identifier">rowsA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038455"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
332+</span><a name="line-332"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679038458"><span class="hs-identifier hs-var">rowsA</span></a><span> </span><a href="#local-6989586621679038457"><span class="hs-identifier hs-var">l</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">drop</span><span> </span><a href="#local-6989586621679038458"><span class="hs-identifier hs-var">rowsA</span></a><span> </span><a href="#local-6989586621679038457"><span class="hs-identifier hs-var">l</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
333+</span><a name="line-333"></a><span> </span><span class="hs-identifier">fromLists</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">error</span><span> </span><span class="hs-string">"Wrong dimensions"</span><span>
334+</span><a name="line-334"></a><span>
335+</span><a name="line-335"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-pragma">{-# OVERLAPPABLE</span><span> </span><span class="hs-pragma">#-}</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038253"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038254"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038255"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038256"><span class="hs-identifier hs-type">c</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038253"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038254"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038255"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038257"><span class="hs-identifier hs-type">d</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038256"><span class="hs-identifier hs-type">c</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038253"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038254"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038255"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038256"><span class="hs-identifier hs-type">c</span></a><span> </span><a href="#local-6989586621679038257"><span class="hs-identifier hs-type">d</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
336+</span><a name="line-336"></a><span> </span><a name="local-8214565720323812914"><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier">fromLists</span></a></a><span> </span><a name="local-6989586621679038258"><a href="#local-6989586621679038258"><span class="hs-identifier">l</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a name="local-6989586621679038259"><a href="#local-6989586621679038259"><span class="hs-identifier">h</span></a></a><span> </span><span class="hs-glyph">:</span><span> </span><a name="local-6989586621679038260"><a href="#local-6989586621679038260"><span class="hs-identifier">t</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
337+</span><a name="line-337"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679038261"><a href="#local-6989586621679038261"><span class="hs-identifier">lh</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">length</span><span> </span><a href="#local-6989586621679038259"><span class="hs-identifier hs-var">h</span></a><span>
338+</span><a name="line-338"></a><span> </span><a name="local-6989586621679038262"><a href="#local-6989586621679038262"><span class="hs-identifier">rowsC</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038256"><span class="hs-identifier hs-type">c</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
339+</span><a name="line-339"></a><span> </span><a name="local-6989586621679038263"><a href="#local-6989586621679038263"><span class="hs-identifier">condition</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">all</span><span> </span><span class="hs-special">(</span><span class="hs-operator hs-var">==</span><span> </span><a href="#local-6989586621679038261"><span class="hs-identifier hs-var">lh</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-identifier hs-var">length</span><span> </span><a href="#local-6989586621679038260"><span class="hs-identifier hs-var">t</span></a><span class="hs-special">)</span><span>
340+</span><a name="line-340"></a><span> </span><span class="hs-keyword">in</span><span> </span><span class="hs-keyword">if</span><span> </span><a href="#local-6989586621679038261"><span class="hs-identifier hs-var">lh</span></a><span> </span><span class="hs-operator hs-var">></span><span> </span><span class="hs-number">0</span><span> </span><span class="hs-operator hs-var">&&</span><span> </span><a href="#local-6989586621679038263"><span class="hs-identifier hs-var">condition</span></a><span>
341+</span><a name="line-341"></a><span> </span><span class="hs-keyword">then</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679038262"><span class="hs-identifier hs-var">rowsC</span></a><span> </span><a href="#local-6989586621679038258"><span class="hs-identifier hs-var">l</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">drop</span><span> </span><a href="#local-6989586621679038262"><span class="hs-identifier hs-var">rowsC</span></a><span> </span><a href="#local-6989586621679038258"><span class="hs-identifier hs-var">l</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
342+</span><a name="line-342"></a><span> </span><span class="hs-keyword">else</span><span> </span><span class="hs-identifier hs-var">error</span><span> </span><span class="hs-string">"Not all rows have the same length"</span><span>
343+</span><a name="line-343"></a><span>
344+</span><a name="line-344"></a><span class="hs-comment">-- | Matrix builder function. Constructs a matrix provided with</span><span>
345+</span><a name="line-345"></a><span class="hs-comment">-- a construction function.</span><span>
346+</span><a name="line-346"></a><span class="hs-identifier">matrixBuilder</span><span> </span><span class="hs-glyph">::</span><span>
347+</span><a name="line-347"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038692"><a href="#local-6989586621679038692"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038693"><a href="#local-6989586621679038693"><span class="hs-identifier">cols</span></a></a><span> </span><a name="local-6989586621679038694"><a href="#local-6989586621679038694"><span class="hs-identifier">rows</span></a></a><span class="hs-operator">.</span><span>
348+</span><a name="line-348"></a><span> </span><span class="hs-special">(</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038692"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038693"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038694"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">,</span><span>
349+</span><a name="line-349"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038693"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
350+</span><a name="line-350"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038694"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span>
351+</span><a name="line-351"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span>
352+</span><a name="line-352"></a><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-identifier hs-type">Int</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Int</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><a href="#local-6989586621679038692"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span>
353+</span><a name="line-353"></a><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038692"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038693"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038694"><span class="hs-identifier hs-type">rows</span></a><span>
354+</span><a name="line-354"></a><a name="matrixBuilder"><a href="Matrix.Internal.html#matrixBuilder"><span class="hs-identifier">matrixBuilder</span></a></a><span> </span><a name="local-6989586621679038713"><a href="#local-6989586621679038713"><span class="hs-identifier">f</span></a></a><span> </span><span class="hs-glyph">=</span><span>
355+</span><a name="line-355"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679038714"><a href="#local-6989586621679038714"><span class="hs-identifier">c</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038693"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
356+</span><a name="line-356"></a><span> </span><a name="local-6989586621679038715"><a href="#local-6989586621679038715"><span class="hs-identifier">r</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038694"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
357+</span><a name="line-357"></a><span> </span><a name="local-6989586621679038716"><a href="#local-6989586621679038716"><span class="hs-identifier">positions</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-special">(</span><a href="#local-6989586621679038717"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038718"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">|</span><span> </span><a name="local-6989586621679038717"><a href="#local-6989586621679038717"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-glyph"><-</span><span> </span><span class="hs-special">[</span><span class="hs-number">0</span><span> </span><span class="hs-glyph">..</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038715"><span class="hs-identifier hs-var">r</span></a><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><a name="local-6989586621679038718"><a href="#local-6989586621679038718"><span class="hs-identifier">b</span></a></a><span> </span><span class="hs-glyph"><-</span><span> </span><span class="hs-special">[</span><span class="hs-number">0</span><span> </span><span class="hs-glyph">..</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038714"><span class="hs-identifier hs-var">c</span></a><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span class="hs-special">]</span><span class="hs-special">]</span><span>
358+</span><a name="line-358"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">map</span><span> </span><a href="#local-6989586621679038713"><span class="hs-identifier hs-var">f</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">groupBy</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-special">(</span><a name="local-6989586621679038874"><a href="#local-6989586621679038874"><span class="hs-identifier">x</span></a></a><span class="hs-special">,</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a name="local-6989586621679038875"><a href="#local-6989586621679038875"><span class="hs-identifier">w</span></a></a><span class="hs-special">,</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><a href="#local-6989586621679038874"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><a href="#local-6989586621679038875"><span class="hs-identifier hs-var">w</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="#local-6989586621679038716"><span class="hs-identifier hs-var">positions</span></a><span>
359+</span><a name="line-359"></a><span>
360+</span><a name="line-360"></a><span class="hs-comment">-- | Constructs a column vector matrix</span><span>
361+</span><a name="line-361"></a><span class="hs-identifier">col</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038690"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038691"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679038690"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038690"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038691"><span class="hs-identifier hs-type">rows</span></a><span>
362+</span><a name="line-362"></a><a name="col"><a href="Matrix.Internal.html#col"><span class="hs-identifier">col</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">:</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
363+</span><a name="line-363"></a><span>
364+</span><a name="line-364"></a><span class="hs-comment">-- | Constructs a row vector matrix</span><span>
365+</span><a name="line-365"></a><span class="hs-identifier">row</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038688"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038689"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679038688"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038688"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038689"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
366+</span><a name="line-366"></a><a name="row"><a href="Matrix.Internal.html#row"><span class="hs-identifier">row</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">:</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
367+</span><a name="line-367"></a><span>
368+</span><a name="line-368"></a><span class="hs-comment">-- | Lifts functions to matrices with arbitrary dimensions.</span><span>
369+</span><a name="line-369"></a><span class="hs-comment">--</span><span>
370+</span><a name="line-370"></a><span class="hs-comment">-- NOTE: Be careful to not ask for a matrix bigger than the cardinality of</span><span>
371+</span><a name="line-371"></a><span class="hs-comment">-- types @a@ or @b@ allows.</span><span>
372+</span><a name="line-372"></a><span class="hs-identifier">fromF</span><span> </span><span class="hs-glyph">::</span><span>
373+</span><a name="line-373"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038683"><a href="#local-6989586621679038683"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038684"><a href="#local-6989586621679038684"><span class="hs-identifier">b</span></a></a><span> </span><a name="local-6989586621679038685"><a href="#local-6989586621679038685"><span class="hs-identifier">cols</span></a></a><span> </span><a name="local-6989586621679038686"><a href="#local-6989586621679038686"><span class="hs-identifier">rows</span></a></a><span> </span><a name="local-6989586621679038687"><a href="#local-6989586621679038687"><span class="hs-identifier">e</span></a></a><span class="hs-operator">.</span><span>
374+</span><a name="line-374"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679038683"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
375+</span><a name="line-375"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679038684"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
376+</span><a name="line-376"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679038683"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
377+</span><a name="line-377"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679038684"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
378+</span><a name="line-378"></a><span> </span><span class="hs-identifier hs-type">Eq</span><span> </span><a href="#local-6989586621679038684"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
379+</span><a name="line-379"></a><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038687"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
380+</span><a name="line-380"></a><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><a href="#local-6989586621679038687"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
381+</span><a name="line-381"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038685"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
382+</span><a name="line-382"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038686"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
383+</span><a name="line-383"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038687"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038686"><span class="hs-identifier hs-type">rows</span></a><span> </span><a href="#local-6989586621679038685"><span class="hs-identifier hs-type">cols</span></a><span>
384+</span><a name="line-384"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span>
385+</span><a name="line-385"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038683"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="#local-6989586621679038684"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span>
386+</span><a name="line-386"></a><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038687"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038685"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038686"><span class="hs-identifier hs-type">rows</span></a><span>
387+</span><a name="line-387"></a><a name="fromF"><a href="Matrix.Internal.html#fromF"><span class="hs-identifier">fromF</span></a></a><span> </span><a name="local-6989586621679038876"><a href="#local-6989586621679038876"><span class="hs-identifier">f</span></a></a><span> </span><span class="hs-glyph">=</span><span>
388+</span><a name="line-388"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679038880"><a href="#local-6989586621679038880"><span class="hs-identifier">minA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">minBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038683"><span class="hs-identifier hs-type">a</span></a><span>
389+</span><a name="line-389"></a><span> </span><a name="local-6989586621679038881"><a href="#local-6989586621679038881"><span class="hs-identifier">maxA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">maxBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038683"><span class="hs-identifier hs-type">a</span></a><span>
390+</span><a name="line-390"></a><span> </span><a name="local-6989586621679038882"><a href="#local-6989586621679038882"><span class="hs-identifier">minB</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">minBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038684"><span class="hs-identifier hs-type">b</span></a><span>
391+</span><a name="line-391"></a><span> </span><a name="local-6989586621679038883"><a href="#local-6989586621679038883"><span class="hs-identifier">maxB</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">maxBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038684"><span class="hs-identifier hs-type">b</span></a><span>
392+</span><a name="line-392"></a><span> </span><a name="local-6989586621679038884"><a href="#local-6989586621679038884"><span class="hs-identifier">ccols</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038685"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
393+</span><a name="line-393"></a><span> </span><a name="local-6989586621679038885"><a href="#local-6989586621679038885"><span class="hs-identifier">rrows</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038686"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
394+</span><a name="line-394"></a><span> </span><a name="local-6989586621679038886"><a href="#local-6989586621679038886"><span class="hs-identifier">elementsA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679038884"><span class="hs-identifier hs-var">ccols</span></a><span> </span><span class="hs-special">[</span><a href="#local-6989586621679038880"><span class="hs-identifier hs-var">minA</span></a><span> </span><span class="hs-glyph">..</span><span> </span><a href="#local-6989586621679038881"><span class="hs-identifier hs-var">maxA</span></a><span class="hs-special">]</span><span>
395+</span><a name="line-395"></a><span> </span><a name="local-6989586621679038887"><a href="#local-6989586621679038887"><span class="hs-identifier">elementsB</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679038885"><span class="hs-identifier hs-var">rrows</span></a><span> </span><span class="hs-special">[</span><a href="#local-6989586621679038882"><span class="hs-identifier hs-var">minB</span></a><span> </span><span class="hs-glyph">..</span><span> </span><a href="#local-6989586621679038883"><span class="hs-identifier hs-var">maxB</span></a><span class="hs-special">]</span><span>
396+</span><a name="line-396"></a><span> </span><a name="local-6989586621679038888"><a href="#local-6989586621679038888"><span class="hs-identifier">combinations</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">,</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var"><$></span><span> </span><a href="#local-6989586621679038886"><span class="hs-identifier hs-var">elementsA</span></a><span> </span><span class="hs-operator hs-var"><*></span><span> </span><a href="#local-6989586621679038887"><span class="hs-identifier hs-var">elementsB</span></a><span>
397+</span><a name="line-397"></a><span> </span><a name="local-6989586621679038889"><a href="#local-6989586621679038889"><span class="hs-identifier">combAp</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-identifier hs-var">snd</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">sort</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-special">(</span><a name="local-6989586621679038920"><a href="#local-6989586621679038920"><span class="hs-identifier">a</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679038921"><a href="#local-6989586621679038921"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-keyword">if</span><span> </span><a href="#local-6989586621679038876"><span class="hs-identifier hs-var">f</span></a><span> </span><a href="#local-6989586621679038920"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><a href="#local-6989586621679038921"><span class="hs-identifier hs-var">b</span></a><span>
398+</span><a name="line-398"></a><span> </span><span class="hs-keyword">then</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679038920"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679038921"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span>
399+</span><a name="line-399"></a><span> </span><span class="hs-keyword">else</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679038920"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679038921"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-number">0</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="#local-6989586621679038888"><span class="hs-identifier hs-var">combinations</span></a><span>
400+</span><a name="line-400"></a><span> </span><a name="local-6989586621679038890"><a href="#local-6989586621679038890"><span class="hs-identifier">mList</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679038877"><span class="hs-identifier hs-var">buildList</span></a><span> </span><a href="#local-6989586621679038889"><span class="hs-identifier hs-var">combAp</span></a><span> </span><a href="#local-6989586621679038885"><span class="hs-identifier hs-var">rrows</span></a><span>
401+</span><a name="line-401"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><a href="#local-6989586621679038890"><span class="hs-identifier hs-var">mList</span></a><span>
402+</span><a name="line-402"></a><span> </span><span class="hs-keyword">where</span><span>
403+</span><a name="line-403"></a><span> </span><a name="local-6989586621679038877"><a href="#local-6989586621679038877"><span class="hs-identifier">buildList</span></a></a><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
404+</span><a name="line-404"></a><span> </span><span class="hs-identifier">buildList</span><span> </span><a name="local-6989586621679038878"><a href="#local-6989586621679038878"><span class="hs-identifier">l</span></a></a><span> </span><a name="local-6989586621679038879"><a href="#local-6989586621679038879"><span class="hs-identifier">r</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679038879"><span class="hs-identifier hs-var">r</span></a><span> </span><a href="#local-6989586621679038878"><span class="hs-identifier hs-var">l</span></a><span> </span><span class="hs-glyph">:</span><span> </span><a href="#local-6989586621679038877"><span class="hs-identifier hs-var">buildList</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">drop</span><span> </span><a href="#local-6989586621679038879"><span class="hs-identifier hs-var">r</span></a><span> </span><a href="#local-6989586621679038878"><span class="hs-identifier hs-var">l</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038879"><span class="hs-identifier hs-var">r</span></a><span>
405+</span><a name="line-405"></a><span>
406+</span><a name="line-406"></a><span class="hs-comment">-- | Lifts functions to matrices with dimensions matching @a@ and @b@</span><span>
407+</span><a name="line-407"></a><span class="hs-comment">-- cardinality's.</span><span>
408+</span><a name="line-408"></a><span class="hs-identifier">fromF'</span><span> </span><span class="hs-glyph">::</span><span>
409+</span><a name="line-409"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038680"><a href="#local-6989586621679038680"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038681"><a href="#local-6989586621679038681"><span class="hs-identifier">b</span></a></a><span> </span><a name="local-6989586621679038682"><a href="#local-6989586621679038682"><span class="hs-identifier">e</span></a></a><span class="hs-operator">.</span><span>
410+</span><a name="line-410"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679038680"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
411+</span><a name="line-411"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679038681"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
412+</span><a name="line-412"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679038680"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
413+</span><a name="line-413"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679038681"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
414+</span><a name="line-414"></a><span> </span><span class="hs-identifier hs-type">Eq</span><span> </span><a href="#local-6989586621679038681"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
415+</span><a name="line-415"></a><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038682"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
416+</span><a name="line-416"></a><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><a href="#local-6989586621679038682"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
417+</span><a name="line-417"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038680"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
418+</span><a name="line-418"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038681"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
419+</span><a name="line-419"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038682"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038681"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038680"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
420+</span><a name="line-420"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span>
421+</span><a name="line-421"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038680"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="#local-6989586621679038681"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span>
422+</span><a name="line-422"></a><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038682"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038680"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038681"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
423+</span><a name="line-423"></a><a name="fromF%27"><a href="Matrix.Internal.html#fromF%27"><span class="hs-identifier">fromF'</span></a></a><span> </span><a name="local-6989586621679038922"><a href="#local-6989586621679038922"><span class="hs-identifier">f</span></a></a><span> </span><span class="hs-glyph">=</span><span>
424+</span><a name="line-424"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679038926"><a href="#local-6989586621679038926"><span class="hs-identifier">minA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">minBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038680"><span class="hs-identifier hs-type">a</span></a><span>
425+</span><a name="line-425"></a><span> </span><a name="local-6989586621679038927"><a href="#local-6989586621679038927"><span class="hs-identifier">maxA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">maxBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038680"><span class="hs-identifier hs-type">a</span></a><span>
426+</span><a name="line-426"></a><span> </span><a name="local-6989586621679038928"><a href="#local-6989586621679038928"><span class="hs-identifier">minB</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">minBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038681"><span class="hs-identifier hs-type">b</span></a><span>
427+</span><a name="line-427"></a><span> </span><a name="local-6989586621679038929"><a href="#local-6989586621679038929"><span class="hs-identifier">maxB</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">maxBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038681"><span class="hs-identifier hs-type">b</span></a><span>
428+</span><a name="line-428"></a><span> </span><a name="local-6989586621679038930"><a href="#local-6989586621679038930"><span class="hs-identifier">ccols</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038680"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
429+</span><a name="line-429"></a><span> </span><a name="local-6989586621679038931"><a href="#local-6989586621679038931"><span class="hs-identifier">rrows</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038681"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
430+</span><a name="line-430"></a><span> </span><a name="local-6989586621679038932"><a href="#local-6989586621679038932"><span class="hs-identifier">elementsA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679038930"><span class="hs-identifier hs-var">ccols</span></a><span> </span><span class="hs-special">[</span><a href="#local-6989586621679038926"><span class="hs-identifier hs-var">minA</span></a><span> </span><span class="hs-glyph">..</span><span> </span><a href="#local-6989586621679038927"><span class="hs-identifier hs-var">maxA</span></a><span class="hs-special">]</span><span>
431+</span><a name="line-431"></a><span> </span><a name="local-6989586621679038933"><a href="#local-6989586621679038933"><span class="hs-identifier">elementsB</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679038931"><span class="hs-identifier hs-var">rrows</span></a><span> </span><span class="hs-special">[</span><a href="#local-6989586621679038928"><span class="hs-identifier hs-var">minB</span></a><span> </span><span class="hs-glyph">..</span><span> </span><a href="#local-6989586621679038929"><span class="hs-identifier hs-var">maxB</span></a><span class="hs-special">]</span><span>
432+</span><a name="line-432"></a><span> </span><a name="local-6989586621679038934"><a href="#local-6989586621679038934"><span class="hs-identifier">combinations</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">,</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var"><$></span><span> </span><a href="#local-6989586621679038932"><span class="hs-identifier hs-var">elementsA</span></a><span> </span><span class="hs-operator hs-var"><*></span><span> </span><a href="#local-6989586621679038933"><span class="hs-identifier hs-var">elementsB</span></a><span>
433+</span><a name="line-433"></a><span> </span><a name="local-6989586621679038935"><a href="#local-6989586621679038935"><span class="hs-identifier">combAp</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-identifier hs-var">snd</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">sort</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-special">(</span><a name="local-6989586621679038937"><a href="#local-6989586621679038937"><span class="hs-identifier">a</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679038938"><a href="#local-6989586621679038938"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-keyword">if</span><span> </span><a href="#local-6989586621679038922"><span class="hs-identifier hs-var">f</span></a><span> </span><a href="#local-6989586621679038937"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><a href="#local-6989586621679038938"><span class="hs-identifier hs-var">b</span></a><span>
434+</span><a name="line-434"></a><span> </span><span class="hs-keyword">then</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679038937"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679038938"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span>
435+</span><a name="line-435"></a><span> </span><span class="hs-keyword">else</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679038937"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679038938"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-number">0</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="#local-6989586621679038934"><span class="hs-identifier hs-var">combinations</span></a><span>
436+</span><a name="line-436"></a><span> </span><a name="local-6989586621679038936"><a href="#local-6989586621679038936"><span class="hs-identifier">mList</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679038923"><span class="hs-identifier hs-var">buildList</span></a><span> </span><a href="#local-6989586621679038935"><span class="hs-identifier hs-var">combAp</span></a><span> </span><a href="#local-6989586621679038931"><span class="hs-identifier hs-var">rrows</span></a><span>
437+</span><a name="line-437"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><a href="#local-6989586621679038936"><span class="hs-identifier hs-var">mList</span></a><span>
438+</span><a name="line-438"></a><span> </span><span class="hs-keyword">where</span><span>
439+</span><a name="line-439"></a><span> </span><a name="local-6989586621679038923"><a href="#local-6989586621679038923"><span class="hs-identifier">buildList</span></a></a><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
440+</span><a name="line-440"></a><span> </span><span class="hs-identifier">buildList</span><span> </span><a name="local-6989586621679038924"><a href="#local-6989586621679038924"><span class="hs-identifier">l</span></a></a><span> </span><a name="local-6989586621679038925"><a href="#local-6989586621679038925"><span class="hs-identifier">r</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679038925"><span class="hs-identifier hs-var">r</span></a><span> </span><a href="#local-6989586621679038924"><span class="hs-identifier hs-var">l</span></a><span> </span><span class="hs-glyph">:</span><span> </span><a href="#local-6989586621679038923"><span class="hs-identifier hs-var">buildList</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">drop</span><span> </span><a href="#local-6989586621679038925"><span class="hs-identifier hs-var">r</span></a><span> </span><a href="#local-6989586621679038924"><span class="hs-identifier hs-var">l</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038925"><span class="hs-identifier hs-var">r</span></a><span>
441+</span><a name="line-441"></a><span>
442+</span><a name="line-442"></a><span class="hs-comment">-- Conversion</span><span>
443+</span><a name="line-443"></a><span>
444+</span><a name="line-444"></a><span class="hs-comment">-- | Converts a matrix to a list of lists of elements.</span><span>
445+</span><a name="line-445"></a><span class="hs-identifier">toLists</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038677"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038678"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038679"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-special">[</span><span class="hs-special">[</span><a href="#local-6989586621679038677"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span class="hs-special">]</span><span>
446+</span><a name="line-446"></a><a name="toLists"><a href="Matrix.Internal.html#toLists"><span class="hs-identifier">toLists</span></a></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
447+</span><a name="line-447"></a><span class="hs-identifier">toLists</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038939"><a href="#local-6989586621679038939"><span class="hs-identifier">e</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-special">[</span><a href="#local-6989586621679038939"><span class="hs-identifier hs-var">e</span></a><span class="hs-special">]</span><span class="hs-special">]</span><span>
448+</span><a name="line-448"></a><span class="hs-identifier">toLists</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038940"><a href="#local-6989586621679038940"><span class="hs-identifier">l</span></a></a><span> </span><a name="local-6989586621679038941"><a href="#local-6989586621679038941"><span class="hs-identifier">r</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#toLists"><span class="hs-identifier hs-var">toLists</span></a><span> </span><a href="#local-6989586621679038940"><span class="hs-identifier hs-var">l</span></a><span> </span><span class="hs-operator hs-var">++</span><span> </span><a href="Matrix.Internal.html#toLists"><span class="hs-identifier hs-var">toLists</span></a><span> </span><a href="#local-6989586621679038941"><span class="hs-identifier hs-var">r</span></a><span>
449+</span><a name="line-449"></a><span class="hs-identifier">toLists</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038942"><a href="#local-6989586621679038942"><span class="hs-identifier">l</span></a></a><span> </span><a name="local-6989586621679038943"><a href="#local-6989586621679038943"><span class="hs-identifier">r</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">zipWith</span><span> </span><span class="hs-special">(</span><span class="hs-operator hs-var">++</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#toLists"><span class="hs-identifier hs-var">toLists</span></a><span> </span><a href="#local-6989586621679038942"><span class="hs-identifier hs-var">l</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#toLists"><span class="hs-identifier hs-var">toLists</span></a><span> </span><a href="#local-6989586621679038943"><span class="hs-identifier hs-var">r</span></a><span class="hs-special">)</span><span>
450+</span><a name="line-450"></a><span>
451+</span><a name="line-451"></a><span class="hs-comment">-- | Converts a matrix to a list of elements.</span><span>
452+</span><a name="line-452"></a><span class="hs-identifier">toList</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038674"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038675"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038676"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679038674"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span>
453+</span><a name="line-453"></a><a name="toList"><a href="Matrix.Internal.html#toList"><span class="hs-identifier">toList</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">concat</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#toLists"><span class="hs-identifier hs-var">toLists</span></a><span>
454+</span><a name="line-454"></a><span>
455+</span><a name="line-455"></a><span class="hs-comment">-- Zeros Matrix</span><span>
456+</span><a name="line-456"></a><span>
457+</span><a name="line-457"></a><span class="hs-comment">-- | The zero matrix. A matrix wholly filled with zeros.</span><span>
458+</span><a name="line-458"></a><span class="hs-identifier">zeros</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038671"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038671"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038672"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038673"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038672"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038673"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038671"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038672"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038673"><span class="hs-identifier hs-type">rows</span></a><span>
459+</span><a name="line-459"></a><a name="zeros"><a href="Matrix.Internal.html#zeros"><span class="hs-identifier">zeros</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#matrixBuilder"><span class="hs-identifier hs-var">matrixBuilder</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">const</span><span> </span><span class="hs-number">0</span><span class="hs-special">)</span><span>
460+</span><a name="line-460"></a><span>
461+</span><a name="line-461"></a><span class="hs-comment">-- Ones Matrix</span><span>
462+</span><a name="line-462"></a><span>
463+</span><a name="line-463"></a><span class="hs-comment">-- | The ones matrix. A matrix wholly filled with ones.</span><span>
464+</span><a name="line-464"></a><span class="hs-comment">--</span><span>
465+</span><a name="line-465"></a><span class="hs-comment">-- Also known as T (Top) matrix.</span><span>
466+</span><a name="line-466"></a><span class="hs-identifier">ones</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038668"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038668"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038669"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038670"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038669"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038670"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038668"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038669"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038670"><span class="hs-identifier hs-type">rows</span></a><span>
467+</span><a name="line-467"></a><a name="ones"><a href="Matrix.Internal.html#ones"><span class="hs-identifier">ones</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#matrixBuilder"><span class="hs-identifier hs-var">matrixBuilder</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">const</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span>
468+</span><a name="line-468"></a><span>
469+</span><a name="line-469"></a><span class="hs-comment">-- Const Matrix</span><span>
470+</span><a name="line-470"></a><span>
471+</span><a name="line-471"></a><span class="hs-comment">-- | The constant matrix constructor. A matrix wholly filled with a given</span><span>
472+</span><a name="line-472"></a><span class="hs-comment">-- value.</span><span>
473+</span><a name="line-473"></a><span class="hs-identifier">constant</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038665"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038665"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038666"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038667"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038666"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038667"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="#local-6989586621679038665"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038665"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038666"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038667"><span class="hs-identifier hs-type">rows</span></a><span>
474+</span><a name="line-474"></a><a name="constant"><a href="Matrix.Internal.html#constant"><span class="hs-identifier">constant</span></a></a><span> </span><a name="local-6989586621679038944"><a href="#local-6989586621679038944"><span class="hs-identifier">e</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#matrixBuilder"><span class="hs-identifier hs-var">matrixBuilder</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">const</span><span> </span><a href="#local-6989586621679038944"><span class="hs-identifier hs-var">e</span></a><span class="hs-special">)</span><span>
475+</span><a name="line-475"></a><span>
476+</span><a name="line-476"></a><span class="hs-comment">-- Bang Matrix</span><span>
477+</span><a name="line-477"></a><span>
478+</span><a name="line-478"></a><span class="hs-comment">-- | The T (Top) row vector matrix.</span><span>
479+</span><a name="line-479"></a><span class="hs-identifier">bang</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038663"><a href="#local-6989586621679038663"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038664"><a href="#local-6989586621679038664"><span class="hs-identifier">cols</span></a></a><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038663"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679038663"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038663"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038664"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038664"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038663"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038664"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
480+</span><a name="line-480"></a><a name="bang"><a href="Matrix.Internal.html#bang"><span class="hs-identifier">bang</span></a></a><span> </span><span class="hs-glyph">=</span><span>
481+</span><a name="line-481"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679038945"><a href="#local-6989586621679038945"><span class="hs-identifier">c</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038664"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
482+</span><a name="line-482"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679038945"><span class="hs-identifier hs-var">c</span></a><span> </span><span class="hs-special">[</span><span class="hs-number">1</span><span class="hs-special">,</span><span> </span><span class="hs-number">1</span><span> </span><span class="hs-glyph">..</span><span class="hs-special">]</span><span class="hs-special">]</span><span>
483+</span><a name="line-483"></a><span>
484+</span><a name="line-484"></a><span class="hs-comment">-- Identity Matrix</span><span>
485+</span><a name="line-485"></a><span>
486+</span><a name="line-486"></a><span class="hs-comment">-- | Identity matrix.</span><span>
487+</span><a name="line-487"></a><span class="hs-identifier">identity</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038661"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038661"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038662"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038662"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038662"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038661"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038662"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038662"><span class="hs-identifier hs-type">cols</span></a><span>
488+</span><a name="line-488"></a><a name="identity"><a href="Matrix.Internal.html#identity"><span class="hs-identifier">identity</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#matrixBuilder"><span class="hs-identifier hs-var">matrixBuilder</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">bool</span><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">uncurry</span><span> </span><span class="hs-special">(</span><span class="hs-operator hs-var">==</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
489+</span><a name="line-489"></a><span>
490+</span><a name="line-490"></a><span class="hs-comment">-- Matrix composition (MMM)</span><span>
491+</span><a name="line-491"></a><span>
492+</span><a name="line-492"></a><span class="hs-comment">-- | Matrix composition. Equivalent to matrix-matrix multiplication.</span><span>
493+</span><a name="line-493"></a><span class="hs-comment">--</span><span>
494+</span><a name="line-494"></a><span class="hs-comment">-- This definition takes advantage of divide-and-conquer and fusion laws</span><span>
495+</span><a name="line-495"></a><span class="hs-comment">-- from LAoP.</span><span>
496+</span><a name="line-496"></a><span class="hs-identifier">comp</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038657"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038657"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038658"><span class="hs-identifier hs-type">cr</span></a><span> </span><a href="#local-6989586621679038659"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038657"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038660"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038658"><span class="hs-identifier hs-type">cr</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038657"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038660"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038659"><span class="hs-identifier hs-type">rows</span></a><span>
497+</span><a name="line-497"></a><a name="comp"><a href="Matrix.Internal.html#comp"><span class="hs-identifier">comp</span></a></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
498+</span><a name="line-498"></a><span class="hs-identifier">comp</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038946"><a href="#local-6989586621679038946"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038947"><a href="#local-6989586621679038947"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038946"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="#local-6989586621679038947"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
499+</span><a name="line-499"></a><span class="hs-identifier">comp</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038948"><a href="#local-6989586621679038948"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038949"><a href="#local-6989586621679038949"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038950"><a href="#local-6989586621679038950"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679038951"><a href="#local-6989586621679038951"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><a href="#local-6989586621679038948"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679038950"><span class="hs-identifier hs-var">c</span></a><span> </span><span class="hs-operator hs-var">+</span><span> </span><a href="Matrix.Internal.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><a href="#local-6989586621679038949"><span class="hs-identifier hs-var">b</span></a><span> </span><a href="#local-6989586621679038951"><span class="hs-identifier hs-var">d</span></a><span> </span><span class="hs-comment">-- Divide-and-conquer law</span><span>
500+</span><a name="line-500"></a><span class="hs-identifier">comp</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038952"><a href="#local-6989586621679038952"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038953"><a href="#local-6989586621679038953"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><a name="local-6989586621679038954"><a href="#local-6989586621679038954"><span class="hs-identifier">c</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><a href="#local-6989586621679038952"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679038954"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><a href="#local-6989586621679038953"><span class="hs-identifier hs-var">b</span></a><span> </span><a href="#local-6989586621679038954"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-comment">-- Split fusion law</span><span>
501+</span><a name="line-501"></a><span class="hs-identifier">comp</span><span> </span><a name="local-6989586621679038955"><a href="#local-6989586621679038955"><span class="hs-identifier">c</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038956"><a href="#local-6989586621679038956"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038957"><a href="#local-6989586621679038957"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><a href="#local-6989586621679038955"><span class="hs-identifier hs-var">c</span></a><span> </span><a href="#local-6989586621679038956"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><a href="#local-6989586621679038955"><span class="hs-identifier hs-var">c</span></a><span> </span><a href="#local-6989586621679038957"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-comment">-- Junc fusion law</span><span>
502+</span><a name="line-502"></a><span>
503+</span><a name="line-503"></a><span class="hs-comment">-- Projections</span><span>
504+</span><a name="line-504"></a><span>
505+</span><a name="line-505"></a><span class="hs-comment">-- | Biproduct first component projection</span><span>
506+</span><a name="line-506"></a><span class="hs-identifier">p1</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038654"><a href="#local-6989586621679038654"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038655"><a href="#local-6989586621679038655"><span class="hs-identifier">m</span></a></a><span> </span><a name="local-6989586621679038656"><a href="#local-6989586621679038656"><span class="hs-identifier">n</span></a></a><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038654"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038656"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038655"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038654"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038656"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679038655"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038654"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038655"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038655"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038654"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038655"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038656"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038655"><span class="hs-identifier hs-type">m</span></a><span>
507+</span><a name="line-507"></a><a name="p1"><a href="Matrix.Internal.html#p1"><span class="hs-identifier">p1</span></a></a><span> </span><span class="hs-glyph">=</span><span>
508+</span><a name="line-508"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679038958"><a href="#local-6989586621679038958"><span class="hs-identifier">iden</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#identity"><span class="hs-identifier hs-var">identity</span></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038654"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038655"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038655"><span class="hs-identifier hs-type">m</span></a><span>
509+</span><a name="line-509"></a><span> </span><a name="local-6989586621679038959"><a href="#local-6989586621679038959"><span class="hs-identifier">zero</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#zeros"><span class="hs-identifier hs-var">zeros</span></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038654"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038656"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679038655"><span class="hs-identifier hs-type">m</span></a><span>
510+</span><a name="line-510"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Internal.html#junc"><span class="hs-identifier hs-var">junc</span></a><span> </span><a href="#local-6989586621679038958"><span class="hs-identifier hs-var">iden</span></a><span> </span><a href="#local-6989586621679038959"><span class="hs-identifier hs-var">zero</span></a><span>
511+</span><a name="line-511"></a><span>
512+</span><a name="line-512"></a><span class="hs-comment">-- | Biproduct second component projection</span><span>
513+</span><a name="line-513"></a><span class="hs-identifier">p2</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038651"><a href="#local-6989586621679038651"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038652"><a href="#local-6989586621679038652"><span class="hs-identifier">m</span></a></a><span> </span><a name="local-6989586621679038653"><a href="#local-6989586621679038653"><span class="hs-identifier">n</span></a></a><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038651"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038653"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038652"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038651"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038652"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038653"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038651"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038653"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679038653"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038651"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038652"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038653"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038653"><span class="hs-identifier hs-type">n</span></a><span>
514+</span><a name="line-514"></a><a name="p2"><a href="Matrix.Internal.html#p2"><span class="hs-identifier">p2</span></a></a><span> </span><span class="hs-glyph">=</span><span>
515+</span><a name="line-515"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679038960"><a href="#local-6989586621679038960"><span class="hs-identifier">iden</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#identity"><span class="hs-identifier hs-var">identity</span></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038651"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038653"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679038653"><span class="hs-identifier hs-type">n</span></a><span>
516+</span><a name="line-516"></a><span> </span><a name="local-6989586621679038961"><a href="#local-6989586621679038961"><span class="hs-identifier">zero</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#zeros"><span class="hs-identifier hs-var">zeros</span></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038651"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038652"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038653"><span class="hs-identifier hs-type">n</span></a><span>
517+</span><a name="line-517"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Internal.html#junc"><span class="hs-identifier hs-var">junc</span></a><span> </span><a href="#local-6989586621679038961"><span class="hs-identifier hs-var">zero</span></a><span> </span><a href="#local-6989586621679038960"><span class="hs-identifier hs-var">iden</span></a><span>
518+</span><a name="line-518"></a><span>
519+</span><a name="line-519"></a><span class="hs-comment">-- Injections</span><span>
520+</span><a name="line-520"></a><span>
521+</span><a name="line-521"></a><span class="hs-comment">-- | Biproduct first component injection</span><span>
522+</span><a name="line-522"></a><span class="hs-identifier">i1</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038648"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038649"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038650"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038648"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038649"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679038650"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038648"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038650"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038650"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038648"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038650"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038650"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038649"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span>
523+</span><a name="line-523"></a><a name="i1"><a href="Matrix.Internal.html#i1"><span class="hs-identifier">i1</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="Matrix.Internal.html#p1"><span class="hs-identifier hs-var">p1</span></a><span>
524+</span><a name="line-524"></a><span>
525+</span><a name="line-525"></a><span class="hs-comment">-- | Biproduct second component injection</span><span>
526+</span><a name="line-526"></a><span class="hs-identifier">i2</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038645"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038646"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038647"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038645"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038647"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038646"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038645"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038646"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679038646"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038645"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038646"><span class="hs-identifier hs-type">n</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038647"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038646"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span>
527+</span><a name="line-527"></a><a name="i2"><a href="Matrix.Internal.html#i2"><span class="hs-identifier">i2</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="Matrix.Internal.html#p2"><span class="hs-identifier hs-var">p2</span></a><span>
528+</span><a name="line-528"></a><span>
529+</span><a name="line-529"></a><span class="hs-comment">-- Dimensions</span><span>
530+</span><a name="line-530"></a><span>
531+</span><a name="line-531"></a><span class="hs-comment">-- | Obtain the number of rows.</span><span>
532+</span><a name="line-532"></a><span class="hs-comment">--</span><span>
533+</span><a name="line-533"></a><span class="hs-comment">-- NOTE: The 'KnownNat' constaint is needed in order to obtain the</span><span>
534+</span><a name="line-534"></a><span class="hs-comment">-- dimensions in constant time.</span><span>
535+</span><a name="line-535"></a><span class="hs-comment">--</span><span>
536+</span><a name="line-536"></a><span class="hs-comment">-- TODO: A 'rows' function that does not need the 'KnownNat' constraint in</span><span>
537+</span><a name="line-537"></a><span class="hs-comment">-- exchange for performance.</span><span>
538+</span><a name="line-538"></a><span class="hs-identifier">rows</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038642"><a href="#local-6989586621679038642"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038643"><a href="#local-6989586621679038643"><span class="hs-identifier">cols</span></a></a><span> </span><a name="local-6989586621679038644"><a href="#local-6989586621679038644"><span class="hs-identifier">rows</span></a></a><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038644"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038642"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038643"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038644"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-identifier hs-type">Int</span><span>
539+</span><a name="line-539"></a><a name="rows"><a href="Matrix.Internal.html#rows"><span class="hs-identifier">rows</span></a></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038644"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
540+</span><a name="line-540"></a><span>
541+</span><a name="line-541"></a><span class="hs-comment">-- | Obtain the number of columns.</span><span>
542+</span><a name="line-542"></a><span class="hs-comment">-- </span><span>
543+</span><a name="line-543"></a><span class="hs-comment">-- NOTE: The 'KnownNat' constaint is needed in order to obtain the</span><span>
544+</span><a name="line-544"></a><span class="hs-comment">-- dimensions in constant time.</span><span>
545+</span><a name="line-545"></a><span class="hs-comment">--</span><span>
546+</span><a name="line-546"></a><span class="hs-comment">-- TODO: A 'columns' function that does not need the 'KnownNat' constraint in</span><span>
547+</span><a name="line-547"></a><span class="hs-comment">-- exchange for performance.</span><span>
548+</span><a name="line-548"></a><span class="hs-identifier">columns</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038639"><a href="#local-6989586621679038639"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038640"><a href="#local-6989586621679038640"><span class="hs-identifier">cols</span></a></a><span> </span><a name="local-6989586621679038641"><a href="#local-6989586621679038641"><span class="hs-identifier">rows</span></a></a><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038640"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038639"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038640"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038641"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-identifier hs-type">Int</span><span>
549+</span><a name="line-549"></a><a name="columns"><a href="Matrix.Internal.html#columns"><span class="hs-identifier">columns</span></a></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038640"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
550+</span><a name="line-550"></a><span>
551+</span><a name="line-551"></a><span class="hs-comment">-- Coproduct Bifunctor</span><span>
552+</span><a name="line-552"></a><span>
553+</span><a name="line-553"></a><span class="hs-keyword">infixl</span><span> </span><span class="hs-number">5</span><span> </span><a href="Matrix.Internal.html#-%7C-"><span class="hs-operator hs-var">-|-</span></a><span>
554+</span><a name="line-554"></a><span>
555+</span><a name="line-555"></a><span class="hs-comment">-- | Matrix coproduct functor also known as matrix direct sum.</span><span>
556+</span><a name="line-556"></a><span class="hs-special">(</span><span class="hs-operator">-|-</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span>
557+</span><a name="line-557"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038634"><a href="#local-6989586621679038634"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038635"><a href="#local-6989586621679038635"><span class="hs-identifier">n</span></a></a><span> </span><a name="local-6989586621679038636"><a href="#local-6989586621679038636"><span class="hs-identifier">k</span></a></a><span> </span><a name="local-6989586621679038637"><a href="#local-6989586621679038637"><span class="hs-identifier">m</span></a></a><span> </span><a name="local-6989586621679038638"><a href="#local-6989586621679038638"><span class="hs-identifier">j</span></a></a><span class="hs-operator">.</span><span>
558+</span><a name="line-558"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038634"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
559+</span><a name="line-559"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038638"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
560+</span><a name="line-560"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038636"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
561+</span><a name="line-561"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038634"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038636"><span class="hs-identifier hs-type">k</span></a><span> </span><a href="#local-6989586621679038636"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">,</span><span>
562+</span><a name="line-562"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038634"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038638"><span class="hs-identifier hs-type">j</span></a><span> </span><a href="#local-6989586621679038636"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">,</span><span>
563+</span><a name="line-563"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038634"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038636"><span class="hs-identifier hs-type">k</span></a><span> </span><a href="#local-6989586621679038638"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">,</span><span>
564+</span><a name="line-564"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038634"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038638"><span class="hs-identifier hs-type">j</span></a><span> </span><a href="#local-6989586621679038638"><span class="hs-identifier hs-type">j</span></a><span>
565+</span><a name="line-565"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span>
566+</span><a name="line-566"></a><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038634"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038635"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679038636"><span class="hs-identifier hs-type">k</span></a><span> </span><span class="hs-glyph">-></span><span>
567+</span><a name="line-567"></a><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038634"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038637"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038638"><span class="hs-identifier hs-type">j</span></a><span> </span><span class="hs-glyph">-></span><span>
568+</span><a name="line-568"></a><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038634"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038635"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679038637"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038636"><span class="hs-identifier hs-type">k</span></a><span> </span><a href="#local-6989586621679038638"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span>
569+</span><a name="line-569"></a><span class="hs-special">(</span><a name="-%7C-"><a href="Matrix.Internal.html#-%7C-"><span class="hs-operator">-|-</span></a></a><span class="hs-special">)</span><span> </span><a name="local-6989586621679038962"><a href="#local-6989586621679038962"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038963"><a href="#local-6989586621679038963"><span class="hs-identifier">b</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#i1"><span class="hs-identifier hs-var">i1</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="#local-6989586621679038962"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#i2"><span class="hs-identifier hs-var">i2</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="#local-6989586621679038963"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
570+</span><a name="line-570"></a><span>
571+</span><a name="line-571"></a><span class="hs-comment">-- Khatri Rao Product and projections</span><span>
572+</span><a name="line-572"></a><span>
573+</span><a name="line-573"></a><span class="hs-comment">-- | Khatri Rao product first component projection matrix.</span><span>
574+</span><a name="line-574"></a><span class="hs-identifier">kp1</span><span> </span><span class="hs-glyph">::</span><span>
575+</span><a name="line-575"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038631"><a href="#local-6989586621679038631"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038632"><a href="#local-6989586621679038632"><span class="hs-identifier">m</span></a></a><span> </span><a name="local-6989586621679038633"><a href="#local-6989586621679038633"><span class="hs-identifier">k</span></a></a><span> </span><span class="hs-operator">.</span><span>
576+</span><a name="line-576"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038631"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
577+</span><a name="line-577"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038633"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
578+</span><a name="line-578"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038631"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Count</span><span> </span><a href="#local-6989586621679038632"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-operator">*</span><span> </span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038633"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038632"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span>
579+</span><a name="line-579"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038632"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
580+</span><a name="line-580"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038632"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038633"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
581+</span><a name="line-581"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038631"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038632"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038633"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038632"><span class="hs-identifier hs-type">m</span></a><span>
582+</span><a name="line-582"></a><a name="kp1"><a href="Matrix.Internal.html#kp1"><span class="hs-identifier">kp1</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#matrixBuilder"><span class="hs-identifier hs-var">matrixBuilder</span></a><span> </span><a href="#local-6989586621679038965"><span class="hs-identifier hs-var">f</span></a><span>
583+</span><a name="line-583"></a><span> </span><span class="hs-keyword">where</span><span>
584+</span><a name="line-584"></a><span> </span><a name="local-6989586621679038964"><a href="#local-6989586621679038964"><span class="hs-identifier">offset</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038633"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
585+</span><a name="line-585"></a><span> </span><a name="local-6989586621679038965"><a href="#local-6989586621679038965"><span class="hs-identifier">f</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679038966"><a href="#local-6989586621679038966"><span class="hs-identifier">x</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679038967"><a href="#local-6989586621679038967"><span class="hs-identifier">y</span></a></a><span class="hs-special">)</span><span>
586+</span><a name="line-586"></a><span> </span><span class="hs-glyph">|</span><span> </span><a href="#local-6989586621679038967"><span class="hs-identifier hs-var">y</span></a><span> </span><span class="hs-operator hs-var">>=</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038966"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="#local-6989586621679038964"><span class="hs-identifier hs-var">offset</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">&&</span><span> </span><a href="#local-6989586621679038967"><span class="hs-identifier hs-var">y</span></a><span> </span><span class="hs-operator hs-var"><=</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038966"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="#local-6989586621679038964"><span class="hs-identifier hs-var">offset</span></a><span> </span><span class="hs-operator hs-var">+</span><span> </span><a href="#local-6989586621679038964"><span class="hs-identifier hs-var">offset</span></a><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-number">1</span><span>
587+</span><a name="line-587"></a><span> </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">otherwise</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-number">0</span><span>
588+</span><a name="line-588"></a><span>
589+</span><a name="line-589"></a><span class="hs-comment">-- | Khatri Rao product second component projection matrix.</span><span>
590+</span><a name="line-590"></a><span class="hs-identifier">kp2</span><span> </span><span class="hs-glyph">::</span><span>
591+</span><a name="line-591"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038628"><a href="#local-6989586621679038628"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038629"><a href="#local-6989586621679038629"><span class="hs-identifier">m</span></a></a><span> </span><a name="local-6989586621679038630"><a href="#local-6989586621679038630"><span class="hs-identifier">k</span></a></a><span> </span><span class="hs-operator">.</span><span>
592+</span><a name="line-592"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038628"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
593+</span><a name="line-593"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038630"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
594+</span><a name="line-594"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038628"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Count</span><span> </span><a href="#local-6989586621679038629"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-operator">*</span><span> </span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038630"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038630"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">,</span><span>
595+</span><a name="line-595"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038629"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
596+</span><a name="line-596"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038629"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038630"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
597+</span><a name="line-597"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038628"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038629"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038630"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038630"><span class="hs-identifier hs-type">k</span></a><span>
598+</span><a name="line-598"></a><a name="kp2"><a href="Matrix.Internal.html#kp2"><span class="hs-identifier">kp2</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#matrixBuilder"><span class="hs-identifier hs-var">matrixBuilder</span></a><span> </span><a href="#local-6989586621679038969"><span class="hs-identifier hs-var">f</span></a><span>
599+</span><a name="line-599"></a><span> </span><span class="hs-keyword">where</span><span>
600+</span><a name="line-600"></a><span> </span><a name="local-6989586621679038968"><a href="#local-6989586621679038968"><span class="hs-identifier">offset</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038630"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
601+</span><a name="line-601"></a><span> </span><a name="local-6989586621679038969"><a href="#local-6989586621679038969"><span class="hs-identifier">f</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679038970"><a href="#local-6989586621679038970"><span class="hs-identifier">x</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679038971"><a href="#local-6989586621679038971"><span class="hs-identifier">y</span></a></a><span class="hs-special">)</span><span>
602+</span><a name="line-602"></a><span> </span><span class="hs-glyph">|</span><span> </span><a href="#local-6989586621679038970"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><a href="#local-6989586621679038971"><span class="hs-identifier hs-var">y</span></a><span> </span><span class="hs-operator hs-var">||</span><span> </span><span class="hs-identifier hs-var">mod</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038971"><span class="hs-identifier hs-var">y</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679038970"><span class="hs-identifier hs-var">x</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038968"><span class="hs-identifier hs-var">offset</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><span class="hs-number">0</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-number">1</span><span>
603+</span><a name="line-603"></a><span> </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier hs-var">otherwise</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-number">0</span><span>
604+</span><a name="line-604"></a><span>
605+</span><a name="line-605"></a><span class="hs-comment">-- | Khatri Rao Matrix product also known as matrix pairing.</span><span>
606+</span><a name="line-606"></a><span class="hs-comment">--</span><span>
607+</span><a name="line-607"></a><span class="hs-comment">-- NOTE: That this is not a true categorical product, see for instance:</span><span>
608+</span><a name="line-608"></a><span class="hs-comment">-- </span><span>
609+</span><a name="line-609"></a><span class="hs-comment">-- @</span><span>
610+</span><a name="line-610"></a><span class="hs-comment">-- | kp1 . khatri a b == a </span><span>
611+</span><a name="line-611"></a><span class="hs-comment">-- khatri a b ==> |</span><span>
612+</span><a name="line-612"></a><span class="hs-comment">-- | kp2 . khatri a b == b</span><span>
613+</span><a name="line-613"></a><span class="hs-comment">-- @</span><span>
614+</span><a name="line-614"></a><span class="hs-comment">--</span><span>
615+</span><a name="line-615"></a><span class="hs-comment">-- __Emphasis__ on the implication symbol.</span><span>
616+</span><a name="line-616"></a><span class="hs-identifier">khatri</span><span> </span><span class="hs-glyph">::</span><span>
617+</span><a name="line-617"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038624"><a href="#local-6989586621679038624"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038625"><a href="#local-6989586621679038625"><span class="hs-identifier">cols</span></a></a><span> </span><a name="local-6989586621679038626"><a href="#local-6989586621679038626"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038627"><a href="#local-6989586621679038627"><span class="hs-identifier">b</span></a></a><span class="hs-operator">.</span><span>
618+</span><a name="line-618"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038624"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
619+</span><a name="line-619"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038626"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
620+</span><a name="line-620"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038627"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
621+</span><a name="line-621"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038626"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038627"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
622+</span><a name="line-622"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038624"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038626"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038627"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038626"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
623+</span><a name="line-623"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038624"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038626"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038627"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038627"><span class="hs-identifier hs-type">b</span></a><span>
624+</span><a name="line-624"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038624"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038625"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038626"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038624"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038625"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038627"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038624"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038625"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038626"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038627"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
625+</span><a name="line-625"></a><a name="khatri"><a href="Matrix.Internal.html#khatri"><span class="hs-identifier">khatri</span></a></a><span> </span><a name="local-6989586621679038972"><a href="#local-6989586621679038972"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038973"><a href="#local-6989586621679038973"><span class="hs-identifier">b</span></a></a><span> </span><span class="hs-glyph">=</span><span>
626+</span><a name="line-626"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679038974"><a href="#local-6989586621679038974"><span class="hs-identifier">kp1'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#kp1"><span class="hs-identifier hs-var">kp1</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038624"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038626"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038627"><span class="hs-identifier hs-type">b</span></a><span>
627+</span><a name="line-627"></a><span> </span><a name="local-6989586621679038975"><a href="#local-6989586621679038975"><span class="hs-identifier">kp2'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#kp2"><span class="hs-identifier hs-var">kp2</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038624"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038626"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038627"><span class="hs-identifier hs-type">b</span></a><span>
628+</span><a name="line-628"></a><span> </span><span class="hs-keyword">in</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="#local-6989586621679038974"><span class="hs-identifier hs-var">kp1'</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="#local-6989586621679038972"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="#local-6989586621679038975"><span class="hs-identifier hs-var">kp2'</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="#local-6989586621679038973"><span class="hs-identifier hs-var">b</span></a><span>
629+</span><a name="line-629"></a><span>
630+</span><a name="line-630"></a><span class="hs-comment">-- Product Bifunctor (Kronecker)</span><span>
631+</span><a name="line-631"></a><span>
632+</span><a name="line-632"></a><span class="hs-keyword">infixl</span><span> </span><span class="hs-number">4</span><span> </span><a href="Matrix.Internal.html#%3E%3C"><span class="hs-operator hs-var">><</span></a><span>
633+</span><a name="line-633"></a><span>
634+</span><a name="line-634"></a><span class="hs-comment">-- | Matrix product functor also known as kronecker product</span><span>
635+</span><a name="line-635"></a><span class="hs-special">(</span><span class="hs-operator">><</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span>
636+</span><a name="line-636"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038619"><a href="#local-6989586621679038619"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038620"><a href="#local-6989586621679038620"><span class="hs-identifier">m</span></a></a><span> </span><a name="local-6989586621679038621"><a href="#local-6989586621679038621"><span class="hs-identifier">p</span></a></a><span> </span><a name="local-6989586621679038622"><a href="#local-6989586621679038622"><span class="hs-identifier">n</span></a></a><span> </span><a name="local-6989586621679038623"><a href="#local-6989586621679038623"><span class="hs-identifier">q</span></a></a><span class="hs-operator">.</span><span>
637+</span><a name="line-637"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038619"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
638+</span><a name="line-638"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038620"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
639+</span><a name="line-639"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038622"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
640+</span><a name="line-640"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038621"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
641+</span><a name="line-641"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038623"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
642+</span><a name="line-642"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038620"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038622"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
643+</span><a name="line-643"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038619"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038620"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038622"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038620"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span>
644+</span><a name="line-644"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038619"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038620"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038622"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038622"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">,</span><span>
645+</span><a name="line-645"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038621"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038623"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
646+</span><a name="line-646"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038619"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038621"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038623"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038621"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">,</span><span>
647+</span><a name="line-647"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038619"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038621"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038623"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038623"><span class="hs-identifier hs-type">q</span></a><span>
648+</span><a name="line-648"></a><span> </span><span class="hs-special">)</span><span>
649+</span><a name="line-649"></a><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038619"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038620"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679038621"><span class="hs-identifier hs-type">p</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038619"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038622"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679038623"><span class="hs-identifier hs-type">q</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038619"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038620"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038622"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038621"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679038623"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
650+</span><a name="line-650"></a><span class="hs-special">(</span><a name="%3E%3C"><a href="Matrix.Internal.html#%3E%3C"><span class="hs-operator">><</span></a></a><span class="hs-special">)</span><span> </span><a name="local-6989586621679038976"><a href="#local-6989586621679038976"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038977"><a href="#local-6989586621679038977"><span class="hs-identifier">b</span></a></a><span> </span><span class="hs-glyph">=</span><span>
651+</span><a name="line-651"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679038978"><a href="#local-6989586621679038978"><span class="hs-identifier">kp1'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#kp1"><span class="hs-identifier hs-var">kp1</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038619"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038620"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038622"><span class="hs-identifier hs-type">n</span></a><span>
652+</span><a name="line-652"></a><span> </span><a name="local-6989586621679038979"><a href="#local-6989586621679038979"><span class="hs-identifier">kp2'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#kp2"><span class="hs-identifier hs-var">kp2</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038619"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038620"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038622"><span class="hs-identifier hs-type">n</span></a><span>
653+</span><a name="line-653"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Internal.html#khatri"><span class="hs-identifier hs-var">khatri</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038976"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="#local-6989586621679038978"><span class="hs-identifier hs-var">kp1'</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038977"><span class="hs-identifier hs-var">b</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="#local-6989586621679038979"><span class="hs-identifier hs-var">kp2'</span></a><span class="hs-special">)</span><span>
654+</span><a name="line-654"></a><span>
655+</span><a name="line-655"></a><span class="hs-comment">-- Matrix abide Junc Split</span><span>
656+</span><a name="line-656"></a><span>
657+</span><a name="line-657"></a><span class="hs-comment">-- | Matrix "abiding" followin the 'Junc'-'Split' abide law.</span><span>
658+</span><a name="line-658"></a><span class="hs-comment">-- </span><span>
659+</span><a name="line-659"></a><span class="hs-comment">-- Law:</span><span>
660+</span><a name="line-660"></a><span class="hs-comment">--</span><span>
661+</span><a name="line-661"></a><span class="hs-comment">-- @</span><span>
662+</span><a name="line-662"></a><span class="hs-comment">-- 'Junc' ('Split' a c) ('Split' b d) == 'Split' ('Junc' a b) ('Junc' c d)</span><span>
663+</span><a name="line-663"></a><span class="hs-comment">-- @</span><span>
664+</span><a name="line-664"></a><span class="hs-identifier">abideJS</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038616"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038617"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038618"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038616"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038617"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038618"><span class="hs-identifier hs-type">rows</span></a><span>
665+</span><a name="line-665"></a><a name="abideJS"><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier">abideJS</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038980"><a href="#local-6989586621679038980"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038981"><a href="#local-6989586621679038981"><span class="hs-identifier">c</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038982"><a href="#local-6989586621679038982"><span class="hs-identifier">b</span></a></a><span> </span><a name="local-6989586621679038983"><a href="#local-6989586621679038983"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038980"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038982"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038981"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038983"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-comment">-- Junc-Split abide law</span><span>
666+</span><a name="line-666"></a><span class="hs-identifier">abideJS</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
667+</span><a name="line-667"></a><span class="hs-identifier">abideJS</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038984"><a href="#local-6989586621679038984"><span class="hs-identifier">e</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a href="#local-6989586621679038984"><span class="hs-identifier hs-var">e</span></a><span>
668+</span><a name="line-668"></a><span class="hs-identifier">abideJS</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038985"><a href="#local-6989586621679038985"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038986"><a href="#local-6989586621679038986"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038985"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038986"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
669+</span><a name="line-669"></a><span class="hs-identifier">abideJS</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038987"><a href="#local-6989586621679038987"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038988"><a href="#local-6989586621679038988"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038987"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679038988"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
670+</span><a name="line-670"></a><span>
671+</span><a name="line-671"></a><span class="hs-comment">-- Matrix abide Split Junc</span><span>
672+</span><a name="line-672"></a><span>
673+</span><a name="line-673"></a><span class="hs-comment">-- | Matrix "abiding" followin the 'Split'-'Junc' abide law.</span><span>
674+</span><a name="line-674"></a><span class="hs-comment">-- </span><span>
675+</span><a name="line-675"></a><span class="hs-comment">-- @</span><span>
676+</span><a name="line-676"></a><span class="hs-comment">-- 'Split' ('Junc' a b) ('Junc' c d) == 'Junc' ('Split' a c) ('Split' b d)</span><span>
677+</span><a name="line-677"></a><span class="hs-comment">-- @</span><span>
678+</span><a name="line-678"></a><span class="hs-identifier">abideSJ</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038613"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038614"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038615"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038613"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038614"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038615"><span class="hs-identifier hs-type">rows</span></a><span>
679+</span><a name="line-679"></a><a name="abideSJ"><a href="Matrix.Internal.html#abideSJ"><span class="hs-identifier">abideSJ</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038989"><a href="#local-6989586621679038989"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038990"><a href="#local-6989586621679038990"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038991"><a href="#local-6989586621679038991"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679038992"><a href="#local-6989586621679038992"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideSJ"><span class="hs-identifier hs-var">abideSJ</span></a><span> </span><a href="#local-6989586621679038989"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideSJ"><span class="hs-identifier hs-var">abideSJ</span></a><span> </span><a href="#local-6989586621679038991"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideSJ"><span class="hs-identifier hs-var">abideSJ</span></a><span> </span><a href="#local-6989586621679038990"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideSJ"><span class="hs-identifier hs-var">abideSJ</span></a><span> </span><a href="#local-6989586621679038992"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-comment">-- Split-Junc abide law</span><span>
680+</span><a name="line-680"></a><span class="hs-identifier">abideSJ</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
681+</span><a name="line-681"></a><span class="hs-identifier">abideSJ</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038993"><a href="#local-6989586621679038993"><span class="hs-identifier">e</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a href="#local-6989586621679038993"><span class="hs-identifier hs-var">e</span></a><span>
682+</span><a name="line-682"></a><span class="hs-identifier">abideSJ</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038994"><a href="#local-6989586621679038994"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038995"><a href="#local-6989586621679038995"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideSJ"><span class="hs-identifier hs-var">abideSJ</span></a><span> </span><a href="#local-6989586621679038994"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideSJ"><span class="hs-identifier hs-var">abideSJ</span></a><span> </span><a href="#local-6989586621679038995"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
683+</span><a name="line-683"></a><span class="hs-identifier">abideSJ</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679038996"><a href="#local-6989586621679038996"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038997"><a href="#local-6989586621679038997"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideSJ"><span class="hs-identifier hs-var">abideSJ</span></a><span> </span><a href="#local-6989586621679038996"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideSJ"><span class="hs-identifier hs-var">abideSJ</span></a><span> </span><a href="#local-6989586621679038997"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
684+</span><a name="line-684"></a><span>
685+</span><a name="line-685"></a><span class="hs-comment">-- Matrix transposition</span><span>
686+</span><a name="line-686"></a><span>
687+</span><a name="line-687"></a><span class="hs-comment">-- | Matrix transposition.</span><span>
688+</span><a name="line-688"></a><span class="hs-identifier">tr</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038610"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038611"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038612"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038610"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038612"><span class="hs-identifier hs-type">rows</span></a><span> </span><a href="#local-6989586621679038611"><span class="hs-identifier hs-type">cols</span></a><span>
689+</span><a name="line-689"></a><a name="tr"><a href="Matrix.Internal.html#tr"><span class="hs-identifier">tr</span></a></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
690+</span><a name="line-690"></a><span class="hs-identifier">tr</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679038998"><a href="#local-6989586621679038998"><span class="hs-identifier">e</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a href="#local-6989586621679038998"><span class="hs-identifier hs-var">e</span></a><span>
691+</span><a name="line-691"></a><span class="hs-identifier">tr</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679038999"><a href="#local-6989586621679038999"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679039000"><a href="#local-6989586621679039000"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="#local-6989586621679038999"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="#local-6989586621679039000"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
692+</span><a name="line-692"></a><span class="hs-identifier">tr</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679039001"><a href="#local-6989586621679039001"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679039002"><a href="#local-6989586621679039002"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="#local-6989586621679039001"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="#local-6989586621679039002"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
693+</span><a name="line-693"></a><span>
694+</span><a name="line-694"></a><span class="hs-comment">-- Selective 'select' operator</span><span>
695+</span><a name="line-695"></a><span>
696+</span><a name="line-696"></a><span class="hs-comment">-- | Selective functors 'select' operator equivalent inspired by the</span><span>
697+</span><a name="line-697"></a><span class="hs-comment">-- ArrowMonad solution presented in the paper.</span><span>
698+</span><a name="line-698"></a><span class="hs-identifier">select</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038606"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038606"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038607"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679038607"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038607"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038606"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038608"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038609"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038607"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038606"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038609"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679038607"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038606"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038608"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038607"><span class="hs-identifier hs-type">b</span></a><span>
699+</span><a name="line-699"></a><a name="select"><a href="Matrix.Internal.html#select"><span class="hs-identifier">select</span></a></a><span> </span><a name="local-6989586621679039003"><a href="#local-6989586621679039003"><span class="hs-identifier">m</span></a></a><span> </span><a name="local-6989586621679039004"><a href="#local-6989586621679039004"><span class="hs-identifier">y</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#junc"><span class="hs-identifier hs-var">junc</span></a><span> </span><a href="#local-6989586621679039004"><span class="hs-identifier hs-var">y</span></a><span> </span><a href="Matrix.Internal.html#identity"><span class="hs-identifier hs-var">identity</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="#local-6989586621679039003"><span class="hs-identifier hs-var">m</span></a><span>
700+</span><a name="line-700"></a><span>
701+</span><a name="line-701"></a><span class="hs-comment">-- McCarthy's Conditional</span><span>
702+</span><a name="line-702"></a><span>
703+</span><a name="line-703"></a><span class="hs-comment">-- | McCarthy's Conditional expresses probabilistic choice.</span><span>
704+</span><a name="line-704"></a><span class="hs-identifier">cond</span><span> </span><span class="hs-glyph">::</span><span>
705+</span><a name="line-705"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">cols</span><span> </span><span class="hs-glyph">~</span><span> </span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">FromNat</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038602"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
706+</span><a name="line-706"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038602"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
707+</span><a name="line-707"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038603"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038602"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">,</span><span>
708+</span><a name="line-708"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038603"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038602"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
709+</span><a name="line-709"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038603"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038602"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038602"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">,</span><span>
710+</span><a name="line-710"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679038604"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
711+</span><a name="line-711"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679038604"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
712+</span><a name="line-712"></a><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038603"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
713+</span><a name="line-713"></a><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><a href="#local-6989586621679038603"><span class="hs-identifier hs-type">e</span></a><span>
714+</span><a name="line-714"></a><span> </span><span class="hs-special">)</span><span>
715+</span><a name="line-715"></a><span> </span><span class="hs-glyph">=></span><span>
716+</span><a name="line-716"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038604"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-identifier hs-type">Bool</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038603"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038602"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038605"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038603"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038602"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038605"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038603"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038602"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038605"><span class="hs-identifier hs-type">rows</span></a><span>
717+</span><a name="line-717"></a><a name="cond"><a href="Matrix.Internal.html#cond"><span class="hs-identifier">cond</span></a></a><span> </span><a name="local-6989586621679039005"><a href="#local-6989586621679039005"><span class="hs-identifier">p</span></a></a><span> </span><a name="local-6989586621679039006"><a href="#local-6989586621679039006"><span class="hs-identifier">f</span></a></a><span> </span><a name="local-6989586621679039007"><a href="#local-6989586621679039007"><span class="hs-identifier">g</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#junc"><span class="hs-identifier hs-var">junc</span></a><span> </span><a href="#local-6989586621679039006"><span class="hs-identifier hs-var">f</span></a><span> </span><a href="#local-6989586621679039007"><span class="hs-identifier hs-var">g</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#grd"><span class="hs-identifier hs-var">grd</span></a><span> </span><a href="#local-6989586621679039005"><span class="hs-identifier hs-var">p</span></a><span>
718+</span><a name="line-718"></a><span>
719+</span><a name="line-719"></a><span class="hs-identifier">grd</span><span> </span><span class="hs-glyph">::</span><span>
720+</span><a name="line-720"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">q</span><span> </span><span class="hs-glyph">~</span><span> </span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">FromNat</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038599"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
721+</span><a name="line-721"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038599"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
722+</span><a name="line-722"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038600"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038599"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">,</span><span>
723+</span><a name="line-723"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038600"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038599"><span class="hs-identifier hs-type">q</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
724+</span><a name="line-724"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038600"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038599"><span class="hs-identifier hs-type">q</span></a><span> </span><a href="#local-6989586621679038599"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">,</span><span>
725+</span><a name="line-725"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679038601"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
726+</span><a name="line-726"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679038601"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
727+</span><a name="line-727"></a><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038600"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
728+</span><a name="line-728"></a><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><a href="#local-6989586621679038600"><span class="hs-identifier hs-type">e</span></a><span>
729+</span><a name="line-729"></a><span> </span><span class="hs-special">)</span><span>
730+</span><a name="line-730"></a><span> </span><span class="hs-glyph">=></span><span>
731+</span><a name="line-731"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038601"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-identifier hs-type">Bool</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038600"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038599"><span class="hs-identifier hs-type">q</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679038599"><span class="hs-identifier hs-type">q</span></a><span> </span><a href="#local-6989586621679038599"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span>
732+</span><a name="line-732"></a><a name="grd"><a href="Matrix.Internal.html#grd"><span class="hs-identifier">grd</span></a></a><span> </span><a name="local-6989586621679039008"><a href="#local-6989586621679039008"><span class="hs-identifier">f</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#split"><span class="hs-identifier hs-var">split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#corr"><span class="hs-identifier hs-var">corr</span></a><span> </span><a href="#local-6989586621679039008"><span class="hs-identifier hs-var">f</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#corr"><span class="hs-identifier hs-var">corr</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">not</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="#local-6989586621679039008"><span class="hs-identifier hs-var">f</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
733+</span><a name="line-733"></a><span>
734+</span><a name="line-734"></a><span class="hs-identifier">corr</span><span> </span><span class="hs-glyph">::</span><span>
735+</span><a name="line-735"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038596"><a href="#local-6989586621679038596"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679038597"><a href="#local-6989586621679038597"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038598"><a href="#local-6989586621679038598"><span class="hs-identifier">q</span></a></a><span> </span><span class="hs-operator">.</span><span>
736+</span><a name="line-736"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">q</span><span> </span><span class="hs-glyph">~</span><span> </span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">FromNat</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038598"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
737+</span><a name="line-737"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038598"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
738+</span><a name="line-738"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038596"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038598"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">,</span><span>
739+</span><a name="line-739"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038596"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038598"><span class="hs-identifier hs-type">q</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
740+</span><a name="line-740"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="#local-6989586621679038596"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038598"><span class="hs-identifier hs-type">q</span></a><span> </span><a href="#local-6989586621679038598"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">,</span><span>
741+</span><a name="line-741"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679038597"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
742+</span><a name="line-742"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679038597"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
743+</span><a name="line-743"></a><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038596"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
744+</span><a name="line-744"></a><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><a href="#local-6989586621679038596"><span class="hs-identifier hs-type">e</span></a><span>
745+</span><a name="line-745"></a><span> </span><span class="hs-special">)</span><span>
746+</span><a name="line-746"></a><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038597"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-identifier hs-type">Bool</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038596"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038598"><span class="hs-identifier hs-type">q</span></a><span> </span><a href="#local-6989586621679038598"><span class="hs-identifier hs-type">q</span></a><span>
747+</span><a name="line-747"></a><a name="corr"><a href="Matrix.Internal.html#corr"><span class="hs-identifier">corr</span></a></a><span> </span><a name="local-6989586621679039009"><a href="#local-6989586621679039009"><span class="hs-identifier">p</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679039010"><a href="#local-6989586621679039010"><span class="hs-identifier">f</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#fromF"><span class="hs-identifier hs-var">fromF</span></a><span> </span><a href="#local-6989586621679039009"><span class="hs-identifier hs-var">p</span></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038596"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038598"><span class="hs-identifier hs-type">q</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
748+</span><a name="line-748"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Internal.html#khatri"><span class="hs-identifier hs-var">khatri</span></a><span> </span><a href="#local-6989586621679039010"><span class="hs-identifier hs-var">f</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#identity"><span class="hs-identifier hs-var">identity</span></a><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038596"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038598"><span class="hs-identifier hs-type">q</span></a><span> </span><a href="#local-6989586621679038598"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span>
749+</span><a name="line-749"></a><span>
750+</span><a name="line-750"></a><span class="hs-comment">-- Pretty print</span><span>
751+</span><a name="line-751"></a><span>
752+</span><a name="line-752"></a><span class="hs-identifier">prettyAux</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Show</span><span> </span><a href="#local-6989586621679038595"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">=></span><span> </span><span class="hs-special">[</span><span class="hs-special">[</span><a href="#local-6989586621679038595"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-special">[</span><span class="hs-special">[</span><a href="#local-6989586621679038595"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-identifier hs-type">String</span><span>
753+</span><a name="line-753"></a><a name="prettyAux"><a href="Matrix.Internal.html#prettyAux"><span class="hs-identifier">prettyAux</span></a></a><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-string">""</span><span>
754+</span><a name="line-754"></a><span class="hs-identifier">prettyAux</span><span> </span><span class="hs-special">[</span><span class="hs-special">[</span><a name="local-6989586621679039011"><a href="#local-6989586621679039011"><span class="hs-identifier">e</span></a></a><span class="hs-special">]</span><span class="hs-special">]</span><span> </span><a name="local-6989586621679039012"><a href="#local-6989586621679039012"><span class="hs-identifier">m</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-string">"│ "</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><a href="#local-6989586621679039015"><span class="hs-identifier hs-var">fill</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">show</span><span> </span><a href="#local-6989586621679039011"><span class="hs-identifier hs-var">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-string">" │\n"</span><span>
755+</span><a name="line-755"></a><span> </span><span class="hs-keyword">where</span><span>
756+</span><a name="line-756"></a><span> </span><a name="local-6989586621679039013"><a href="#local-6989586621679039013"><span class="hs-identifier">v</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fmap</span><span> </span><span class="hs-identifier hs-var">show</span><span> </span><a href="#local-6989586621679039012"><span class="hs-identifier hs-var">m</span></a><span>
757+</span><a name="line-757"></a><span> </span><a name="local-6989586621679039014"><a href="#local-6989586621679039014"><span class="hs-identifier">widest</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">maximum</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">fmap</span><span> </span><span class="hs-identifier hs-var">length</span><span> </span><a href="#local-6989586621679039013"><span class="hs-identifier hs-var">v</span></a><span>
758+</span><a name="line-758"></a><span> </span><a name="local-6989586621679039015"><a href="#local-6989586621679039015"><span class="hs-identifier">fill</span></a></a><span> </span><a name="local-6989586621679039016"><a href="#local-6989586621679039016"><span class="hs-identifier">str</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">replicate</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039014"><span class="hs-identifier hs-var">widest</span></a><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-identifier hs-var">length</span><span> </span><a href="#local-6989586621679039016"><span class="hs-identifier hs-var">str</span></a><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-number">2</span><span class="hs-special">)</span><span> </span><span class="hs-char">' '</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><a href="#local-6989586621679039016"><span class="hs-identifier hs-var">str</span></a><span>
759+</span><a name="line-759"></a><span class="hs-identifier">prettyAux</span><span> </span><span class="hs-special">[</span><a name="local-6989586621679039017"><a href="#local-6989586621679039017"><span class="hs-identifier">h</span></a></a><span class="hs-special">]</span><span> </span><a name="local-6989586621679039018"><a href="#local-6989586621679039018"><span class="hs-identifier">m</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-string">"│ "</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><a href="#local-6989586621679039021"><span class="hs-identifier hs-var">fill</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">unwords</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-identifier hs-var">show</span><span> </span><a href="#local-6989586621679039017"><span class="hs-identifier hs-var">h</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-string">" │\n"</span><span>
760+</span><a name="line-760"></a><span> </span><span class="hs-keyword">where</span><span>
761+</span><a name="line-761"></a><span> </span><a name="local-6989586621679039019"><a href="#local-6989586621679039019"><span class="hs-identifier">v</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fmap</span><span> </span><span class="hs-identifier hs-var">show</span><span> </span><a href="#local-6989586621679039018"><span class="hs-identifier hs-var">m</span></a><span>
762+</span><a name="line-762"></a><span> </span><a name="local-6989586621679039020"><a href="#local-6989586621679039020"><span class="hs-identifier">widest</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">maximum</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">fmap</span><span> </span><span class="hs-identifier hs-var">length</span><span> </span><a href="#local-6989586621679039019"><span class="hs-identifier hs-var">v</span></a><span>
763+</span><a name="line-763"></a><span> </span><a name="local-6989586621679039021"><a href="#local-6989586621679039021"><span class="hs-identifier">fill</span></a></a><span> </span><a name="local-6989586621679039022"><a href="#local-6989586621679039022"><span class="hs-identifier">str</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">replicate</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039020"><span class="hs-identifier hs-var">widest</span></a><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-identifier hs-var">length</span><span> </span><a href="#local-6989586621679039022"><span class="hs-identifier hs-var">str</span></a><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-number">2</span><span class="hs-special">)</span><span> </span><span class="hs-char">' '</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><a href="#local-6989586621679039022"><span class="hs-identifier hs-var">str</span></a><span>
764+</span><a name="line-764"></a><span class="hs-identifier">prettyAux</span><span> </span><span class="hs-special">(</span><a name="local-6989586621679039023"><a href="#local-6989586621679039023"><span class="hs-identifier">h</span></a></a><span> </span><span class="hs-glyph">:</span><span> </span><a name="local-6989586621679039024"><a href="#local-6989586621679039024"><span class="hs-identifier">t</span></a></a><span class="hs-special">)</span><span> </span><a name="local-6989586621679039025"><a href="#local-6989586621679039025"><span class="hs-identifier">l</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-string">"│ "</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><a href="#local-6989586621679039028"><span class="hs-identifier hs-var">fill</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">unwords</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-identifier hs-var">show</span><span> </span><a href="#local-6989586621679039023"><span class="hs-identifier hs-var">h</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-string">" │\n"</span><span> </span><span class="hs-operator hs-var">++</span><span>
765+</span><a name="line-765"></a><span> </span><a href="Matrix.Internal.html#prettyAux"><span class="hs-identifier hs-var">prettyAux</span></a><span> </span><a href="#local-6989586621679039024"><span class="hs-identifier hs-var">t</span></a><span> </span><a href="#local-6989586621679039025"><span class="hs-identifier hs-var">l</span></a><span>
766+</span><a name="line-766"></a><span> </span><span class="hs-keyword">where</span><span>
767+</span><a name="line-767"></a><span> </span><a name="local-6989586621679039026"><a href="#local-6989586621679039026"><span class="hs-identifier">v</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fmap</span><span> </span><span class="hs-identifier hs-var">show</span><span> </span><a href="#local-6989586621679039025"><span class="hs-identifier hs-var">l</span></a><span>
768+</span><a name="line-768"></a><span> </span><a name="local-6989586621679039027"><a href="#local-6989586621679039027"><span class="hs-identifier">widest</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">maximum</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">fmap</span><span> </span><span class="hs-identifier hs-var">length</span><span> </span><a href="#local-6989586621679039026"><span class="hs-identifier hs-var">v</span></a><span>
769+</span><a name="line-769"></a><span> </span><a name="local-6989586621679039028"><a href="#local-6989586621679039028"><span class="hs-identifier">fill</span></a></a><span> </span><a name="local-6989586621679039029"><a href="#local-6989586621679039029"><span class="hs-identifier">str</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">replicate</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039027"><span class="hs-identifier hs-var">widest</span></a><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-identifier hs-var">length</span><span> </span><a href="#local-6989586621679039029"><span class="hs-identifier hs-var">str</span></a><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-number">2</span><span class="hs-special">)</span><span> </span><span class="hs-char">' '</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><a href="#local-6989586621679039029"><span class="hs-identifier hs-var">str</span></a><span>
770+</span><a name="line-770"></a><span>
771+</span><a name="line-771"></a><span class="hs-comment">-- | Matrix pretty printer</span><span>
772+</span><a name="line-772"></a><span class="hs-identifier">pretty</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038592"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Show</span><span> </span><a href="#local-6989586621679038593"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038593"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038592"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038594"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-identifier hs-type">String</span><span>
773+</span><a name="line-773"></a><a name="pretty"><a href="Matrix.Internal.html#pretty"><span class="hs-identifier">pretty</span></a></a><span> </span><a name="local-6989586621679039030"><a href="#local-6989586621679039030"><span class="hs-identifier">m</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-string">"┌ "</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-identifier hs-var">unwords</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">replicate</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#columns"><span class="hs-identifier hs-var">columns</span></a><span> </span><a href="#local-6989586621679039030"><span class="hs-identifier hs-var">m</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679039034"><span class="hs-identifier hs-var">blank</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-string">" ┐\n"</span><span> </span><span class="hs-operator hs-var">++</span><span>
774+</span><a name="line-774"></a><span> </span><a href="Matrix.Internal.html#prettyAux"><span class="hs-identifier hs-var">prettyAux</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#toLists"><span class="hs-identifier hs-var">toLists</span></a><span> </span><a href="#local-6989586621679039030"><span class="hs-identifier hs-var">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#toLists"><span class="hs-identifier hs-var">toLists</span></a><span> </span><a href="#local-6989586621679039030"><span class="hs-identifier hs-var">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">++</span><span>
775+</span><a name="line-775"></a><span> </span><span class="hs-string">"└ "</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-identifier hs-var">unwords</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">replicate</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#columns"><span class="hs-identifier hs-var">columns</span></a><span> </span><a href="#local-6989586621679039030"><span class="hs-identifier hs-var">m</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679039034"><span class="hs-identifier hs-var">blank</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-string">" ┘"</span><span>
776+</span><a name="line-776"></a><span> </span><span class="hs-keyword">where</span><span>
777+</span><a name="line-777"></a><span> </span><a name="local-6989586621679039031"><a href="#local-6989586621679039031"><span class="hs-identifier">v</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fmap</span><span> </span><span class="hs-identifier hs-var">show</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#toList"><span class="hs-identifier hs-var">toList</span></a><span> </span><a href="#local-6989586621679039030"><span class="hs-identifier hs-var">m</span></a><span class="hs-special">)</span><span>
778+</span><a name="line-778"></a><span> </span><a name="local-6989586621679039032"><a href="#local-6989586621679039032"><span class="hs-identifier">widest</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">maximum</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">fmap</span><span> </span><span class="hs-identifier hs-var">length</span><span> </span><a href="#local-6989586621679039031"><span class="hs-identifier hs-var">v</span></a><span>
779+</span><a name="line-779"></a><span> </span><a name="local-6989586621679039033"><a href="#local-6989586621679039033"><span class="hs-identifier">fill</span></a></a><span> </span><a name="local-6989586621679039035"><a href="#local-6989586621679039035"><span class="hs-identifier">str</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">replicate</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039032"><span class="hs-identifier hs-var">widest</span></a><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-identifier hs-var">length</span><span> </span><a href="#local-6989586621679039035"><span class="hs-identifier hs-var">str</span></a><span class="hs-special">)</span><span> </span><span class="hs-char">' '</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><a href="#local-6989586621679039035"><span class="hs-identifier hs-var">str</span></a><span>
780+</span><a name="line-780"></a><span> </span><a name="local-6989586621679039034"><a href="#local-6989586621679039034"><span class="hs-identifier">blank</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679039033"><span class="hs-identifier hs-var">fill</span></a><span> </span><span class="hs-string">""</span><span>
781+</span><a name="line-781"></a><span>
782+</span><a name="line-782"></a><span class="hs-comment">-- | Matrix pretty printer</span><span>
783+</span><a name="line-783"></a><span class="hs-identifier">prettyPrint</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038589"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Show</span><span> </span><a href="#local-6989586621679038590"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679038590"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679038589"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038591"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
784+</span><a name="line-784"></a><a name="prettyPrint"><a href="Matrix.Internal.html#prettyPrint"><span class="hs-identifier">prettyPrint</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">putStrLn</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#pretty"><span class="hs-identifier hs-var">pretty</span></a><span>
785+</span><a name="line-785"></a><span>
786+</span><a name="line-786"></a><span class="hs-comment">-- Relational operators functions</span><span>
787+</span><a name="line-787"></a><span>
788+</span><a name="line-788"></a><span class="hs-comment">-- | Helper conversion function</span><span>
789+</span><a name="line-789"></a><span class="hs-identifier">toBool</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679038588"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Eq</span><span> </span><a href="#local-6989586621679038588"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span> </span><a href="#local-6989586621679038588"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-identifier hs-type">Bool</span><span>
790+</span><a name="line-790"></a><a name="toBool"><a href="Matrix.Internal.html#toBool"><span class="hs-identifier">toBool</span></a></a><span> </span><a name="local-6989586621679039207"><a href="#local-6989586621679039207"><span class="hs-identifier">n</span></a></a><span>
791+</span><a name="line-791"></a><span> </span><span class="hs-glyph">|</span><span> </span><a href="#local-6989586621679039207"><span class="hs-identifier hs-var">n</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><span class="hs-number">0</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">False</span><span>
792+</span><a name="line-792"></a><span> </span><span class="hs-glyph">|</span><span> </span><a href="#local-6989586621679039207"><span class="hs-identifier hs-var">n</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><span class="hs-number">1</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">True</span><span>
793+</span><a name="line-793"></a><span>
794+</span><a name="line-794"></a><span class="hs-comment">-- | Helper conversion function</span><span>
795+</span><a name="line-795"></a><span class="hs-identifier">fromBool</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Bool</span><span> </span><span class="hs-glyph">-></span><span> </span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span>
796+</span><a name="line-796"></a><a name="fromBool"><a href="Matrix.Internal.html#fromBool"><span class="hs-identifier">fromBool</span></a></a><span> </span><span class="hs-identifier hs-var">True</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Utils.Internal.html#nat"><span class="hs-identifier hs-var">nat</span></a><span> </span><span class="hs-number">1</span><span>
797+</span><a name="line-797"></a><span class="hs-identifier">fromBool</span><span> </span><span class="hs-identifier hs-var">False</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Utils.Internal.html#nat"><span class="hs-identifier hs-var">nat</span></a><span> </span><span class="hs-number">0</span><span>
798+</span><a name="line-798"></a><span>
799+</span><a name="line-799"></a><span class="hs-comment">-- | Relational addition</span><span>
800+</span><a name="line-800"></a><span class="hs-identifier">orM</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038586"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038587"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038586"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038587"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038586"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038587"><span class="hs-identifier hs-type">rows</span></a><span>
801+</span><a name="line-801"></a><a name="orM"><a href="Matrix.Internal.html#orM"><span class="hs-identifier">orM</span></a></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
802+</span><a name="line-802"></a><span class="hs-identifier">orM</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679039208"><a href="#local-6989586621679039208"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679039209"><a href="#local-6989586621679039209"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#fromBool"><span class="hs-identifier hs-var">fromBool</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#toBool"><span class="hs-identifier hs-var">toBool</span></a><span> </span><a href="#local-6989586621679039208"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">||</span><span> </span><a href="Matrix.Internal.html#toBool"><span class="hs-identifier hs-var">toBool</span></a><span> </span><a href="#local-6989586621679039209"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
803+</span><a name="line-803"></a><span class="hs-identifier">orM</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679039210"><a href="#local-6989586621679039210"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679039211"><a href="#local-6989586621679039211"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679039212"><a href="#local-6989586621679039212"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679039213"><a href="#local-6989586621679039213"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#orM"><span class="hs-identifier hs-var">orM</span></a><span> </span><a href="#local-6989586621679039210"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679039212"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#orM"><span class="hs-identifier hs-var">orM</span></a><span> </span><a href="#local-6989586621679039211"><span class="hs-identifier hs-var">b</span></a><span> </span><a href="#local-6989586621679039213"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
804+</span><a name="line-804"></a><span class="hs-identifier">orM</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679039214"><a href="#local-6989586621679039214"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679039215"><a href="#local-6989586621679039215"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679039216"><a href="#local-6989586621679039216"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679039217"><a href="#local-6989586621679039217"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#orM"><span class="hs-identifier hs-var">orM</span></a><span> </span><a href="#local-6989586621679039214"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679039216"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#orM"><span class="hs-identifier hs-var">orM</span></a><span> </span><a href="#local-6989586621679039215"><span class="hs-identifier hs-var">b</span></a><span> </span><a href="#local-6989586621679039217"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
805+</span><a name="line-805"></a><span class="hs-identifier">orM</span><span> </span><a name="local-6989586621679039218"><a href="#local-6989586621679039218"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><a name="local-6989586621679039219"><a href="#local-6989586621679039219"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#orM"><span class="hs-identifier hs-var">orM</span></a><span> </span><a href="#local-6989586621679039218"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679039219"><span class="hs-identifier hs-var">y</span></a><span class="hs-special">)</span><span>
806+</span><a name="line-806"></a><span class="hs-identifier">orM</span><span> </span><a name="local-6989586621679039220"><a href="#local-6989586621679039220"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><a name="local-6989586621679039221"><a href="#local-6989586621679039221"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#orM"><span class="hs-identifier hs-var">orM</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679039220"><span class="hs-identifier hs-var">x</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679039221"><span class="hs-identifier hs-var">y</span></a><span>
807+</span><a name="line-807"></a><span>
808+</span><a name="line-808"></a><span class="hs-comment">-- | Relational multiplication</span><span>
809+</span><a name="line-809"></a><span class="hs-identifier">andM</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038584"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038585"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038584"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038585"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038584"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038585"><span class="hs-identifier hs-type">rows</span></a><span>
810+</span><a name="line-810"></a><a name="andM"><a href="Matrix.Internal.html#andM"><span class="hs-identifier">andM</span></a></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
811+</span><a name="line-811"></a><span class="hs-identifier">andM</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679039222"><a href="#local-6989586621679039222"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679039223"><a href="#local-6989586621679039223"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#fromBool"><span class="hs-identifier hs-var">fromBool</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#toBool"><span class="hs-identifier hs-var">toBool</span></a><span> </span><a href="#local-6989586621679039222"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">&&</span><span> </span><a href="Matrix.Internal.html#toBool"><span class="hs-identifier hs-var">toBool</span></a><span> </span><a href="#local-6989586621679039223"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
812+</span><a name="line-812"></a><span class="hs-identifier">andM</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679039224"><a href="#local-6989586621679039224"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679039225"><a href="#local-6989586621679039225"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679039226"><a href="#local-6989586621679039226"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679039227"><a href="#local-6989586621679039227"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#andM"><span class="hs-identifier hs-var">andM</span></a><span> </span><a href="#local-6989586621679039224"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679039226"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#andM"><span class="hs-identifier hs-var">andM</span></a><span> </span><a href="#local-6989586621679039225"><span class="hs-identifier hs-var">b</span></a><span> </span><a href="#local-6989586621679039227"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
813+</span><a name="line-813"></a><span class="hs-identifier">andM</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679039228"><a href="#local-6989586621679039228"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679039229"><a href="#local-6989586621679039229"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679039230"><a href="#local-6989586621679039230"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679039231"><a href="#local-6989586621679039231"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#andM"><span class="hs-identifier hs-var">andM</span></a><span> </span><a href="#local-6989586621679039228"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679039230"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#andM"><span class="hs-identifier hs-var">andM</span></a><span> </span><a href="#local-6989586621679039229"><span class="hs-identifier hs-var">b</span></a><span> </span><a href="#local-6989586621679039231"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
814+</span><a name="line-814"></a><span class="hs-identifier">andM</span><span> </span><a name="local-6989586621679039232"><a href="#local-6989586621679039232"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><a name="local-6989586621679039233"><a href="#local-6989586621679039233"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#andM"><span class="hs-identifier hs-var">andM</span></a><span> </span><a href="#local-6989586621679039232"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679039233"><span class="hs-identifier hs-var">y</span></a><span class="hs-special">)</span><span>
815+</span><a name="line-815"></a><span class="hs-identifier">andM</span><span> </span><a name="local-6989586621679039234"><a href="#local-6989586621679039234"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><a name="local-6989586621679039235"><a href="#local-6989586621679039235"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#andM"><span class="hs-identifier hs-var">andM</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679039234"><span class="hs-identifier hs-var">x</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679039235"><span class="hs-identifier hs-var">y</span></a><span>
816+</span><a name="line-816"></a><span>
817+</span><a name="line-817"></a><span class="hs-comment">-- | Relational subtraction</span><span>
818+</span><a name="line-818"></a><span class="hs-identifier">subM</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038582"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038583"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038582"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038583"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038582"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038583"><span class="hs-identifier hs-type">rows</span></a><span>
819+</span><a name="line-819"></a><a name="subM"><a href="Matrix.Internal.html#subM"><span class="hs-identifier">subM</span></a></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
820+</span><a name="line-820"></a><span class="hs-identifier">subM</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679039236"><a href="#local-6989586621679039236"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679039237"><a href="#local-6989586621679039237"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">if</span><span> </span><a href="#local-6989586621679039236"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679039237"><span class="hs-identifier hs-var">b</span></a><span> </span><span class="hs-operator hs-var"><</span><span> </span><a href="Utils.Internal.html#nat"><span class="hs-identifier hs-var">nat</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-keyword">then</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#nat"><span class="hs-identifier hs-var">nat</span></a><span> </span><span class="hs-number">0</span><span class="hs-special">)</span><span> </span><span class="hs-keyword">else</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679039236"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679039237"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
821+</span><a name="line-821"></a><span class="hs-identifier">subM</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679039238"><a href="#local-6989586621679039238"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679039239"><a href="#local-6989586621679039239"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679039240"><a href="#local-6989586621679039240"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679039241"><a href="#local-6989586621679039241"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#subM"><span class="hs-identifier hs-var">subM</span></a><span> </span><a href="#local-6989586621679039238"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679039240"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#subM"><span class="hs-identifier hs-var">subM</span></a><span> </span><a href="#local-6989586621679039239"><span class="hs-identifier hs-var">b</span></a><span> </span><a href="#local-6989586621679039241"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
822+</span><a name="line-822"></a><span class="hs-identifier">subM</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679039242"><a href="#local-6989586621679039242"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679039243"><a href="#local-6989586621679039243"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679039244"><a href="#local-6989586621679039244"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679039245"><a href="#local-6989586621679039245"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#subM"><span class="hs-identifier hs-var">subM</span></a><span> </span><a href="#local-6989586621679039242"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679039244"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#subM"><span class="hs-identifier hs-var">subM</span></a><span> </span><a href="#local-6989586621679039243"><span class="hs-identifier hs-var">b</span></a><span> </span><a href="#local-6989586621679039245"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
823+</span><a name="line-823"></a><span class="hs-identifier">subM</span><span> </span><a name="local-6989586621679039246"><a href="#local-6989586621679039246"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><a name="local-6989586621679039247"><a href="#local-6989586621679039247"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#subM"><span class="hs-identifier hs-var">subM</span></a><span> </span><a href="#local-6989586621679039246"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679039247"><span class="hs-identifier hs-var">y</span></a><span class="hs-special">)</span><span>
824+</span><a name="line-824"></a><span class="hs-identifier">subM</span><span> </span><a name="local-6989586621679039248"><a href="#local-6989586621679039248"><span class="hs-identifier">x</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><a name="local-6989586621679039249"><a href="#local-6989586621679039249"><span class="hs-identifier">y</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#subM"><span class="hs-identifier hs-var">subM</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span> </span><a href="#local-6989586621679039248"><span class="hs-identifier hs-var">x</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679039249"><span class="hs-identifier hs-var">y</span></a><span>
825+</span><a name="line-825"></a><span>
826+</span><a name="line-826"></a><span class="hs-comment">-- | Matrix relational composition.</span><span>
827+</span><a name="line-827"></a><span class="hs-identifier">compRel</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038579"><span class="hs-identifier hs-type">cr</span></a><span> </span><a href="#local-6989586621679038580"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038581"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038579"><span class="hs-identifier hs-type">cr</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038581"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038580"><span class="hs-identifier hs-type">rows</span></a><span>
828+</span><a name="line-828"></a><a name="compRel"><a href="Matrix.Internal.html#compRel"><span class="hs-identifier">compRel</span></a></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">Empty</span></a><span>
829+</span><a name="line-829"></a><span class="hs-identifier">compRel</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679039250"><a href="#local-6989586621679039250"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><a name="local-6989586621679039251"><a href="#local-6989586621679039251"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">One</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#fromBool"><span class="hs-identifier hs-var">fromBool</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#toBool"><span class="hs-identifier hs-var">toBool</span></a><span> </span><a href="#local-6989586621679039250"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">&&</span><span> </span><a href="Matrix.Internal.html#toBool"><span class="hs-identifier hs-var">toBool</span></a><span> </span><a href="#local-6989586621679039251"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
830+</span><a name="line-830"></a><span class="hs-identifier">compRel</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679039252"><a href="#local-6989586621679039252"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679039253"><a href="#local-6989586621679039253"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679039254"><a href="#local-6989586621679039254"><span class="hs-identifier">c</span></a></a><span> </span><a name="local-6989586621679039255"><a href="#local-6989586621679039255"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#orM"><span class="hs-identifier hs-var">orM</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#compRel"><span class="hs-identifier hs-var">compRel</span></a><span> </span><a href="#local-6989586621679039252"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679039254"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#compRel"><span class="hs-identifier hs-var">compRel</span></a><span> </span><a href="#local-6989586621679039253"><span class="hs-identifier hs-var">b</span></a><span> </span><a href="#local-6989586621679039255"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span> </span><span class="hs-comment">-- Divide-and-conquer law</span><span>
831+</span><a name="line-831"></a><span class="hs-identifier">compRel</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><a name="local-6989586621679039256"><a href="#local-6989586621679039256"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679039257"><a href="#local-6989586621679039257"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><a name="local-6989586621679039258"><a href="#local-6989586621679039258"><span class="hs-identifier">c</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">Split</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#compRel"><span class="hs-identifier hs-var">compRel</span></a><span> </span><a href="#local-6989586621679039256"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679039258"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#compRel"><span class="hs-identifier hs-var">compRel</span></a><span> </span><a href="#local-6989586621679039257"><span class="hs-identifier hs-var">b</span></a><span> </span><a href="#local-6989586621679039258"><span class="hs-identifier hs-var">c</span></a><span class="hs-special">)</span><span> </span><span class="hs-comment">-- Split fusion law</span><span>
832+</span><a name="line-832"></a><span class="hs-identifier">compRel</span><span> </span><a name="local-6989586621679039259"><a href="#local-6989586621679039259"><span class="hs-identifier">c</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><a name="local-6989586621679039260"><a href="#local-6989586621679039260"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679039261"><a href="#local-6989586621679039261"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">Junc</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#compRel"><span class="hs-identifier hs-var">compRel</span></a><span> </span><a href="#local-6989586621679039259"><span class="hs-identifier hs-var">c</span></a><span> </span><a href="#local-6989586621679039260"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#compRel"><span class="hs-identifier hs-var">compRel</span></a><span> </span><a href="#local-6989586621679039259"><span class="hs-identifier hs-var">c</span></a><span> </span><a href="#local-6989586621679039261"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-comment">-- Junc fusion law</span><span>
833+</span><a name="line-833"></a><span>
834+</span><a name="line-834"></a><span class="hs-comment">-- | Lifts functions to relations with arbitrary dimensions.</span><span>
835+</span><a name="line-835"></a><span class="hs-comment">--</span><span>
836+</span><a name="line-836"></a><span class="hs-comment">-- NOTE: Be careful to not ask for a relation bigger than the cardinality of</span><span>
837+</span><a name="line-837"></a><span class="hs-comment">-- types @a@ or @b@ allows.</span><span>
838+</span><a name="line-838"></a><span class="hs-identifier">fromFRel</span><span> </span><span class="hs-glyph">::</span><span>
839+</span><a name="line-839"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038575"><a href="#local-6989586621679038575"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038576"><a href="#local-6989586621679038576"><span class="hs-identifier">b</span></a></a><span> </span><a name="local-6989586621679038577"><a href="#local-6989586621679038577"><span class="hs-identifier">cols</span></a></a><span> </span><a name="local-6989586621679038578"><a href="#local-6989586621679038578"><span class="hs-identifier">rows</span></a></a><span class="hs-operator">.</span><span>
840+</span><a name="line-840"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679038575"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
841+</span><a name="line-841"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679038576"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
842+</span><a name="line-842"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679038575"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
843+</span><a name="line-843"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679038576"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
844+</span><a name="line-844"></a><span> </span><span class="hs-identifier hs-type">Eq</span><span> </span><a href="#local-6989586621679038576"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
845+</span><a name="line-845"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038577"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
846+</span><a name="line-846"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038578"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
847+</span><a name="line-847"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038578"><span class="hs-identifier hs-type">rows</span></a><span> </span><a href="#local-6989586621679038577"><span class="hs-identifier hs-type">cols</span></a><span>
848+</span><a name="line-848"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span>
849+</span><a name="line-849"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038575"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="#local-6989586621679038576"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span>
850+</span><a name="line-850"></a><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679038577"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679038578"><span class="hs-identifier hs-type">rows</span></a><span>
851+</span><a name="line-851"></a><a name="fromFRel"><a href="Matrix.Internal.html#fromFRel"><span class="hs-identifier">fromFRel</span></a></a><span> </span><a name="local-6989586621679039262"><a href="#local-6989586621679039262"><span class="hs-identifier">f</span></a></a><span> </span><span class="hs-glyph">=</span><span>
852+</span><a name="line-852"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679039266"><a href="#local-6989586621679039266"><span class="hs-identifier">minA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">minBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038575"><span class="hs-identifier hs-type">a</span></a><span>
853+</span><a name="line-853"></a><span> </span><a name="local-6989586621679039267"><a href="#local-6989586621679039267"><span class="hs-identifier">maxA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">maxBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038575"><span class="hs-identifier hs-type">a</span></a><span>
854+</span><a name="line-854"></a><span> </span><a name="local-6989586621679039268"><a href="#local-6989586621679039268"><span class="hs-identifier">minB</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">minBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038576"><span class="hs-identifier hs-type">b</span></a><span>
855+</span><a name="line-855"></a><span> </span><a name="local-6989586621679039269"><a href="#local-6989586621679039269"><span class="hs-identifier">maxB</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">maxBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038576"><span class="hs-identifier hs-type">b</span></a><span>
856+</span><a name="line-856"></a><span> </span><a name="local-6989586621679039270"><a href="#local-6989586621679039270"><span class="hs-identifier">ccols</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038577"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
857+</span><a name="line-857"></a><span> </span><a name="local-6989586621679039271"><a href="#local-6989586621679039271"><span class="hs-identifier">rrows</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><a href="#local-6989586621679038578"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
858+</span><a name="line-858"></a><span> </span><a name="local-6989586621679039272"><a href="#local-6989586621679039272"><span class="hs-identifier">elementsA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679039270"><span class="hs-identifier hs-var">ccols</span></a><span> </span><span class="hs-special">[</span><a href="#local-6989586621679039266"><span class="hs-identifier hs-var">minA</span></a><span> </span><span class="hs-glyph">..</span><span> </span><a href="#local-6989586621679039267"><span class="hs-identifier hs-var">maxA</span></a><span class="hs-special">]</span><span>
859+</span><a name="line-859"></a><span> </span><a name="local-6989586621679039273"><a href="#local-6989586621679039273"><span class="hs-identifier">elementsB</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679039271"><span class="hs-identifier hs-var">rrows</span></a><span> </span><span class="hs-special">[</span><a href="#local-6989586621679039268"><span class="hs-identifier hs-var">minB</span></a><span> </span><span class="hs-glyph">..</span><span> </span><a href="#local-6989586621679039269"><span class="hs-identifier hs-var">maxB</span></a><span class="hs-special">]</span><span>
860+</span><a name="line-860"></a><span> </span><a name="local-6989586621679039274"><a href="#local-6989586621679039274"><span class="hs-identifier">combinations</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">,</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var"><$></span><span> </span><a href="#local-6989586621679039272"><span class="hs-identifier hs-var">elementsA</span></a><span> </span><span class="hs-operator hs-var"><*></span><span> </span><a href="#local-6989586621679039273"><span class="hs-identifier hs-var">elementsB</span></a><span>
861+</span><a name="line-861"></a><span> </span><a name="local-6989586621679039275"><a href="#local-6989586621679039275"><span class="hs-identifier">combAp</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-identifier hs-var">snd</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">sort</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-special">(</span><a name="local-6989586621679039277"><a href="#local-6989586621679039277"><span class="hs-identifier">a</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679039278"><a href="#local-6989586621679039278"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-keyword">if</span><span> </span><a href="#local-6989586621679039262"><span class="hs-identifier hs-var">f</span></a><span> </span><a href="#local-6989586621679039277"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><a href="#local-6989586621679039278"><span class="hs-identifier hs-var">b</span></a><span>
862+</span><a name="line-862"></a><span> </span><span class="hs-keyword">then</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679039277"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679039278"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><a href="Utils.Internal.html#nat"><span class="hs-identifier hs-var">nat</span></a><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span>
863+</span><a name="line-863"></a><span> </span><span class="hs-keyword">else</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679039277"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679039278"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><a href="Utils.Internal.html#nat"><span class="hs-identifier hs-var">nat</span></a><span> </span><span class="hs-number">0</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="#local-6989586621679039274"><span class="hs-identifier hs-var">combinations</span></a><span>
864+</span><a name="line-864"></a><span> </span><a name="local-6989586621679039276"><a href="#local-6989586621679039276"><span class="hs-identifier">mList</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679039263"><span class="hs-identifier hs-var">buildList</span></a><span> </span><a href="#local-6989586621679039275"><span class="hs-identifier hs-var">combAp</span></a><span> </span><a href="#local-6989586621679039271"><span class="hs-identifier hs-var">rrows</span></a><span>
865+</span><a name="line-865"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><a href="#local-6989586621679039276"><span class="hs-identifier hs-var">mList</span></a><span>
866+</span><a name="line-866"></a><span> </span><span class="hs-keyword">where</span><span>
867+</span><a name="line-867"></a><span> </span><a name="local-6989586621679039263"><a href="#local-6989586621679039263"><span class="hs-identifier">buildList</span></a></a><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
868+</span><a name="line-868"></a><span> </span><span class="hs-identifier">buildList</span><span> </span><a name="local-6989586621679039264"><a href="#local-6989586621679039264"><span class="hs-identifier">l</span></a></a><span> </span><a name="local-6989586621679039265"><a href="#local-6989586621679039265"><span class="hs-identifier">r</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679039265"><span class="hs-identifier hs-var">r</span></a><span> </span><a href="#local-6989586621679039264"><span class="hs-identifier hs-var">l</span></a><span> </span><span class="hs-glyph">:</span><span> </span><a href="#local-6989586621679039263"><span class="hs-identifier hs-var">buildList</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">drop</span><span> </span><a href="#local-6989586621679039265"><span class="hs-identifier hs-var">r</span></a><span> </span><a href="#local-6989586621679039264"><span class="hs-identifier hs-var">l</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679039265"><span class="hs-identifier hs-var">r</span></a><span>
869+</span><a name="line-869"></a><span>
870+</span><a name="line-870"></a><span class="hs-comment">-- | Lifts functions to relations with dimensions matching @a@ and @b@</span><span>
871+</span><a name="line-871"></a><span class="hs-comment">-- cardinality's.</span><span>
872+</span><a name="line-872"></a><span class="hs-identifier">fromFRel'</span><span> </span><span class="hs-glyph">::</span><span>
873+</span><a name="line-873"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679038573"><a href="#local-6989586621679038573"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679038574"><a href="#local-6989586621679038574"><span class="hs-identifier">b</span></a></a><span class="hs-operator">.</span><span>
874+</span><a name="line-874"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679038573"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
875+</span><a name="line-875"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679038574"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
876+</span><a name="line-876"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679038573"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
877+</span><a name="line-877"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679038574"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
878+</span><a name="line-878"></a><span> </span><span class="hs-identifier hs-type">Eq</span><span> </span><a href="#local-6989586621679038574"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
879+</span><a name="line-879"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038573"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
880+</span><a name="line-880"></a><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038574"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
881+</span><a name="line-881"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038574"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038573"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
882+</span><a name="line-882"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=></span><span>
883+</span><a name="line-883"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679038573"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-></span><span> </span><a href="#local-6989586621679038574"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span>
884+</span><a name="line-884"></a><span> </span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><span class="hs-special">(</span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038573"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038574"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
885+</span><a name="line-885"></a><a name="fromFRel%27"><a href="Matrix.Internal.html#fromFRel%27"><span class="hs-identifier">fromFRel'</span></a></a><span> </span><a name="local-6989586621679039279"><a href="#local-6989586621679039279"><span class="hs-identifier">f</span></a></a><span> </span><span class="hs-glyph">=</span><span>
886+</span><a name="line-886"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679039283"><a href="#local-6989586621679039283"><span class="hs-identifier">minA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">minBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038573"><span class="hs-identifier hs-type">a</span></a><span>
887+</span><a name="line-887"></a><span> </span><a name="local-6989586621679039284"><a href="#local-6989586621679039284"><span class="hs-identifier">maxA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">maxBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038573"><span class="hs-identifier hs-type">a</span></a><span>
888+</span><a name="line-888"></a><span> </span><a name="local-6989586621679039285"><a href="#local-6989586621679039285"><span class="hs-identifier">minB</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">minBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038574"><span class="hs-identifier hs-type">b</span></a><span>
889+</span><a name="line-889"></a><span> </span><a name="local-6989586621679039286"><a href="#local-6989586621679039286"><span class="hs-identifier">maxB</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">maxBound</span><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679038574"><span class="hs-identifier hs-type">b</span></a><span>
890+</span><a name="line-890"></a><span> </span><a name="local-6989586621679039287"><a href="#local-6989586621679039287"><span class="hs-identifier">ccols</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038573"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
891+</span><a name="line-891"></a><span> </span><a name="local-6989586621679039288"><a href="#local-6989586621679039288"><span class="hs-identifier">rrows</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromInteger</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">natVal</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Proxy</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Proxy</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679038574"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
892+</span><a name="line-892"></a><span> </span><a name="local-6989586621679039289"><a href="#local-6989586621679039289"><span class="hs-identifier">elementsA</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679039287"><span class="hs-identifier hs-var">ccols</span></a><span> </span><span class="hs-special">[</span><a href="#local-6989586621679039283"><span class="hs-identifier hs-var">minA</span></a><span> </span><span class="hs-glyph">..</span><span> </span><a href="#local-6989586621679039284"><span class="hs-identifier hs-var">maxA</span></a><span class="hs-special">]</span><span>
893+</span><a name="line-893"></a><span> </span><a name="local-6989586621679039290"><a href="#local-6989586621679039290"><span class="hs-identifier">elementsB</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679039288"><span class="hs-identifier hs-var">rrows</span></a><span> </span><span class="hs-special">[</span><a href="#local-6989586621679039285"><span class="hs-identifier hs-var">minB</span></a><span> </span><span class="hs-glyph">..</span><span> </span><a href="#local-6989586621679039286"><span class="hs-identifier hs-var">maxB</span></a><span class="hs-special">]</span><span>
894+</span><a name="line-894"></a><span> </span><a name="local-6989586621679039291"><a href="#local-6989586621679039291"><span class="hs-identifier">combinations</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">,</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var"><$></span><span> </span><a href="#local-6989586621679039289"><span class="hs-identifier hs-var">elementsA</span></a><span> </span><span class="hs-operator hs-var"><*></span><span> </span><a href="#local-6989586621679039290"><span class="hs-identifier hs-var">elementsB</span></a><span>
895+</span><a name="line-895"></a><span> </span><a name="local-6989586621679039292"><a href="#local-6989586621679039292"><span class="hs-identifier">combAp</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-identifier hs-var">snd</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">sort</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-special">(</span><a name="local-6989586621679039294"><a href="#local-6989586621679039294"><span class="hs-identifier">a</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679039295"><a href="#local-6989586621679039295"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-keyword">if</span><span> </span><a href="#local-6989586621679039279"><span class="hs-identifier hs-var">f</span></a><span> </span><a href="#local-6989586621679039294"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">==</span><span> </span><a href="#local-6989586621679039295"><span class="hs-identifier hs-var">b</span></a><span>
896+</span><a name="line-896"></a><span> </span><span class="hs-keyword">then</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679039294"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679039295"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><a href="Utils.Internal.html#nat"><span class="hs-identifier hs-var">nat</span></a><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span>
897+</span><a name="line-897"></a><span> </span><span class="hs-keyword">else</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679039294"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679039295"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><a href="Utils.Internal.html#nat"><span class="hs-identifier hs-var">nat</span></a><span> </span><span class="hs-number">0</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="#local-6989586621679039291"><span class="hs-identifier hs-var">combinations</span></a><span>
898+</span><a name="line-898"></a><span> </span><a name="local-6989586621679039293"><a href="#local-6989586621679039293"><span class="hs-identifier">mList</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="#local-6989586621679039280"><span class="hs-identifier hs-var">buildList</span></a><span> </span><a href="#local-6989586621679039292"><span class="hs-identifier hs-var">combAp</span></a><span> </span><a href="#local-6989586621679039288"><span class="hs-identifier hs-var">rrows</span></a><span>
899+</span><a name="line-899"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="Matrix.Internal.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span> </span><a href="#local-6989586621679039293"><span class="hs-identifier hs-var">mList</span></a><span>
900+</span><a name="line-900"></a><span> </span><span class="hs-keyword">where</span><span>
901+</span><a name="line-901"></a><span> </span><a name="local-6989586621679039280"><a href="#local-6989586621679039280"><span class="hs-identifier">buildList</span></a></a><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
902+</span><a name="line-902"></a><span> </span><span class="hs-identifier">buildList</span><span> </span><a name="local-6989586621679039281"><a href="#local-6989586621679039281"><span class="hs-identifier">l</span></a></a><span> </span><a name="local-6989586621679039282"><a href="#local-6989586621679039282"><span class="hs-identifier">r</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><a href="#local-6989586621679039282"><span class="hs-identifier hs-var">r</span></a><span> </span><a href="#local-6989586621679039281"><span class="hs-identifier hs-var">l</span></a><span> </span><span class="hs-glyph">:</span><span> </span><a href="#local-6989586621679039280"><span class="hs-identifier hs-var">buildList</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">drop</span><span> </span><a href="#local-6989586621679039282"><span class="hs-identifier hs-var">r</span></a><span> </span><a href="#local-6989586621679039281"><span class="hs-identifier hs-var">l</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679039282"><span class="hs-identifier hs-var">r</span></a><span>
903+</span><a name="line-903"></a></pre></body></html>