@@ -1,903 +0,0 @@
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>