on master help sign in
Added relational shrinking and overriding.

Added relational McCarthy's Conditional.

commit2eb21d5698cc4ae71d7323f27b8d9e7cc0fdac3e authorArmando Santos <armandoifsantos@gmail.com> dateTue 28 Jan 2020, 19:35 (7 years ago) parent59f3ebc
66 files changed+4548−1
.ghc.environment.x86_64-linux-8.6.5+17 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/build/autogen/Paths_laop.hs+50 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/build/autogen/cabal_macros.h+143 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/cache/config build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/Dist.html+15 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/Matrix-Nat.html+22 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/Matrix-Type.html+36 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/Utils.html+52 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/doc-index.html+1 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/doc-index.json+1 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/haddock-bundle.min.js+2 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/hslogo-16.png build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/laop.haddock build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/laop.txt+429 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/meta.json+1 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/minus.gif build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/ocean.css+647 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/plus.gif build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/quick-jump.css+164 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/quick-jump.min.js+2 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Dist.Internal.html+174 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Dist.html+70 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Matrix.Internal.html+903 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Matrix.Nat.html+484 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Matrix.Type.html+648 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Paths_laop.html+51 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Utils.Internal.html+177 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Utils.html+101 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/highlight.js+27 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/style.css+55 build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/synopsis.png build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/package.conf.inplace/package.cache build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/package.conf.inplace/package.cache.lock build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/setup-config cache/compiler cache/config cache/elaborated-plan cache/improved-plan cache/plan.json+1 cache/solver-plan cache/source-hashes cache/up-to-date dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script/build/script/autogen/Paths_fake_package.hs+50 dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script/build/script/autogen/cabal_macros.h+118 dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script/cache/config dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script/package.conf.inplace/package.cache dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script/package.conf.inplace/package.cache.lock dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script/setup-config dist-newstyle/cache/compiler dist-newstyle/cache/config dist-newstyle/cache/elaborated-plan dist-newstyle/cache/improved-plan dist-newstyle/cache/plan.json+1 dist-newstyle/cache/solver-plan dist-newstyle/cache/source-hashes dist-newstyle/cache/up-to-date dist-newstyle/packagedb/ghc-8.6.5/package.cache dist-newstyle/packagedb/ghc-8.6.5/package.cache.lock dist/cabal-config-flags dist/laop-0.1.0.0.tar.gz dist/setup-config hackage.sh+10 laop-0.1.0.0-docs.tar.gz packagedb/ghc-8.6.5/package.cache packagedb/ghc-8.6.5/package.cache.lock src/LAoP/Relation/Internal.hs+96−1
.ghc.environment.x86_64-linux-8.6.5new file+17
@@ -0,0 +1,17 @@
1+-- This is a GHC environment file written by cabal. This means you can
2+-- run ghc or ghci and get the environment of the project as a whole.
3+-- But you still need to use cabal repl $target to get the environment
4+-- of specific components (libs, exes, tests etc) because each one can
5+-- have its own source dirs, cpp flags etc.
6+--
7+clear-package-db
8+global-package-db
9+package-db /home/bolt/.cabal/store/ghc-8.6.5/package.db
10+package-db packagedb/ghc-8.6.5
11+package-id laop-0.1.0.0-inplace
12+package-id base-4.12.0.0
13+package-id ghc-prim-0.5.3
14+package-id rts
15+package-id integer-gmp-1.0.2.0
16+package-id deepseq-1.4.4.0
17+package-id array-0.5.3.0
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/build/autogen/Paths_laop.hsnew file+50
@@ -0,0 +1,50 @@
1+{-# LANGUAGE CPP #-}
2+{-# LANGUAGE NoRebindableSyntax #-}
3+{-# OPTIONS_GHC -fno-warn-missing-import-lists #-}
4+module Paths_laop (
5+ version,
6+ getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir,
7+ getDataFileName, getSysconfDir
8+ ) where
9+
10+import qualified Control.Exception as Exception
11+import Data.Version (Version(..))
12+import System.Environment (getEnv)
13+import Prelude
14+
15+#if defined(VERSION_base)
16+
17+#if MIN_VERSION_base(4,0,0)
18+catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a
19+#else
20+catchIO :: IO a -> (Exception.Exception -> IO a) -> IO a
21+#endif
22+
23+#else
24+catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a
25+#endif
26+catchIO = Exception.catch
27+
28+version :: Version
29+version = Version [0,1,0,0] []
30+bindir, libdir, dynlibdir, datadir, libexecdir, sysconfdir :: FilePath
31+
32+bindir = "/home/bolt/.cabal/bin"
33+libdir = "/home/bolt/.cabal/lib/x86_64-linux-ghc-8.6.5/laop-0.1.0.0-inplace"
34+dynlibdir = "/home/bolt/.cabal/lib/x86_64-linux-ghc-8.6.5"
35+datadir = "/home/bolt/.cabal/share/x86_64-linux-ghc-8.6.5/laop-0.1.0.0"
36+libexecdir = "/home/bolt/.cabal/libexec/x86_64-linux-ghc-8.6.5/laop-0.1.0.0"
37+sysconfdir = "/home/bolt/.cabal/etc"
38+
39+getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, getSysconfDir :: IO FilePath
40+getBinDir = catchIO (getEnv "laop_bindir") (\_ -> return bindir)
41+getLibDir = catchIO (getEnv "laop_libdir") (\_ -> return libdir)
42+getDynLibDir = catchIO (getEnv "laop_dynlibdir") (\_ -> return dynlibdir)
43+getDataDir = catchIO (getEnv "laop_datadir") (\_ -> return datadir)
44+getLibexecDir = catchIO (getEnv "laop_libexecdir") (\_ -> return libexecdir)
45+getSysconfDir = catchIO (getEnv "laop_sysconfdir") (\_ -> return sysconfdir)
46+
47+getDataFileName :: FilePath -> IO FilePath
48+getDataFileName name = do
49+ dir <- getDataDir
50+ return (dir ++ "/" ++ name)
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/build/autogen/cabal_macros.hnew file+143
@@ -0,0 +1,143 @@
1+/* DO NOT EDIT: This file is automatically generated by Cabal */
2+
3+/* package laop-0.1.0.0 */
4+#ifndef VERSION_laop
5+#define VERSION_laop "0.1.0.0"
6+#endif /* VERSION_laop */
7+#ifndef MIN_VERSION_laop
8+#define MIN_VERSION_laop(major1,major2,minor) (\
9+ (major1) < 0 || \
10+ (major1) == 0 && (major2) < 1 || \
11+ (major1) == 0 && (major2) == 1 && (minor) <= 0)
12+#endif /* MIN_VERSION_laop */
13+
14+/* package base-4.12.0.0 */
15+#ifndef VERSION_base
16+#define VERSION_base "4.12.0.0"
17+#endif /* VERSION_base */
18+#ifndef MIN_VERSION_base
19+#define MIN_VERSION_base(major1,major2,minor) (\
20+ (major1) < 4 || \
21+ (major1) == 4 && (major2) < 12 || \
22+ (major1) == 4 && (major2) == 12 && (minor) <= 0)
23+#endif /* MIN_VERSION_base */
24+
25+/* package deepseq-1.4.4.0 */
26+#ifndef VERSION_deepseq
27+#define VERSION_deepseq "1.4.4.0"
28+#endif /* VERSION_deepseq */
29+#ifndef MIN_VERSION_deepseq
30+#define MIN_VERSION_deepseq(major1,major2,minor) (\
31+ (major1) < 1 || \
32+ (major1) == 1 && (major2) < 4 || \
33+ (major1) == 1 && (major2) == 4 && (minor) <= 4)
34+#endif /* MIN_VERSION_deepseq */
35+
36+/* tool gcc-9.2.0 */
37+#ifndef TOOL_VERSION_gcc
38+#define TOOL_VERSION_gcc "9.2.0"
39+#endif /* TOOL_VERSION_gcc */
40+#ifndef MIN_TOOL_VERSION_gcc
41+#define MIN_TOOL_VERSION_gcc(major1,major2,minor) (\
42+ (major1) < 9 || \
43+ (major1) == 9 && (major2) < 2 || \
44+ (major1) == 9 && (major2) == 2 && (minor) <= 0)
45+#endif /* MIN_TOOL_VERSION_gcc */
46+
47+/* tool ghc-8.6.5 */
48+#ifndef TOOL_VERSION_ghc
49+#define TOOL_VERSION_ghc "8.6.5"
50+#endif /* TOOL_VERSION_ghc */
51+#ifndef MIN_TOOL_VERSION_ghc
52+#define MIN_TOOL_VERSION_ghc(major1,major2,minor) (\
53+ (major1) < 8 || \
54+ (major1) == 8 && (major2) < 6 || \
55+ (major1) == 8 && (major2) == 6 && (minor) <= 5)
56+#endif /* MIN_TOOL_VERSION_ghc */
57+
58+/* tool ghc-pkg-8.6.5 */
59+#ifndef TOOL_VERSION_ghc_pkg
60+#define TOOL_VERSION_ghc_pkg "8.6.5"
61+#endif /* TOOL_VERSION_ghc_pkg */
62+#ifndef MIN_TOOL_VERSION_ghc_pkg
63+#define MIN_TOOL_VERSION_ghc_pkg(major1,major2,minor) (\
64+ (major1) < 8 || \
65+ (major1) == 8 && (major2) < 6 || \
66+ (major1) == 8 && (major2) == 6 && (minor) <= 5)
67+#endif /* MIN_TOOL_VERSION_ghc_pkg */
68+
69+/* tool haddock-2.22.0 */
70+#ifndef TOOL_VERSION_haddock
71+#define TOOL_VERSION_haddock "2.22.0"
72+#endif /* TOOL_VERSION_haddock */
73+#ifndef MIN_TOOL_VERSION_haddock
74+#define MIN_TOOL_VERSION_haddock(major1,major2,minor) (\
75+ (major1) < 2 || \
76+ (major1) == 2 && (major2) < 22 || \
77+ (major1) == 2 && (major2) == 22 && (minor) <= 0)
78+#endif /* MIN_TOOL_VERSION_haddock */
79+
80+/* tool hpc-0.67 */
81+#ifndef TOOL_VERSION_hpc
82+#define TOOL_VERSION_hpc "0.67"
83+#endif /* TOOL_VERSION_hpc */
84+#ifndef MIN_TOOL_VERSION_hpc
85+#define MIN_TOOL_VERSION_hpc(major1,major2,minor) (\
86+ (major1) < 0 || \
87+ (major1) == 0 && (major2) < 67 || \
88+ (major1) == 0 && (major2) == 67 && (minor) <= 0)
89+#endif /* MIN_TOOL_VERSION_hpc */
90+
91+/* tool hsc2hs-0.68.5 */
92+#ifndef TOOL_VERSION_hsc2hs
93+#define TOOL_VERSION_hsc2hs "0.68.5"
94+#endif /* TOOL_VERSION_hsc2hs */
95+#ifndef MIN_TOOL_VERSION_hsc2hs
96+#define MIN_TOOL_VERSION_hsc2hs(major1,major2,minor) (\
97+ (major1) < 0 || \
98+ (major1) == 0 && (major2) < 68 || \
99+ (major1) == 0 && (major2) == 68 && (minor) <= 5)
100+#endif /* MIN_TOOL_VERSION_hsc2hs */
101+
102+/* tool pkg-config-1.6.3 */
103+#ifndef TOOL_VERSION_pkg_config
104+#define TOOL_VERSION_pkg_config "1.6.3"
105+#endif /* TOOL_VERSION_pkg_config */
106+#ifndef MIN_TOOL_VERSION_pkg_config
107+#define MIN_TOOL_VERSION_pkg_config(major1,major2,minor) (\
108+ (major1) < 1 || \
109+ (major1) == 1 && (major2) < 6 || \
110+ (major1) == 1 && (major2) == 6 && (minor) <= 3)
111+#endif /* MIN_TOOL_VERSION_pkg_config */
112+
113+/* tool runghc-8.6.5 */
114+#ifndef TOOL_VERSION_runghc
115+#define TOOL_VERSION_runghc "8.6.5"
116+#endif /* TOOL_VERSION_runghc */
117+#ifndef MIN_TOOL_VERSION_runghc
118+#define MIN_TOOL_VERSION_runghc(major1,major2,minor) (\
119+ (major1) < 8 || \
120+ (major1) == 8 && (major2) < 6 || \
121+ (major1) == 8 && (major2) == 6 && (minor) <= 5)
122+#endif /* MIN_TOOL_VERSION_runghc */
123+
124+/* tool strip-2.33 */
125+#ifndef TOOL_VERSION_strip
126+#define TOOL_VERSION_strip "2.33"
127+#endif /* TOOL_VERSION_strip */
128+#ifndef MIN_TOOL_VERSION_strip
129+#define MIN_TOOL_VERSION_strip(major1,major2,minor) (\
130+ (major1) < 2 || \
131+ (major1) == 2 && (major2) < 33 || \
132+ (major1) == 2 && (major2) == 33 && (minor) <= 0)
133+#endif /* MIN_TOOL_VERSION_strip */
134+
135+#ifndef CURRENT_PACKAGE_KEY
136+#define CURRENT_PACKAGE_KEY "laop-0.1.0.0-inplace"
137+#endif /* CURRENT_PACKAGE_KEY */
138+#ifndef CURRENT_COMPONENT_ID
139+#define CURRENT_COMPONENT_ID "laop-0.1.0.0-inplace"
140+#endif /* CURRENT_COMPONENT_ID */
141+#ifndef CURRENT_PACKAGE_VERSION
142+#define CURRENT_PACKAGE_VERSION "0.1.0.0"
143+#endif /* CURRENT_PACKAGE_VERSION */
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/cache/confignew file

Binary file not shown.

build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/Dist.htmlnew file+15
@@ -0,0 +1,15 @@
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><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Dist</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><link rel="stylesheet" type="text/css" href="quick-jump.css" /><script src="haddock-bundle.min.js" async="async" type="text/javascript"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Dist.html">Source</a></li><li><a href="/package/laop-0.1.0.0">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">laop-0.1.0.0: An inductive matrix definition library &#224; la LAoP</p></div><div id="content"><div id="module-header"><table class="info"><tr><th valign="top">Copyright</th><td>(c) Armando Santos 2019-2020</td></tr><tr><th>Maintainer</th><td>armandoifsantos@gmail.com</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Dist</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1"><code>Dist</code> and <code>Prob</code> type synonyms</a></li><li><a href="#g:2">Functor instance equivalent functions</a></li><li><a href="#g:3">Applicative equivalent functions</a></li><li><a href="#g:4">Selective equivalent functions</a></li><li><a href="#g:5">Monad equivalent functions</a></li><li><a href="#g:6">Distribution construction functions</a></li><li><a href="#g:7">Converto to list of pairs</a></li><li><a href="#g:8">Pretty print distribution</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p><strong>LAoP</strong> is a library for algebraic (inductive) construction and manipulation of matrices
2+ in Haskell. See <a href="https://github.com/bolt12/master-thesis">my Msc Thesis</a> for the
3+ motivation behind the library, the underlying theory, and implementation details.</p><p>This module exports a type synonym <code><a href="Dist.html#t:Dist" title="Dist">Dist</a></code>
4+ that represents a stochastic distribution
5+ matrix and several distribution construction
6+ functions.</p></div></div><div id="synopsis"><details id="syn"><summary>Synopsis</summary><ul class="details-toggle" data-details-id="syn"><li class="src short"><span class="keyword">newtype</span> <a href="#t:Dist">Dist</a> a = <a href="#v:D">D</a> (<a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () a)</li><li class="src short"><span class="keyword">type</span> <a href="#t:Prob">Prob</a> = <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Double" title="Prelude">Double</a></li><li class="src short"><a href="#v:fmapD">fmapD</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> b, <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> b, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)) =&gt; (a -&gt; b) -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> b</li><li class="src short"><a href="#v:unitD">unitD</a> :: <a href="Dist.html#t:Dist" title="Dist">Dist</a> ()</li><li class="src short"><a href="#v:multD">multD</a> :: (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b))), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)) =&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> b -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> (a, b)</li><li class="src short"><a href="#v:selectD">selectD</a> :: (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b))) =&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> a b -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> b</li><li class="src short"><a href="#v:returnD">returnD</a> :: <span class="keyword">forall</span> a. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a)) =&gt; a -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a</li><li class="src short"><a href="#v:bindD">bindD</a> :: <a href="Dist.html#t:Dist" title="Dist">Dist</a> a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> a b -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> b</li><li class="src short"><a href="#v:choose">choose</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) =&gt; <a href="Dist.html#t:Prob" title="Dist">Prob</a> -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a</li><li class="src short"><a href="#v:shape">shape</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) =&gt; (<a href="Dist.html#t:Prob" title="Dist">Prob</a> -&gt; <a href="Dist.html#t:Prob" title="Dist">Prob</a>) -&gt; [a] -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a</li><li class="src short"><a href="#v:linear">linear</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) =&gt; [a] -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a</li><li class="src short"><a href="#v:uniform">uniform</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) =&gt; [a] -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a</li><li class="src short"><a href="#v:negExp">negExp</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) =&gt; [a] -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a</li><li class="src short"><a href="#v:normal">normal</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) =&gt; [a] -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a</li><li class="src short"><a href="#v:toValues">toValues</a> :: <span class="keyword">forall</span> a. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)) =&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a -&gt; [(a, <a href="Dist.html#t:Prob" title="Dist">Prob</a>)]</li><li class="src short"><a href="#v:prettyDist">prettyDist</a> :: <span class="keyword">forall</span> a. (<a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)) =&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a -&gt; <a href="/package/base-4.12.0.0/docs/Data-String.html#t:String" title="Data.String">String</a></li><li class="src short"><a href="#v:prettyPrintDist">prettyPrintDist</a> :: <span class="keyword">forall</span> a. (<a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)) =&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a -&gt; <a href="/package/base-4.12.0.0/docs/System-IO.html#t:IO" title="System.IO">IO</a> ()</li></ul></details></div><div id="interface"><h1>Documentation</h1><div class="doc"><p>If the sum of the rows of a column matrix
7+ is equal to 1 then this stochastic matrix
8+ can be seen as a probability distribution.</p><p>This module is still experimental but it's
9+ already possible to model probabilistic programming
10+ problems with it. Import <code><a href="Matrix.html#v:Nat" title="Matrix">Nat</a></code> or <code><a href="Matrix.html#v:Type" title="Matrix">Type</a></code>
11+ to access LAoP matrix combinators and then all you have
12+ to do is to define your sample space, either by creating a new data
13+ type or by abstracting it out via <code>Natural</code>.</p><p>Write manipulation functions and promote them to matrices via
14+ <code>fromF</code> or <code>fromF'</code> and you're good to go!</p></div><a href="#g:1" id="g:1"><h1><code><a href="Dist.html#t:Dist" title="Dist">Dist</a></code> and <code><a href="Dist.html#t:Prob" title="Dist">Prob</a></code> type synonyms</h1></a><div class="top"><p class="src"><span class="keyword">newtype</span> <a id="t:Dist" class="def">Dist</a> a <a href="src/Dist.Internal.html#Dist" class="link">Source</a> <a href="#t:Dist" class="selflink">#</a></p><div class="doc"><p>Type synonym for column vector matrices. This represents a probability
15+ distribution.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:D" class="def">D</a> (<a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () a)</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a id="t:Prob" class="def">Prob</a> = <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Double" title="Prelude">Double</a> <a href="src/Dist.Internal.html#Prob" class="link">Source</a> <a href="#t:Prob" class="selflink">#</a></p><div class="doc"><p>Type synonym for probability value</p></div></div><a href="#g:2" id="g:2"><h1>Functor instance equivalent functions</h1></a><div class="top"><p class="src"><a id="v:fmapD" class="def">fmapD</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> b, <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> b, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)) =&gt; (a -&gt; b) -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> b <a href="src/Dist.Internal.html#fmapD" class="link">Source</a> <a href="#v:fmapD" class="selflink">#</a></p><div class="doc"><p>Functor instance</p></div></div><a href="#g:3" id="g:3"><h1>Applicative equivalent functions</h1></a><div class="top"><p class="src"><a id="v:unitD" class="def">unitD</a> :: <a href="Dist.html#t:Dist" title="Dist">Dist</a> () <a href="src/Dist.Internal.html#unitD" class="link">Source</a> <a href="#v:unitD" class="selflink">#</a></p><div class="doc"><p>Applicative/Monoidal instance <code>unit</code> function</p></div></div><div class="top"><p class="src"><a id="v:multD" class="def">multD</a> :: (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b))), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)) =&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> b -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> (a, b) <a href="src/Dist.Internal.html#multD" class="link">Source</a> <a href="#v:multD" class="selflink">#</a></p><div class="doc"><p>Applicative/Monoidal instance <code>mult</code> function</p></div></div><a href="#g:4" id="g:4"><h1>Selective equivalent functions</h1></a><div class="top"><p class="src"><a id="v:selectD" class="def">selectD</a> :: (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b))) =&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> a b -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> b <a href="src/Dist.Internal.html#selectD" class="link">Source</a> <a href="#v:selectD" class="selflink">#</a></p><div class="doc"><p>Selective instance function</p></div></div><a href="#g:5" id="g:5"><h1>Monad equivalent functions</h1></a><div class="top"><p class="src"><a id="v:returnD" class="def">returnD</a> :: <span class="keyword">forall</span> a. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a)) =&gt; a -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a <a href="src/Dist.Internal.html#returnD" class="link">Source</a> <a href="#v:returnD" class="selflink">#</a></p><div class="doc"><p>Monad instance <code><a href="/package/base-4.12.0.0/docs/Control-Monad.html#v:return" title="Control.Monad">return</a></code> function</p></div></div><div class="top"><p class="src"><a id="v:bindD" class="def">bindD</a> :: <a href="Dist.html#t:Dist" title="Dist">Dist</a> a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> a b -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> b <a href="src/Dist.Internal.html#bindD" class="link">Source</a> <a href="#v:bindD" class="selflink">#</a></p><div class="doc"><p>Monad instance '(&gt;&gt;=)' function</p></div></div><a href="#g:6" id="g:6"><h1>Distribution construction functions</h1></a><div class="top"><p class="src"><a id="v:choose" class="def">choose</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) =&gt; <a href="Dist.html#t:Prob" title="Dist">Prob</a> -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a <a href="src/Dist.Internal.html#choose" class="link">Source</a> <a href="#v:choose" class="selflink">#</a></p><div class="doc"><p>Constructs a Bernoulli distribution</p></div></div><div class="top"><p class="src"><a id="v:shape" class="def">shape</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) =&gt; (<a href="Dist.html#t:Prob" title="Dist">Prob</a> -&gt; <a href="Dist.html#t:Prob" title="Dist">Prob</a>) -&gt; [a] -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a <a href="src/Dist.Internal.html#shape" class="link">Source</a> <a href="#v:shape" class="selflink">#</a></p><div class="doc"><p>Creates a distribution given a shape function</p></div></div><div class="top"><p class="src"><a id="v:linear" class="def">linear</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) =&gt; [a] -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a <a href="src/Dist.Internal.html#linear" class="link">Source</a> <a href="#v:linear" class="selflink">#</a></p><div class="doc"><p>Constructs a Linear distribution</p></div></div><div class="top"><p class="src"><a id="v:uniform" class="def">uniform</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) =&gt; [a] -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a <a href="src/Dist.Internal.html#uniform" class="link">Source</a> <a href="#v:uniform" class="selflink">#</a></p><div class="doc"><p>Constructs an Uniform distribution</p></div></div><div class="top"><p class="src"><a id="v:negExp" class="def">negExp</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) =&gt; [a] -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a <a href="src/Dist.Internal.html#negExp" class="link">Source</a> <a href="#v:negExp" class="selflink">#</a></p><div class="doc"><p>Constructs an Negative Exponential distribution</p></div></div><div class="top"><p class="src"><a id="v:normal" class="def">normal</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) =&gt; [a] -&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a <a href="src/Dist.Internal.html#normal" class="link">Source</a> <a href="#v:normal" class="selflink">#</a></p><div class="doc"><p>Constructs an Normal distribution</p></div></div><a href="#g:7" id="g:7"><h1>Converto to list of pairs</h1></a><div class="top"><p class="src"><a id="v:toValues" class="def">toValues</a> :: <span class="keyword">forall</span> a. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)) =&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a -&gt; [(a, <a href="Dist.html#t:Prob" title="Dist">Prob</a>)] <a href="src/Dist.Internal.html#toValues" class="link">Source</a> <a href="#v:toValues" class="selflink">#</a></p><div class="doc"><p>Transforms a <code><a href="Dist.html#t:Dist" title="Dist">Dist</a></code> into a list of pairs.</p></div></div><a href="#g:8" id="g:8"><h1>Pretty print distribution</h1></a><div class="top"><p class="src"><a id="v:prettyDist" class="def">prettyDist</a> :: <span class="keyword">forall</span> a. (<a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)) =&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a -&gt; <a href="/package/base-4.12.0.0/docs/Data-String.html#t:String" title="Data.String">String</a> <a href="src/Dist.Internal.html#prettyDist" class="link">Source</a> <a href="#v:prettyDist" class="selflink">#</a></p><div class="doc"><p>Pretty a distribution</p></div></div><div class="top"><p class="src"><a id="v:prettyPrintDist" class="def">prettyPrintDist</a> :: <span class="keyword">forall</span> a. (<a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> <a href="Dist.html#t:Prob" title="Dist">Prob</a> () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)) =&gt; <a href="Dist.html#t:Dist" title="Dist">Dist</a> a -&gt; <a href="/package/base-4.12.0.0/docs/System-IO.html#t:IO" title="System.IO">IO</a> () <a href="src/Dist.Internal.html#prettyPrintDist" class="link">Source</a> <a href="#v:prettyPrintDist" class="selflink">#</a></p><div class="doc"><p>Pretty Print a distribution</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.22.0</p></div></body></html>
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/Matrix-Nat.htmlnew file+22
@@ -0,0 +1,22 @@
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><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Matrix.Nat</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><link rel="stylesheet" type="text/css" href="quick-jump.css" /><script src="haddock-bundle.min.js" async="async" type="text/javascript"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Matrix.Nat.html">Source</a></li><li><a href="/package/laop-0.1.0.0">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">laop-0.1.0.0: An inductive matrix definition library &#224; la LAoP</p></div><div id="content"><div id="module-header"><table class="info"><tr><th valign="top">Copyright</th><td>(c) Armando Santos 2019-2020</td></tr><tr><th>Maintainer</th><td>armandoifsantos@gmail.com</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Matrix.Nat</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Type safe matrix representation</a></li><li><a href="#g:2">Primitives</a></li><li><a href="#g:3">Auxiliary type families</a></li><li><a href="#g:4">Matrix construction and conversion</a></li><li><a href="#g:5">Misc</a><ul><li><a href="#g:6">Get dimensions</a></li><li><a href="#g:7">Matrix Transposition</a></li><li><a href="#g:8">Selective operator</a></li><li><a href="#g:9">McCarthy's Conditional</a></li><li><a href="#g:10">Matrix &quot;abiding&quot;</a></li></ul></li><li><a href="#g:11">Biproduct approach</a><ul><li><a href="#g:12">Split</a><ul><li><a href="#g:13">Projections</a></li></ul></li><li><a href="#g:14">Junc</a><ul><li><a href="#g:15">Injections</a></li></ul></li><li><a href="#g:16">Bifunctors</a></li><li><a href="#g:17">Applicative matrix combinators</a><ul><li><a href="#g:18">Matrix pairing</a></li></ul></li></ul></li><li><a href="#g:19">Matrix composition and lifting</a><ul><li><a href="#g:20">Arrow matrix combinators</a></li></ul></li><li><a href="#g:21">Matrix printing</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>The LAoP discipline generalises relations and functions treating them as
2+ Boolean matrices and in turn consider these as arrows.</p><p><strong>LAoP</strong> is a library for algebraic (inductive) construction and manipulation of matrices
3+ in Haskell. See <a href="https://github.com/bolt12/master-thesis">my Msc Thesis</a> for the
4+ motivation behind the library, the underlying theory, and implementation details.</p><p>This module offers a newtype wrapper around <code><a href="Matrix-Type.html#v:Matrix" title="Matrix.Type">Matrix</a></code> that
5+ uses type level naturals instead of standard data types for the matrices
6+ dimensions.</p></div></div><div id="synopsis"><details id="syn"><summary>Synopsis</summary><ul class="details-toggle" data-details-id="syn"><li class="src short"><span class="keyword">newtype</span> <a href="#t:Matrix">Matrix</a> e (cols :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a>) (rows :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a>) = <a href="#v:M">M</a> (Matrix e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows))</li><li class="src short"><a href="#v:empty">empty</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e 0 0</li><li class="src short"><a href="#v:one">one</a> :: e -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e 1 1</li><li class="src short"><a href="#v:junc">junc</a> :: <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols3 ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols1) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols2) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols1 rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols2 rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols3 rows</li><li class="src short"><a href="#v:split">split</a> :: <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows3 ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows2) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows1 -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows2 -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows3</li><li class="src short"><span class="keyword">type family</span> <a href="#t:FromNat">FromNat</a> (n :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a>) :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a> <span class="keyword">where ...</span></li><li class="src short"><span class="keyword">type family</span> <a href="#t:Count">Count</a> (d :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>) :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a> <span class="keyword">where ...</span></li><li class="src short"><span class="keyword">type family</span> <a href="#t:Normalize">Normalize</a> (d :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>) :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a> <span class="keyword">where ...</span></li><li class="src short"><span class="keyword">class</span> <a href="#t:FromLists">FromLists</a> e cols rows</li><li class="src short"><a href="#v:fromLists">fromLists</a> :: <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows) =&gt; [[e]] -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows</li><li class="src short"><a href="#v:toLists">toLists</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; [[e]]</li><li class="src short"><a href="#v:toList">toList</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; [e]</li><li class="src short"><a href="#v:matrixBuilder">matrixBuilder</a> :: (<a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows))) =&gt; ((<a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>, <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>) -&gt; e) -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows</li><li class="src short"><a href="#v:row">row</a> :: <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) () =&gt; [e] -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols 1</li><li class="src short"><a href="#v:col">col</a> :: <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e () (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows) =&gt; [e] -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e 1 rows</li><li class="src short"><a href="#v:zeros">zeros</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows</li><li class="src short"><a href="#v:ones">ones</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows</li><li class="src short"><a href="#v:bang">bang</a> :: <span class="keyword">forall</span> e cols. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> e, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols 1</li><li class="src short"><a href="#v:constant">constant</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows))) =&gt; e -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows</li><li class="src short"><a href="#v:columns">columns</a> :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></li><li class="src short"><a href="#v:rows">rows</a> :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></li><li class="src short"><a href="#v:tr">tr</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e rows cols</li><li class="src short"><a href="#v:select">select</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1)), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows2 ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1, <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols1 ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols2, <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows3 ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols3) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols1 rows3 -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols3 rows1 -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols2 rows2</li><li class="src short"><a href="#v:cond">cond</a> :: (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)) ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e () (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols), <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e) =&gt; (a -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a>) -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows</li><li class="src short"><a href="#v:abideJS">abideJS</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows</li><li class="src short"><a href="#v:abideSJ">abideSJ</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows</li><li class="src short"><a href="#v:-61--61--61-">(===)</a> :: <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows3 ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows2) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows1 -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows2 -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows3</li><li class="src short"><a href="#v:p1">p1</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> n) m</li><li class="src short"><a href="#v:p2">p2</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> n) n</li><li class="src short"><a href="#v:-124--124--124-">(|||)</a> :: <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols3 ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols1) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols2) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols1 rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols2 rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols3 rows</li><li class="src short"><a href="#v:i1">i1</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (rows <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e rows (rows <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> n)</li><li class="src short"><a href="#v:i2">i2</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> rows) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e rows (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> rows)</li><li class="src short"><a href="#v:-45--124--45-">(-|-)</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> j)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> j) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> j), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> j) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> j), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (n <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> m) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (k <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> j) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> j)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e n k -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e m j -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (n <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> m) (k <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> j)</li><li class="src short"><a href="#v:-62--60-">(&gt;&lt;)</a> :: <span class="keyword">forall</span> e m p n q. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> p)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> q)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> n))), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (p <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> q))), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> n)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> n)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (p <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> q)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> p), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (p <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> q)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> q), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> n) ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (p <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> q) ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> p) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> q))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e m p -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e n q -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> n) (p <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> q)</li><li class="src short"><a href="#v:kp1">kp1</a> :: <span class="keyword">forall</span> e m k. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k))), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k) ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k) m</li><li class="src short"><a href="#v:kp2">kp2</a> :: <span class="keyword">forall</span> e m k. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k))), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k) ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k) k</li><li class="src short"><a href="#v:khatri">khatri</a> :: <span class="keyword">forall</span> e cols a b. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> b)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (a <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> b))), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (a <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> b)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> a), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (a <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> b)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> b), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (a <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> b) ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> a) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> b))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols a -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols b -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols (a <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> b)</li><li class="src short"><a href="#v:identity">identity</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols cols</li><li class="src short"><a href="#v:comp">comp</a> :: <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cr rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols cr -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows</li><li class="src short"><a href="#v:fromF">fromF</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> b, <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)) =&gt; (a -&gt; b) -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows</li><li class="src short"><a href="#v:fromF-39-">fromF'</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> b, <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:Normalize" title="Matrix.Nat">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:Normalize" title="Matrix.Nat">Normalize</a> b)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:Normalize" title="Matrix.Nat">Normalize</a> b) (<a href="Matrix-Nat.html#t:Normalize" title="Matrix.Nat">Normalize</a> a)) =&gt; (a -&gt; b) -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> a) (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> b)</li><li class="src short"><a href="#v:pretty">pretty</a> :: (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> e) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-String.html#t:String" title="Data.String">String</a></li><li class="src short"><a href="#v:prettyPrint">prettyPrint</a> :: (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> e) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/System-IO.html#t:IO" title="System.IO">IO</a> ()</li></ul></details></div><div id="interface"><h1>Documentation</h1><div class="doc"><p>LAoP (Linear Algebra of Programming) Inductive Matrix definition.</p><p>LAoP generalises relations and functions treating them as
7+ Boolean matrices and in turn consider these as arrows.
8+ This library offers many of the combinators mentioned in the work of
9+ Macedo (2012) and Oliveira (2012).</p><p>This definition is a wrapper around <code><a href="Matrix.html#v:Type" title="Matrix">Type</a></code> but
10+ dimensions are type level Naturals. Type inference might not
11+ be as desired.</p><p>There exists two type families that make it easier to write
12+ matrix dimensions: <code>FromNat</code> and <code>Count</code>. This approach
13+ leads to a very straightforward implementation
14+ of LAoP combinators. </p></div><a href="#g:1" id="g:1"><h1>Type safe matrix representation</h1></a><div class="top"><p class="src"><span class="keyword">newtype</span> <a id="t:Matrix" class="def">Matrix</a> e (cols :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a>) (rows :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a>) <a href="src/Matrix.Nat.html#Matrix" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:M" class="def">M</a> (Matrix e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows))</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><details id="i:Matrix" open="open"><summary>Instances</summary><table><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Matrix:Category:1"></span> <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e =&gt; <a href="/package/base-4.12.0.0/docs/Control-Category.html#t:Category" title="Control.Category">Category</a> (<a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a> -&gt; <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a> -&gt; <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>)</span> <a href="src/Matrix.Nat.html#line-155" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></td><td class="doc"><p>It isn't possible to implement the <code><a href="/package/base-4.12.0.0/docs/Data-Function.html#v:id" title="Data.Function">id</a></code> function so it's
15+ implementation is <code><a href="/package/base-4.12.0.0/docs/Prelude.html#v:undefined" title="Prelude">undefined</a></code>. However <code><a href="Matrix-Nat.html#v:comp" title="Matrix.Nat">comp</a></code> can be and this partial
16+ class implementation exists just to make the code more readable.</p><p>Please use <code><a href="Matrix-Nat.html#v:identity" title="Matrix.Nat">identity</a></code> instead.</p></td></tr><tr><td colspan="2"><details id="i:id:Matrix:Category:1"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Nat.html">Matrix.Nat</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:id">id</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e a a <a href="#v:id" class="selflink">#</a></p><p class="src"><a href="#v:.">(.)</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e b c -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e a b -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e a c <a href="#v:." class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Matrix:Eq:2"></span> <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> e =&gt; <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> (<a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows)</span> <a href="src/Matrix.Nat.html#line-148" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Matrix:Eq:2"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Nat.html">Matrix.Nat</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:-61--61-">(==)</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-61--61-" class="selflink">#</a></p><p class="src"><a href="#v:-47--61-">(/=)</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-47--61-" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Matrix:Num:3"></span> <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e =&gt; <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> (<a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows)</span> <a href="src/Matrix.Nat.html#line-148" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Matrix:Num:3"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Nat.html">Matrix.Nat</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:-43-">(+)</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="#v:-43-" class="selflink">#</a></p><p class="src"><a href="#v:-45-">(-)</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="#v:-45-" class="selflink">#</a></p><p class="src"><a href="#v:-42-">(*)</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="#v:-42-" class="selflink">#</a></p><p class="src"><a href="#v:negate">negate</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="#v:negate" class="selflink">#</a></p><p class="src"><a href="#v:abs">abs</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="#v:abs" class="selflink">#</a></p><p class="src"><a href="#v:signum">signum</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="#v:signum" class="selflink">#</a></p><p class="src"><a href="#v:fromInteger">fromInteger</a> :: <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Integer" title="Prelude">Integer</a> -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="#v:fromInteger" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Matrix:Ord:4"></span> <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e =&gt; <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> (<a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows)</span> <a href="src/Matrix.Nat.html#line-148" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Matrix:Ord:4"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Nat.html">Matrix.Nat</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:compare">compare</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ordering" title="Data.Ord">Ordering</a> <a href="#v:compare" class="selflink">#</a></p><p class="src"><a href="#v:-60-">(&lt;)</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-60-" class="selflink">#</a></p><p class="src"><a href="#v:-60--61-">(&lt;=)</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-60--61-" class="selflink">#</a></p><p class="src"><a href="#v:-62-">(&gt;)</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-62-" class="selflink">#</a></p><p class="src"><a href="#v:-62--61-">(&gt;=)</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-62--61-" class="selflink">#</a></p><p class="src"><a href="#v:max">max</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="#v:max" class="selflink">#</a></p><p class="src"><a href="#v:min">min</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="#v:min" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Matrix:Show:5"></span> <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> e =&gt; <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> (<a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows)</span> <a href="src/Matrix.Nat.html#line-148" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Matrix:Show:5"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Nat.html">Matrix.Nat</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-String.html#t:String" title="Data.String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows] -&gt; <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Matrix:NFData:6"></span> <a href="/package/deepseq-1.4.4.0/docs/Control-DeepSeq.html#t:NFData" title="Control.DeepSeq">NFData</a> e =&gt; <a href="/package/deepseq-1.4.4.0/docs/Control-DeepSeq.html#t:NFData" title="Control.DeepSeq">NFData</a> (<a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows)</span> <a href="src/Matrix.Nat.html#line-148" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Matrix:NFData:6"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Nat.html">Matrix.Nat</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:rnf">rnf</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; () <a href="#v:rnf" class="selflink">#</a></p></div></details></td></tr></table></details></div></div><a href="#g:2" id="g:2"><h1>Primitives</h1></a><div class="top"><p class="src"><a id="v:empty" class="def">empty</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e 0 0 <a href="src/Matrix.Nat.html#empty" class="link">Source</a> <a href="#v:empty" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:one" class="def">one</a> :: e -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e 1 1 <a href="src/Matrix.Nat.html#one" class="link">Source</a> <a href="#v:one" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:junc" class="def">junc</a> :: <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols3 ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols1) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols2) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols1 rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols2 rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols3 rows <a href="src/Matrix.Nat.html#junc" class="link">Source</a> <a href="#v:junc" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:split" class="def">split</a> :: <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows3 ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows2) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows1 -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows2 -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows3 <a href="src/Matrix.Nat.html#split" class="link">Source</a> <a href="#v:split" class="selflink">#</a></p></div><a href="#g:3" id="g:3"><h1>Auxiliary type families</h1></a><div class="top"><p class="src"><span class="keyword">type family</span> <a id="t:FromNat" class="def">FromNat</a> (n :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a>) :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a> <span class="keyword">where ...</span> <a href="src/Matrix.Internal.html#FromNat" class="link">Source</a> <a href="#t:FromNat" class="selflink">#</a></p><div class="doc"><p>Type family that computes of a given type dimension from a given natural</p><p>Thanks to Li-Yao Xia this type family is super fast.</p></div><div class="subs equations"><p class="caption">Equations</p><table><tr><td class="src"><a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> 0 = <a href="/package/base-4.12.0.0/docs/Data-Void.html#t:Void" title="Data.Void">Void</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> 1 = ()</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n = FromNat' (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Mod" title="GHC.TypeNats">Mod</a> n 2 <a href="/package/base-4.12.0.0/docs/Data-Type-Equality.html#t:-61--61-" title="Data.Type.Equality">==</a> 0) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Div" title="GHC.TypeNats">Div</a> n 2))</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">type family</span> <a id="t:Count" class="def">Count</a> (d :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>) :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a> <span class="keyword">where ...</span> <a href="src/Matrix.Internal.html#Count" class="link">Source</a> <a href="#t:Count" class="selflink">#</a></p><div class="doc"><p>Type family that computes the cardinality of a given type dimension.</p><p>It can also count the cardinality of custom types that implement the
17+ <code><a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:Generic" title="GHC.Generics">Generic</a></code> instance.</p></div><div class="subs equations"><p class="caption">Equations</p><table><tr><td class="src"><a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Utils.html#t:Natural" title="Utils">Natural</a> n m) = (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-45-" title="GHC.TypeNats">-</a> n) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> 1</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) = <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">(+)</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> a) (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (a, b) = <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> a) (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (a -&gt; b) = <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-94-" title="GHC.TypeNats">(^)</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> b) (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:M1" title="GHC.Generics">M1</a> _ _ f p) = <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (f p)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:K1" title="GHC.Generics">K1</a> _ _ _) = 1</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:V1" title="GHC.Generics">V1</a> _) = 0</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:U1" title="GHC.Generics">U1</a> _) = 1</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t::-42-:" title="GHC.Generics">(:*:)</a> a b p) = <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (a p) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (b p)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t::-43-:" title="GHC.Generics">(:+:)</a> a b p) = <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (a p) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (b p)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> d = <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:Rep" title="GHC.Generics">Rep</a> d <a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:R" title="GHC.Generics">R</a>)</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">type family</span> <a id="t:Normalize" class="def">Normalize</a> (d :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>) :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a> <span class="keyword">where ...</span> <a href="src/Matrix.Internal.html#Normalize" class="link">Source</a> <a href="#t:Normalize" class="selflink">#</a></p><div class="doc"><p>Type family that normalizes the representation of a given data
18+ structure</p></div><div class="subs equations"><p class="caption">Equations</p><table><tr><td class="src"><a href="Matrix-Nat.html#t:Normalize" title="Matrix.Nat">Normalize</a> d = <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> d)</td><td class="doc empty">&nbsp;</td></tr></table></div></div><a href="#g:4" id="g:4"><h1>Matrix construction and conversion</h1></a><div class="top"><p class="src"><span class="keyword">class</span> <a id="t:FromLists" class="def">FromLists</a> e cols rows <a href="src/Matrix.Internal.html#FromLists" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></p><div class="doc"><p>Type class for defining the <code>fromList</code> conversion function.</p><p>Given that it is not possible to branch on types at the term level type
19+ classes are needed bery much like an inductive definition but on types.</p></div><div class="subs minimal"><p class="caption">Minimal complete definition</p><p class="src">fromLists</p></div><div class="subs instances"><details id="i:FromLists" open="open"><summary>Instances</summary><table><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:1"></span> <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e () ()</span> <a href="src/Matrix.Internal.html#line-311" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:1"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e () ()</p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:2"></span> <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e <a href="/package/base-4.12.0.0/docs/Data-Void.html#t:Void" title="Data.Void">Void</a> <a href="/package/base-4.12.0.0/docs/Data-Void.html#t:Void" title="Data.Void">Void</a></span> <a href="src/Matrix.Internal.html#line-307" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:2"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e <a href="/package/base-4.12.0.0/docs/Data-Void.html#t:Void" title="Data.Void">Void</a> <a href="/package/base-4.12.0.0/docs/Data-Void.html#t:Void" title="Data.Void">Void</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:3"></span> (<a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e () a, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e () b, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> a)) =&gt; <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e () (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b)</span> <a href="src/Matrix.Internal.html#line-329" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:3"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e () (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b)</p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:4"></span> <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e () rows =&gt; <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e () (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> () rows)</span> <a href="src/Matrix.Internal.html#line-325" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:4"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e () (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> () rows)</p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:5"></span> (<a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e a (), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e b (), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> a)) =&gt; <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ()</span> <a href="src/Matrix.Internal.html#line-319" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:5"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ()</p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:6"></span> <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e cols () =&gt; <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> () cols) ()</span> <a href="src/Matrix.Internal.html#line-315" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:6"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> () cols) ()</p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:7"></span> (<a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) c, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) d, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> c)) =&gt; <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> c d)</span> <a href="src/Matrix.Internal.html#line-335" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:7"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> c d)</p></div></details></td></tr></table></details></div></div><div class="top"><p class="src"><a id="v:fromLists" class="def">fromLists</a> :: <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows) =&gt; [[e]] -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="src/Matrix.Nat.html#fromLists" class="link">Source</a> <a href="#v:fromLists" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:toLists" class="def">toLists</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; [[e]] <a href="src/Matrix.Nat.html#toLists" class="link">Source</a> <a href="#v:toLists" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:toList" class="def">toList</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; [e] <a href="src/Matrix.Nat.html#toList" class="link">Source</a> <a href="#v:toList" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:matrixBuilder" class="def">matrixBuilder</a> :: (<a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows))) =&gt; ((<a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>, <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>) -&gt; e) -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="src/Matrix.Nat.html#matrixBuilder" class="link">Source</a> <a href="#v:matrixBuilder" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:row" class="def">row</a> :: <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) () =&gt; [e] -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols 1 <a href="src/Matrix.Nat.html#row" class="link">Source</a> <a href="#v:row" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:col" class="def">col</a> :: <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e () (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows) =&gt; [e] -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e 1 rows <a href="src/Matrix.Nat.html#col" class="link">Source</a> <a href="#v:col" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:zeros" class="def">zeros</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="src/Matrix.Nat.html#zeros" class="link">Source</a> <a href="#v:zeros" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:ones" class="def">ones</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="src/Matrix.Nat.html#ones" class="link">Source</a> <a href="#v:ones" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:bang" class="def">bang</a> :: <span class="keyword">forall</span> e cols. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> e, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols 1 <a href="src/Matrix.Nat.html#bang" class="link">Source</a> <a href="#v:bang" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:constant" class="def">constant</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows))) =&gt; e -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="src/Matrix.Nat.html#constant" class="link">Source</a> <a href="#v:constant" class="selflink">#</a></p></div><a href="#g:5" id="g:5"><h1>Misc</h1></a><a href="#g:6" id="g:6"><h2>Get dimensions</h2></a><div class="top"><p class="src"><a id="v:columns" class="def">columns</a> :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> <a href="src/Matrix.Nat.html#columns" class="link">Source</a> <a href="#v:columns" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:rows" class="def">rows</a> :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> <a href="src/Matrix.Nat.html#rows" class="link">Source</a> <a href="#v:rows" class="selflink">#</a></p></div><a href="#g:7" id="g:7"><h2>Matrix Transposition</h2></a><div class="top"><p class="src"><a id="v:tr" class="def">tr</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e rows cols <a href="src/Matrix.Nat.html#tr" class="link">Source</a> <a href="#v:tr" class="selflink">#</a></p></div><a href="#g:8" id="g:8"><h2>Selective operator</h2></a><div class="top"><p class="src"><a id="v:select" class="def">select</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1)), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows2 ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1, <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols1 ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols2, <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows3 ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols3) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols1 rows3 -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols3 rows1 -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols2 rows2 <a href="src/Matrix.Nat.html#select" class="link">Source</a> <a href="#v:select" class="selflink">#</a></p></div><a href="#g:9" id="g:9"><h2>McCarthy's Conditional</h2></a><div class="top"><p class="src"><a id="v:cond" class="def">cond</a> :: (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)) ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e () (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols), <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e) =&gt; (a -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a>) -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="src/Matrix.Nat.html#cond" class="link">Source</a> <a href="#v:cond" class="selflink">#</a></p></div><a href="#g:10" id="g:10"><h2>Matrix &quot;abiding&quot;</h2></a><div class="top"><p class="src"><a id="v:abideJS" class="def">abideJS</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="src/Matrix.Nat.html#abideJS" class="link">Source</a> <a href="#v:abideJS" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:abideSJ" class="def">abideSJ</a> :: <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="src/Matrix.Nat.html#abideSJ" class="link">Source</a> <a href="#v:abideSJ" class="selflink">#</a></p></div><a href="#g:11" id="g:11"><h1>Biproduct approach</h1></a><a href="#g:12" id="g:12"><h2>Split</h2></a><div class="top"><p class="src"><a id="v:-61--61--61-" class="def">(===)</a> :: <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows3 ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows1) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows2) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows1 -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows2 -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows3 <span class="fixity">infixl 2</span><span class="rightedge"></span> <a href="src/Matrix.Nat.html#%3D%3D%3D" class="link">Source</a> <a href="#v:-61--61--61-" class="selflink">#</a></p></div><a href="#g:13" id="g:13"><h3>Projections</h3></a><div class="top"><p class="src"><a id="v:p1" class="def">p1</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> n) m <a href="src/Matrix.Nat.html#p1" class="link">Source</a> <a href="#v:p1" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:p2" class="def">p2</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> n) n <a href="src/Matrix.Nat.html#p2" class="link">Source</a> <a href="#v:p2" class="selflink">#</a></p></div><a href="#g:14" id="g:14"><h2>Junc</h2></a><div class="top"><p class="src"><a id="v:-124--124--124-" class="def">(|||)</a> :: <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols3 ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols1) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols2) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols1 rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols2 rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols3 rows <span class="fixity">infixl 3</span><span class="rightedge"></span> <a href="src/Matrix.Nat.html#%7C%7C%7C" class="link">Source</a> <a href="#v:-124--124--124-" class="selflink">#</a></p></div><a href="#g:15" id="g:15"><h3>Injections</h3></a><div class="top"><p class="src"><a id="v:i1" class="def">i1</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (rows <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e rows (rows <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> n) <a href="src/Matrix.Nat.html#i1" class="link">Source</a> <a href="#v:i1" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:i2" class="def">i2</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> rows) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e rows (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> rows) <a href="src/Matrix.Nat.html#i2" class="link">Source</a> <a href="#v:i2" class="selflink">#</a></p></div><a href="#g:16" id="g:16"><h2>Bifunctors</h2></a><div class="top"><p class="src"><a id="v:-45--124--45-" class="def">(-|-)</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> j)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> j) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> j), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> j) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> j), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (n <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> m) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (k <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> j) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> j)) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e n k -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e m j -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (n <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> m) (k <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> j) <span class="fixity">infixl 5</span><span class="rightedge"></span> <a href="src/Matrix.Nat.html#-%7C-" class="link">Source</a> <a href="#v:-45--124--45-" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:-62--60-" class="def">(&gt;&lt;)</a> :: <span class="keyword">forall</span> e m p n q. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> p)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> q)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> n))), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (p <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> q))), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> n)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> n)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (p <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> q)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> p), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (p <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> q)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> q), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> n) ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> n)), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (p <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> q) ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> p) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> q))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e m p -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e n q -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> n) (p <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> q) <span class="fixity">infixl 4</span><span class="rightedge"></span> <a href="src/Matrix.Nat.html#%3E%3C" class="link">Source</a> <a href="#v:-62--60-" class="selflink">#</a></p></div><a href="#g:17" id="g:17"><h2>Applicative matrix combinators</h2></a><div class="doc"><p>Note that given the restrictions imposed it is not possible to
20+ implement the standard type classes present in standard Haskell.
21+ *** Matrix pairing projections</p></div><div class="top"><p class="src"><a id="v:kp1" class="def">kp1</a> :: <span class="keyword">forall</span> e m k. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k))), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k) ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k) m <a href="src/Matrix.Nat.html#kp1" class="link">Source</a> <a href="#v:kp1" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:kp2" class="def">kp2</a> :: <span class="keyword">forall</span> e m k. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k))), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k) ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> m) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> k))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> k) k <a href="src/Matrix.Nat.html#kp2" class="link">Source</a> <a href="#v:kp2" class="selflink">#</a></p></div><a href="#g:18" id="g:18"><h3>Matrix pairing</h3></a><div class="top"><p class="src"><a id="v:khatri" class="def">khatri</a> :: <span class="keyword">forall</span> e cols a b. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> b)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (a <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> b))), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (a <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> b)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> a), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (a <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> b)) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> b), <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (a <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> b) ~ <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> a) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> b))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols a -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols b -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols (a <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> b) <a href="src/Matrix.Nat.html#khatri" class="link">Source</a> <a href="#v:khatri" class="selflink">#</a></p></div><a href="#g:19" id="g:19"><h1>Matrix composition and lifting</h1></a><a href="#g:20" id="g:20"><h2>Arrow matrix combinators</h2></a><div class="doc"><p>Note that given the restrictions imposed it is not possible to
22+ implement the standard type classes present in standard Haskell.</p></div><div class="top"><p class="src"><a id="v:identity" class="def">identity</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols))) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols cols <a href="src/Matrix.Nat.html#identity" class="link">Source</a> <a href="#v:identity" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:comp" class="def">comp</a> :: <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cr rows -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols cr -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="src/Matrix.Nat.html#comp" class="link">Source</a> <a href="#v:comp" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:fromF" class="def">fromF</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> b, <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> rows) (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)) =&gt; (a -&gt; b) -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows <a href="src/Matrix.Nat.html#fromF" class="link">Source</a> <a href="#v:fromF" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:fromF-39-" class="def">fromF'</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> b, <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:Normalize" title="Matrix.Nat">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:Normalize" title="Matrix.Nat">Normalize</a> b)), <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">FromLists</a> e (<a href="Matrix-Nat.html#t:Normalize" title="Matrix.Nat">Normalize</a> b) (<a href="Matrix-Nat.html#t:Normalize" title="Matrix.Nat">Normalize</a> a)) =&gt; (a -&gt; b) -&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> a) (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> b) <a href="src/Matrix.Nat.html#fromF%27" class="link">Source</a> <a href="#v:fromF-39-" class="selflink">#</a></p></div><a href="#g:21" id="g:21"><h1>Matrix printing</h1></a><div class="top"><p class="src"><a id="v:pretty" class="def">pretty</a> :: (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> e) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-String.html#t:String" title="Data.String">String</a> <a href="src/Matrix.Nat.html#pretty" class="link">Source</a> <a href="#v:pretty" class="selflink">#</a></p></div><div class="top"><p class="src"><a id="v:prettyPrint" class="def">prettyPrint</a> :: (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Count</a> (<a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">FromNat</a> cols)), <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> e) =&gt; <a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/System-IO.html#t:IO" title="System.IO">IO</a> () <a href="src/Matrix.Nat.html#prettyPrint" class="link">Source</a> <a href="#v:prettyPrint" class="selflink">#</a></p></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.22.0</p></div></body></html>
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/Matrix-Type.htmlnew file+36
@@ -0,0 +1,36 @@
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><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Matrix.Type</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><link rel="stylesheet" type="text/css" href="quick-jump.css" /><script src="haddock-bundle.min.js" async="async" type="text/javascript"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Matrix.Type.html">Source</a></li><li><a href="/package/laop-0.1.0.0">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">laop-0.1.0.0: An inductive matrix definition library &#224; la LAoP</p></div><div id="content"><div id="module-header"><table class="info"><tr><th valign="top">Copyright</th><td>(c) Armando Santos 2019-2020</td></tr><tr><th>Maintainer</th><td>armandoifsantos@gmail.com</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Matrix.Type</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Type safe matrix representation</a></li><li><a href="#g:2">Type aliases</a></li><li><a href="#g:3">Primitives</a></li><li><a href="#g:4">Auxiliary type families</a></li><li><a href="#g:5">Matrix construction and conversion</a></li><li><a href="#g:6">Functor instance equivalent function</a></li><li><a href="#g:7">Applicative/Monoidal instance equivalent functions</a></li><li><a href="#g:8">Selective equivalent instance function</a></li><li><a href="#g:9">Monad equivalent instance function</a></li><li><a href="#g:10">Misc</a><ul><li><a href="#g:11">Get dimensions</a></li><li><a href="#g:12">Matrix Transposition</a></li><li><a href="#g:13">McCarthy's Conditional</a></li><li><a href="#g:14">Matrix &quot;abiding&quot;</a></li></ul></li><li><a href="#g:15">Biproduct approach</a><ul><li><a href="#g:16">Split</a><ul><li><a href="#g:17">Projections</a></li></ul></li><li><a href="#g:18">Junc</a><ul><li><a href="#g:19">Injections</a></li></ul></li><li><a href="#g:20">Bifunctors</a></li><li><a href="#g:21">Applicative matrix combinators</a><ul><li><a href="#g:22">Matrix pairing</a></li></ul></li></ul></li><li><a href="#g:23">Matrix composition and lifting</a><ul><li><a href="#g:24">Arrow matrix combinators</a></li></ul></li><li><a href="#g:25">Matrix printing</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>The LAoP discipline generalises relations and functions treating them as
2+ Boolean matrices and in turn consider these as arrows.</p><p><strong>LAoP</strong> is a library for algebraic (inductive) construction and manipulation of matrices
3+ in Haskell. See <a href="https://github.com/bolt12/master-thesis">my Msc Thesis</a> for the
4+ motivation behind the library, the underlying theory, and implementation details.</p><p>This module offers a newtype wrapper around <code><a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a></code> that
5+ uses arbitrary types instead of canonical data types for the matrices
6+ dimensions.</p><p><strong>NOTE</strong>: If the types in the dimensions are custom they must need to
7+ implement a <code>Generic</code> instance.</p></div></div><div id="synopsis"><details id="syn"><summary>Synopsis</summary><ul class="details-toggle" data-details-id="syn"><li class="src short"><span class="keyword">newtype</span> <a href="#t:Matrix">Matrix</a> e (cols :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>) (rows :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>) = <a href="#v:M">M</a> (Matrix e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows))</li><li class="src short"><span class="keyword">type</span> <a href="#t:Zero">Zero</a> = <a href="/package/base-4.12.0.0/docs/Data-Void.html#t:Void" title="Data.Void">Void</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:One">One</a> = ()</li><li class="src short"><a href="#v:empty">empty</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e <a href="Matrix-Type.html#t:Zero" title="Matrix.Type">Zero</a> <a href="Matrix-Type.html#t:Zero" title="Matrix.Type">Zero</a></li><li class="src short"><a href="#v:one">one</a> :: e -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e <a href="Matrix-Type.html#t:One" title="Matrix.Type">One</a> <a href="Matrix-Type.html#t:One" title="Matrix.Type">One</a></li><li class="src short"><a href="#v:junc">junc</a> :: <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e b rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) rows</li><li class="src short"><a href="#v:split">split</a> :: <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b)</li><li class="src short"><span class="keyword">type family</span> <a href="#t:FromNat">FromNat</a> (n :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a>) :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a> <span class="keyword">where ...</span></li><li class="src short"><span class="keyword">type family</span> <a href="#t:Count">Count</a> (d :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>) :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a> <span class="keyword">where ...</span></li><li class="src short"><span class="keyword">type family</span> <a href="#t:Normalize">Normalize</a> (d :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>) :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a> <span class="keyword">where ...</span></li><li class="src short"><span class="keyword">class</span> <a href="#t:FromLists">FromLists</a> e cols rows</li><li class="src short"><a href="#v:fromLists">fromLists</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows) =&gt; [[e]] -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows</li><li class="src short"><a href="#v:toLists">toLists</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; [[e]]</li><li class="src short"><a href="#v:toList">toList</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; [e]</li><li class="src short"><a href="#v:matrixBuilder">matrixBuilder</a> :: (<a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows))) =&gt; ((<a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>, <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>) -&gt; e) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows</li><li class="src short"><a href="#v:row">row</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) () =&gt; [e] -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols <a href="Matrix-Type.html#t:One" title="Matrix.Type">One</a></li><li class="src short"><a href="#v:col">col</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows) =&gt; [e] -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e <a href="Matrix-Type.html#t:One" title="Matrix.Type">One</a> rows</li><li class="src short"><a href="#v:zeros">zeros</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows))) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows</li><li class="src short"><a href="#v:ones">ones</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows))) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows</li><li class="src short"><a href="#v:bang">bang</a> :: <span class="keyword">forall</span> e cols. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols))) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols <a href="Matrix-Type.html#t:One" title="Matrix.Type">One</a></li><li class="src short"><a href="#v:constant">constant</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows))) =&gt; e -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows</li><li class="src short"><a href="#v:fmapM">fmapM</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> b, <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)) =&gt; (a -&gt; b) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e c a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e c b</li><li class="src short"><a href="#v:unitM">unitM</a> :: <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e () ()</li><li class="src short"><a href="#v:multM">multM</a> :: (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b))), <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e c a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e c b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e c (a, b)</li><li class="src short"><a href="#v:selectM">selectM</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols b</li><li class="src short"><a href="#v:returnM">returnM</a> :: <span class="keyword">forall</span> e a. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> e, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a)) =&gt; a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e <a href="Matrix-Type.html#t:One" title="Matrix.Type">One</a> a</li><li class="src short"><a href="#v:bindM">bindM</a> :: <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e b c -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a c</li><li class="src short"><a href="#v:columns">columns</a> :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></li><li class="src short"><a href="#v:rows">rows</a> :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></li><li class="src short"><a href="#v:tr">tr</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e rows cols</li><li class="src short"><a href="#v:cond">cond</a> :: (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e) =&gt; (a -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a>) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a b</li><li class="src short"><a href="#v:abideJS">abideJS</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows</li><li class="src short"><a href="#v:abideSJ">abideSJ</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows</li><li class="src short"><a href="#v:-61--61--61-">(===)</a> :: <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b)</li><li class="src short"><a href="#v:p1">p1</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) m</li><li class="src short"><a href="#v:p2">p2</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) n</li><li class="src short"><a href="#v:-124--124--124-">(|||)</a> :: <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e b rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) rows</li><li class="src short"><a href="#v:i1">i1</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e m (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n)</li><li class="src short"><a href="#v:i2">i2</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e n (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n)</li><li class="src short"><a href="#v:-45--124--45-">(-|-)</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> j)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> j) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> j), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> j) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> j), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> n m) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> k j) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> j)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e n k -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e m j -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> n m) (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> k j)</li><li class="src short"><a href="#v:-62--60-">(&gt;&lt;)</a> :: <span class="keyword">forall</span> e m p n q. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> p)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> q)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, n))), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (p, q))), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, n)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, n)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (p, q)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> p), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (p, q)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> q), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, n) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (p, q) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> p, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> q)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e m p -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e n q -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (m, n) (p, q)</li><li class="src short"><a href="#v:kp1">kp1</a> :: <span class="keyword">forall</span> e m k. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, k))), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, k)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, k) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (m, k) m</li><li class="src short"><a href="#v:kp2">kp2</a> :: <span class="keyword">forall</span> e m k. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, k))), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, k)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, k) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (m, k) k</li><li class="src short"><a href="#v:khatri">khatri</a> :: <span class="keyword">forall</span> e cols a b. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b))), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols (a, b)</li><li class="src short"><a href="#v:identity">identity</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a))) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a a</li><li class="src short"><a href="#v:comp">comp</a> :: <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cr rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols cr -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows</li><li class="src short"><a href="#v:fromF">fromF</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> b, <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)) =&gt; (a -&gt; b) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows</li><li class="src short"><a href="#v:fromF-39-">fromF'</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> b, <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)) =&gt; (a -&gt; b) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a b</li><li class="src short"><a href="#v:pretty">pretty</a> :: (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> e) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-String.html#t:String" title="Data.String">String</a></li><li class="src short"><a href="#v:prettyPrint">prettyPrint</a> :: (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> e) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/System-IO.html#t:IO" title="System.IO">IO</a> ()</li></ul></details></div><div id="interface"><h1>Documentation</h1><div class="doc"><p>LAoP (Linear Algebra of Programming) Inductive Matrix definition.</p><p>LAoP generalises relations and functions treating them as
8+ Boolean matrices and in turn consider these as arrows.
9+ This library offers many of the combinators mentioned in the work of
10+ Macedo (2012) and Oliveira (2012).</p><p>This definition is a wrapper around <code><a href="Matrix.html#v:Type" title="Matrix">Type</a></code> but
11+ dimensions are arbitrary data types. Type inference might not
12+ be as desired.</p></div><a href="#g:1" id="g:1"><h1>Type safe matrix representation</h1></a><div class="top"><p class="src"><span class="keyword">newtype</span> <a id="t:Matrix" class="def">Matrix</a> e (cols :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>) (rows :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>) <a href="src/Matrix.Type.html#Matrix" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:M" class="def">M</a> (Matrix e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows))</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><details id="i:Matrix" open="open"><summary>Instances</summary><table><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Matrix:Category:1"></span> <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e =&gt; <a href="/package/base-4.12.0.0/docs/Control-Category.html#t:Category" title="Control.Category">Category</a> (<a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a> -&gt; <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a> -&gt; <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>)</span> <a href="src/Matrix.Type.html#line-174" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></td><td class="doc"><p>It isn't possible to implement the <code><a href="/package/base-4.12.0.0/docs/Data-Function.html#v:id" title="Data.Function">id</a></code> function so it's
13+ implementation is <code><a href="/package/base-4.12.0.0/docs/Prelude.html#v:undefined" title="Prelude">undefined</a></code>. However <code><a href="Matrix-Type.html#v:comp" title="Matrix.Type">comp</a></code> can be and this partial
14+ class implementation exists just to make the code more readable.</p><p>Please use <code><a href="Matrix-Type.html#v:identity" title="Matrix.Type">identity</a></code> instead.</p></td></tr><tr><td colspan="2"><details id="i:id:Matrix:Category:1"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Type.html">Matrix.Type</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:id">id</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a a <a href="#v:id" class="selflink">#</a></p><p class="src"><a href="#v:.">(.)</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e b c -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a c <a href="#v:." class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Matrix:Eq:2"></span> <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> e =&gt; <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> (<a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows)</span> <a href="src/Matrix.Type.html#line-167" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Matrix:Eq:2"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Type.html">Matrix.Type</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:-61--61-">(==)</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-61--61-" class="selflink">#</a></p><p class="src"><a href="#v:-47--61-">(/=)</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-47--61-" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Matrix:Num:3"></span> <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e =&gt; <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> (<a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows)</span> <a href="src/Matrix.Type.html#line-167" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Matrix:Num:3"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Type.html">Matrix.Type</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:-43-">(+)</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="#v:-43-" class="selflink">#</a></p><p class="src"><a href="#v:-45-">(-)</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="#v:-45-" class="selflink">#</a></p><p class="src"><a href="#v:-42-">(*)</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="#v:-42-" class="selflink">#</a></p><p class="src"><a href="#v:negate">negate</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="#v:negate" class="selflink">#</a></p><p class="src"><a href="#v:abs">abs</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="#v:abs" class="selflink">#</a></p><p class="src"><a href="#v:signum">signum</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="#v:signum" class="selflink">#</a></p><p class="src"><a href="#v:fromInteger">fromInteger</a> :: <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Integer" title="Prelude">Integer</a> -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="#v:fromInteger" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Matrix:Ord:4"></span> <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e =&gt; <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> (<a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows)</span> <a href="src/Matrix.Type.html#line-167" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Matrix:Ord:4"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Type.html">Matrix.Type</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:compare">compare</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ordering" title="Data.Ord">Ordering</a> <a href="#v:compare" class="selflink">#</a></p><p class="src"><a href="#v:-60-">(&lt;)</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-60-" class="selflink">#</a></p><p class="src"><a href="#v:-60--61-">(&lt;=)</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-60--61-" class="selflink">#</a></p><p class="src"><a href="#v:-62-">(&gt;)</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-62-" class="selflink">#</a></p><p class="src"><a href="#v:-62--61-">(&gt;=)</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-62--61-" class="selflink">#</a></p><p class="src"><a href="#v:max">max</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="#v:max" class="selflink">#</a></p><p class="src"><a href="#v:min">min</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="#v:min" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Matrix:Show:5"></span> <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> e =&gt; <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> (<a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows)</span> <a href="src/Matrix.Type.html#line-167" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Matrix:Show:5"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Type.html">Matrix.Type</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-String.html#t:String" title="Data.String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows] -&gt; <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Matrix:NFData:6"></span> <a href="/package/deepseq-1.4.4.0/docs/Control-DeepSeq.html#t:NFData" title="Control.DeepSeq">NFData</a> e =&gt; <a href="/package/deepseq-1.4.4.0/docs/Control-DeepSeq.html#t:NFData" title="Control.DeepSeq">NFData</a> (<a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows)</span> <a href="src/Matrix.Type.html#line-167" class="link">Source</a> <a href="#t:Matrix" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Matrix:NFData:6"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Type.html">Matrix.Type</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:rnf">rnf</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; () <a href="#v:rnf" class="selflink">#</a></p></div></details></td></tr></table></details></div></div><a href="#g:2" id="g:2"><h1>Type aliases</h1></a><div class="top"><p class="src"><span class="keyword">type</span> <a id="t:Zero" class="def">Zero</a> = <a href="/package/base-4.12.0.0/docs/Data-Void.html#t:Void" title="Data.Void">Void</a> <a href="src/Matrix.Type.html#Zero" class="link">Source</a> <a href="#t:Zero" class="selflink">#</a></p><div class="doc"><p>Zero type alias</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a id="t:One" class="def">One</a> = () <a href="src/Matrix.Type.html#One" class="link">Source</a> <a href="#t:One" class="selflink">#</a></p><div class="doc"><p>One type alias</p></div></div><a href="#g:3" id="g:3"><h1>Primitives</h1></a><div class="top"><p class="src"><a id="v:empty" class="def">empty</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e <a href="Matrix-Type.html#t:Zero" title="Matrix.Type">Zero</a> <a href="Matrix-Type.html#t:Zero" title="Matrix.Type">Zero</a> <a href="src/Matrix.Type.html#empty" class="link">Source</a> <a href="#v:empty" class="selflink">#</a></p><div class="doc"><p>Empty matrix constructor</p></div></div><div class="top"><p class="src"><a id="v:one" class="def">one</a> :: e -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e <a href="Matrix-Type.html#t:One" title="Matrix.Type">One</a> <a href="Matrix-Type.html#t:One" title="Matrix.Type">One</a> <a href="src/Matrix.Type.html#one" class="link">Source</a> <a href="#v:one" class="selflink">#</a></p><div class="doc"><p>Unit matrix constructor</p></div></div><div class="top"><p class="src"><a id="v:junc" class="def">junc</a> :: <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e b rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) rows <a href="src/Matrix.Type.html#junc" class="link">Source</a> <a href="#v:junc" class="selflink">#</a></p><div class="doc"><p>Matrix <code>Junc</code> constructor</p></div></div><div class="top"><p class="src"><a id="v:split" class="def">split</a> :: <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) <a href="src/Matrix.Type.html#split" class="link">Source</a> <a href="#v:split" class="selflink">#</a></p><div class="doc"><p>Matrix <code>Split</code> constructor</p></div></div><a href="#g:4" id="g:4"><h1>Auxiliary type families</h1></a><div class="top"><p class="src"><span class="keyword">type family</span> <a id="t:FromNat" class="def">FromNat</a> (n :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a>) :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a> <span class="keyword">where ...</span> <a href="src/Matrix.Internal.html#FromNat" class="link">Source</a> <a href="#t:FromNat" class="selflink">#</a></p><div class="doc"><p>Type family that computes of a given type dimension from a given natural</p><p>Thanks to Li-Yao Xia this type family is super fast.</p></div><div class="subs equations"><p class="caption">Equations</p><table><tr><td class="src"><a href="Matrix-Type.html#t:FromNat" title="Matrix.Type">FromNat</a> 0 = <a href="/package/base-4.12.0.0/docs/Data-Void.html#t:Void" title="Data.Void">Void</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Type.html#t:FromNat" title="Matrix.Type">FromNat</a> 1 = ()</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Type.html#t:FromNat" title="Matrix.Type">FromNat</a> n = FromNat' (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Mod" title="GHC.TypeNats">Mod</a> n 2 <a href="/package/base-4.12.0.0/docs/Data-Type-Equality.html#t:-61--61-" title="Data.Type.Equality">==</a> 0) (<a href="Matrix-Type.html#t:FromNat" title="Matrix.Type">FromNat</a> (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Div" title="GHC.TypeNats">Div</a> n 2))</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">type family</span> <a id="t:Count" class="def">Count</a> (d :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>) :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a> <span class="keyword">where ...</span> <a href="src/Matrix.Internal.html#Count" class="link">Source</a> <a href="#t:Count" class="selflink">#</a></p><div class="doc"><p>Type family that computes the cardinality of a given type dimension.</p><p>It can also count the cardinality of custom types that implement the
15+ <code><a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:Generic" title="GHC.Generics">Generic</a></code> instance.</p></div><div class="subs equations"><p class="caption">Equations</p><table><tr><td class="src"><a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Utils.html#t:Natural" title="Utils">Natural</a> n m) = (m <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-45-" title="GHC.TypeNats">-</a> n) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> 1</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) = <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">(+)</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a) (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (a, b) = <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a) (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (a -&gt; b) = <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-94-" title="GHC.TypeNats">(^)</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> b) (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:M1" title="GHC.Generics">M1</a> _ _ f p) = <a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (f p)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:K1" title="GHC.Generics">K1</a> _ _ _) = 1</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:V1" title="GHC.Generics">V1</a> _) = 0</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:U1" title="GHC.Generics">U1</a> _) = 1</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t::-42-:" title="GHC.Generics">(:*:)</a> a b p) = <a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (a p) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-" title="GHC.TypeNats">*</a> <a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (b p)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t::-43-:" title="GHC.Generics">(:+:)</a> a b p) = <a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (a p) <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-" title="GHC.TypeNats">+</a> <a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (b p)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> d = <a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:Rep" title="GHC.Generics">Rep</a> d <a href="/package/base-4.12.0.0/docs/GHC-Generics.html#t:R" title="GHC.Generics">R</a>)</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">type family</span> <a id="t:Normalize" class="def">Normalize</a> (d :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a>) :: <a href="/package/base-4.12.0.0/docs/Data-Kind.html#t:Type" title="Data.Kind">Type</a> <span class="keyword">where ...</span> <a href="src/Matrix.Internal.html#Normalize" class="link">Source</a> <a href="#t:Normalize" class="selflink">#</a></p><div class="doc"><p>Type family that normalizes the representation of a given data
16+ structure</p></div><div class="subs equations"><p class="caption">Equations</p><table><tr><td class="src"><a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> d = <a href="Matrix-Type.html#t:FromNat" title="Matrix.Type">FromNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> d)</td><td class="doc empty">&nbsp;</td></tr></table></div></div><a href="#g:5" id="g:5"><h1>Matrix construction and conversion</h1></a><div class="top"><p class="src"><span class="keyword">class</span> <a id="t:FromLists" class="def">FromLists</a> e cols rows <a href="src/Matrix.Internal.html#FromLists" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></p><div class="doc"><p>Type class for defining the <code>fromList</code> conversion function.</p><p>Given that it is not possible to branch on types at the term level type
17+ classes are needed bery much like an inductive definition but on types.</p></div><div class="subs minimal"><p class="caption">Minimal complete definition</p><p class="src">fromLists</p></div><div class="subs instances"><details id="i:FromLists" open="open"><summary>Instances</summary><table><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:1"></span> <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e () ()</span> <a href="src/Matrix.Internal.html#line-311" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:1"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e () ()</p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:2"></span> <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e <a href="/package/base-4.12.0.0/docs/Data-Void.html#t:Void" title="Data.Void">Void</a> <a href="/package/base-4.12.0.0/docs/Data-Void.html#t:Void" title="Data.Void">Void</a></span> <a href="src/Matrix.Internal.html#line-307" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:2"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e <a href="/package/base-4.12.0.0/docs/Data-Void.html#t:Void" title="Data.Void">Void</a> <a href="/package/base-4.12.0.0/docs/Data-Void.html#t:Void" title="Data.Void">Void</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:3"></span> (<a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e () a, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e () b, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a)) =&gt; <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e () (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b)</span> <a href="src/Matrix.Internal.html#line-329" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:3"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e () (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b)</p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:4"></span> <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e () rows =&gt; <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e () (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> () rows)</span> <a href="src/Matrix.Internal.html#line-325" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:4"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e () (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> () rows)</p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:5"></span> (<a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e a (), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e b (), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a)) =&gt; <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ()</span> <a href="src/Matrix.Internal.html#line-319" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:5"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ()</p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:6"></span> <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e cols () =&gt; <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> () cols) ()</span> <a href="src/Matrix.Internal.html#line-315" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:6"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> () cols) ()</p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:FromLists:FromLists:7"></span> (<a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) c, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) d, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> c)) =&gt; <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> c d)</span> <a href="src/Matrix.Internal.html#line-335" class="link">Source</a> <a href="#t:FromLists" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:ic:FromLists:FromLists:7"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Matrix-Internal.html">Matrix.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:fromLists">fromLists</a> :: [[e]] -&gt; Matrix e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> c d)</p></div></details></td></tr></table></details></div></div><div class="top"><p class="src"><a id="v:fromLists" class="def">fromLists</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows) =&gt; [[e]] -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="src/Matrix.Type.html#fromLists" class="link">Source</a> <a href="#v:fromLists" class="selflink">#</a></p><div class="doc"><p>Build a matrix out of a list of list of elements. Throws a runtime
18+ error if the dimensions do not match.</p></div></div><div class="top"><p class="src"><a id="v:toLists" class="def">toLists</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; [[e]] <a href="src/Matrix.Type.html#toLists" class="link">Source</a> <a href="#v:toLists" class="selflink">#</a></p><div class="doc"><p>Converts a matrix to a list of lists of elements.</p></div></div><div class="top"><p class="src"><a id="v:toList" class="def">toList</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; [e] <a href="src/Matrix.Type.html#toList" class="link">Source</a> <a href="#v:toList" class="selflink">#</a></p><div class="doc"><p>Converts a matrix to a list of elements.</p></div></div><div class="top"><p class="src"><a id="v:matrixBuilder" class="def">matrixBuilder</a> :: (<a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows))) =&gt; ((<a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>, <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>) -&gt; e) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="src/Matrix.Type.html#matrixBuilder" class="link">Source</a> <a href="#v:matrixBuilder" class="selflink">#</a></p><div class="doc"><p>Matrix builder function. Constructs a matrix provided with
19+ a construction function.</p></div></div><div class="top"><p class="src"><a id="v:row" class="def">row</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) () =&gt; [e] -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols <a href="Matrix-Type.html#t:One" title="Matrix.Type">One</a> <a href="src/Matrix.Type.html#row" class="link">Source</a> <a href="#v:row" class="selflink">#</a></p><div class="doc"><p>Constructs a row vector matrix</p></div></div><div class="top"><p class="src"><a id="v:col" class="def">col</a> :: <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows) =&gt; [e] -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e <a href="Matrix-Type.html#t:One" title="Matrix.Type">One</a> rows <a href="src/Matrix.Type.html#col" class="link">Source</a> <a href="#v:col" class="selflink">#</a></p><div class="doc"><p>Constructs a column vector matrix</p></div></div><div class="top"><p class="src"><a id="v:zeros" class="def">zeros</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows))) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="src/Matrix.Type.html#zeros" class="link">Source</a> <a href="#v:zeros" class="selflink">#</a></p><div class="doc"><p>The zero matrix. A matrix wholly filled with zeros.</p></div></div><div class="top"><p class="src"><a id="v:ones" class="def">ones</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows))) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="src/Matrix.Type.html#ones" class="link">Source</a> <a href="#v:ones" class="selflink">#</a></p><div class="doc"><p>The ones matrix. A matrix wholly filled with ones.</p><p>Also known as T (Top) matrix.</p></div></div><div class="top"><p class="src"><a id="v:bang" class="def">bang</a> :: <span class="keyword">forall</span> e cols. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols))) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols <a href="Matrix-Type.html#t:One" title="Matrix.Type">One</a> <a href="src/Matrix.Type.html#bang" class="link">Source</a> <a href="#v:bang" class="selflink">#</a></p><div class="doc"><p>The T (Top) row vector matrix.</p></div></div><div class="top"><p class="src"><a id="v:constant" class="def">constant</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows))) =&gt; e -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="src/Matrix.Type.html#constant" class="link">Source</a> <a href="#v:constant" class="selflink">#</a></p><div class="doc"><p>The constant matrix constructor. A matrix wholly filled with a given
20+ value.</p></div></div><a href="#g:6" id="g:6"><h1>Functor instance equivalent function</h1></a><div class="top"><p class="src"><a id="v:fmapM" class="def">fmapM</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> b, <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)) =&gt; (a -&gt; b) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e c a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e c b <a href="src/Matrix.Type.html#fmapM" class="link">Source</a> <a href="#v:fmapM" class="selflink">#</a></p><div class="doc"><p>Functor instance equivalent function</p></div></div><a href="#g:7" id="g:7"><h1>Applicative/Monoidal instance equivalent functions</h1></a><div class="top"><p class="src"><a id="v:unitM" class="def">unitM</a> :: <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e () () <a href="src/Matrix.Type.html#unitM" class="link">Source</a> <a href="#v:unitM" class="selflink">#</a></p><div class="doc"><p>Applicative instance equivalent <code>unit</code> function,</p></div></div><div class="top"><p class="src"><a id="v:multM" class="def">multM</a> :: (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b))), <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e c a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e c b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e c (a, b) <a href="src/Matrix.Type.html#multM" class="link">Source</a> <a href="#v:multM" class="selflink">#</a></p><div class="doc"><p>Applicative instance equivalent <code>unit</code> function,</p></div></div><a href="#g:8" id="g:8"><h1>Selective equivalent instance function</h1></a><div class="top"><p class="src"><a id="v:selectM" class="def">selectM</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols b <a href="src/Matrix.Type.html#selectM" class="link">Source</a> <a href="#v:selectM" class="selflink">#</a></p><div class="doc"><p>Selective functors <code>select</code> operator equivalent inspired by the
21+ ArrowMonad solution presented in the paper.</p></div></div><a href="#g:9" id="g:9"><h1>Monad equivalent instance function</h1></a><div class="top"><p class="src"><a id="v:returnM" class="def">returnM</a> :: <span class="keyword">forall</span> e a. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> e, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> a)) =&gt; a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e <a href="Matrix-Type.html#t:One" title="Matrix.Type">One</a> a <a href="src/Matrix.Type.html#returnM" class="link">Source</a> <a href="#v:returnM" class="selflink">#</a></p><div class="doc"><p>Monad instance equivalent <code><a href="/package/base-4.12.0.0/docs/Control-Monad.html#v:return" title="Control.Monad">return</a></code> function,</p></div></div><div class="top"><p class="src"><a id="v:bindM" class="def">bindM</a> :: <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e b c -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a c <a href="src/Matrix.Type.html#bindM" class="link">Source</a> <a href="#v:bindM" class="selflink">#</a></p><div class="doc"><p>Monad instance equivalent '(&gt;&gt;=)' function,</p></div></div><a href="#g:10" id="g:10"><h1>Misc</h1></a><a href="#g:11" id="g:11"><h2>Get dimensions</h2></a><div class="top"><p class="src"><a id="v:columns" class="def">columns</a> :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> <a href="src/Matrix.Type.html#columns" class="link">Source</a> <a href="#v:columns" class="selflink">#</a></p><div class="doc"><p>Obtain the number of columns.</p><p>NOTE: The <code><a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a></code> constaint is needed in order to obtain the
22+ dimensions in constant time.</p><p>TODO: A <code><a href="Matrix-Type.html#v:columns" title="Matrix.Type">columns</a></code> function that does not need the <code><a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a></code> constraint in
23+ exchange for performance.</p></div></div><div class="top"><p class="src"><a id="v:rows" class="def">rows</a> :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> <a href="src/Matrix.Type.html#rows" class="link">Source</a> <a href="#v:rows" class="selflink">#</a></p><div class="doc"><p>Obtain the number of rows.</p><p>NOTE: The <code><a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a></code> constaint is needed in order to obtain the
24+ dimensions in constant time.</p><p>TODO: A <code><a href="Matrix-Type.html#v:rows" title="Matrix.Type">rows</a></code> function that does not need the <code><a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a></code> constraint in
25+ exchange for performance.</p></div></div><a href="#g:12" id="g:12"><h2>Matrix Transposition</h2></a><div class="top"><p class="src"><a id="v:tr" class="def">tr</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e rows cols <a href="src/Matrix.Type.html#tr" class="link">Source</a> <a href="#v:tr" class="selflink">#</a></p><div class="doc"><p>Matrix transposition.</p></div></div><a href="#g:13" id="g:13"><h2>McCarthy's Conditional</h2></a><div class="top"><p class="src"><a id="v:cond" class="def">cond</a> :: (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e () (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e) =&gt; (a -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a>) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a b <a href="src/Matrix.Type.html#cond" class="link">Source</a> <a href="#v:cond" class="selflink">#</a></p><div class="doc"><p>McCarthy's Conditional expresses probabilistic choice.</p></div></div><a href="#g:14" id="g:14"><h2>Matrix &quot;abiding&quot;</h2></a><div class="top"><p class="src"><a id="v:abideJS" class="def">abideJS</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="src/Matrix.Type.html#abideJS" class="link">Source</a> <a href="#v:abideJS" class="selflink">#</a></p><div class="doc"><p>Matrix &quot;abiding&quot; followin the 'Junc'-'Split' abide law.</p><p>Law:</p><pre><code>Junc</code> (<code>Split</code> a c) (<code>Split</code> b d) == <code>Split</code> (<code>Junc</code> a b) (<code>Junc</code> c d)
26+</pre></div></div><div class="top"><p class="src"><a id="v:abideSJ" class="def">abideSJ</a> :: <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="src/Matrix.Type.html#abideSJ" class="link">Source</a> <a href="#v:abideSJ" class="selflink">#</a></p><div class="doc"><p>Matrix &quot;abiding&quot; followin the 'Split'-'Junc' abide law.</p><p>Law:</p><pre><code>Split</code> (<code>Junc</code> a b) (<code>Junc</code> c d) == <code>Junc</code> (<code>Split</code> a c) (<code>Split</code> b d)
27+</pre></div></div><a href="#g:15" id="g:15"><h1>Biproduct approach</h1></a><a href="#g:16" id="g:16"><h2>Split</h2></a><div class="top"><p class="src"><a id="v:-61--61--61-" class="def">(===)</a> :: <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) <span class="fixity">infixl 2</span><span class="rightedge"></span> <a href="src/Matrix.Type.html#%3D%3D%3D" class="link">Source</a> <a href="#v:-61--61--61-" class="selflink">#</a></p><div class="doc"><p>Matrix <code>Split</code> constructor</p></div></div><a href="#g:17" id="g:17"><h3>Projections</h3></a><div class="top"><p class="src"><a id="v:p1" class="def">p1</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) m <a href="src/Matrix.Type.html#p1" class="link">Source</a> <a href="#v:p1" class="selflink">#</a></p><div class="doc"><p>Biproduct first component projection</p></div></div><div class="top"><p class="src"><a id="v:p2" class="def">p2</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) n <a href="src/Matrix.Type.html#p2" class="link">Source</a> <a href="#v:p2" class="selflink">#</a></p><div class="doc"><p>Biproduct second component projection</p></div></div><a href="#g:18" id="g:18"><h2>Junc</h2></a><div class="top"><p class="src"><a id="v:-124--124--124-" class="def">(|||)</a> :: <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e b rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> a b) rows <span class="fixity">infixl 3</span><span class="rightedge"></span> <a href="src/Matrix.Type.html#%7C%7C%7C" class="link">Source</a> <a href="#v:-124--124--124-" class="selflink">#</a></p><div class="doc"><p>Matrix <code>Junc</code> constructor</p></div></div><a href="#g:19" id="g:19"><h3>Injections</h3></a><div class="top"><p class="src"><a id="v:i1" class="def">i1</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e m (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) <a href="src/Matrix.Type.html#i1" class="link">Source</a> <a href="#v:i1" class="selflink">#</a></p><div class="doc"><p>Biproduct first component injection</p></div></div><div class="top"><p class="src"><a id="v:i2" class="def">i2</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e n (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> m n) <a href="src/Matrix.Type.html#i2" class="link">Source</a> <a href="#v:i2" class="selflink">#</a></p><div class="doc"><p>Biproduct second component injection</p></div></div><a href="#g:20" id="g:20"><h2>Bifunctors</h2></a><div class="top"><p class="src"><a id="v:-45--124--45-" class="def">(-|-)</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> j)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> j) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> j), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> j) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> j), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> n m) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> k j) ~ <a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> j)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e n k -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e m j -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> n m) (<a href="/package/base-4.12.0.0/docs/Data-Either.html#t:Either" title="Data.Either">Either</a> k j) <span class="fixity">infixl 5</span><span class="rightedge"></span> <a href="src/Matrix.Type.html#-%7C-" class="link">Source</a> <a href="#v:-45--124--45-" class="selflink">#</a></p><div class="doc"><p>Matrix coproduct functor also known as matrix direct sum.</p></div></div><div class="top"><p class="src"><a id="v:-62--60-" class="def">(&gt;&lt;)</a> :: <span class="keyword">forall</span> e m p n q. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> p)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> q)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, n))), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (p, q))), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, n)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, n)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (p, q)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> p), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (p, q)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> q), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, n) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> n), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (p, q) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> p, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> q)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e m p -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e n q -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (m, n) (p, q) <span class="fixity">infixl 4</span><span class="rightedge"></span> <a href="src/Matrix.Type.html#%3E%3C" class="link">Source</a> <a href="#v:-62--60-" class="selflink">#</a></p><div class="doc"><p>Matrix product functor also known as kronecker product</p></div></div><a href="#g:21" id="g:21"><h2>Applicative matrix combinators</h2></a><div class="doc"><p>Note that given the restrictions imposed it is not possible to
28+ implement the standard type classes present in standard Haskell.
29+ *** Matrix pairing projections</p></div><div class="top"><p class="src"><a id="v:kp1" class="def">kp1</a> :: <span class="keyword">forall</span> e m k. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, k))), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, k)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, k) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (m, k) m <a href="src/Matrix.Type.html#kp1" class="link">Source</a> <a href="#v:kp1" class="selflink">#</a></p><div class="doc"><p>Khatri Rao product first component projection matrix.</p></div></div><div class="top"><p class="src"><a id="v:kp2" class="def">kp2</a> :: <span class="keyword">forall</span> e m k. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, k))), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, k)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (m, k) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> m, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> k)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e (m, k) k <a href="src/Matrix.Type.html#kp2" class="link">Source</a> <a href="#v:kp2" class="selflink">#</a></p><div class="doc"><p>Khatri Rao product second component projection matrix.</p></div></div><a href="#g:22" id="g:22"><h3>Matrix pairing</h3></a><div class="top"><p class="src"><a id="v:khatri" class="def">khatri</a> :: <span class="keyword">forall</span> e cols a b. (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b))), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b)) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b), <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (a, b) ~ <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a, <a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols a -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols b -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols (a, b) <a href="src/Matrix.Type.html#khatri" class="link">Source</a> <a href="#v:khatri" class="selflink">#</a></p><div class="doc"><p>Khatri Rao Matrix product also known as matrix pairing.</p><p>NOTE: That this is not a true categorical product, see for instance:</p><pre> | kp1 <code><a href="Matrix-Type.html#v:comp" title="Matrix.Type">comp</a></code> khatri a b == a
30+khatri a b ==&gt; |
31+ | kp2 <code><a href="Matrix-Type.html#v:comp" title="Matrix.Type">comp</a></code> khatri a b == b
32+</pre><p><strong>Emphasis</strong> on the implication symbol.</p></div></div><a href="#g:23" id="g:23"><h1>Matrix composition and lifting</h1></a><a href="#g:24" id="g:24"><h2>Arrow matrix combinators</h2></a><div class="doc"><p>Note that given the restrictions imposed it is not possible to
33+ implement the standard type classes present in standard Haskell.</p></div><div class="top"><p class="src"><a id="v:identity" class="def">identity</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a))) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a a <a href="src/Matrix.Type.html#identity" class="link">Source</a> <a href="#v:identity" class="selflink">#</a></p><div class="doc"><p>Identity matrix</p></div></div><div class="top"><p class="src"><a id="v:comp" class="def">comp</a> :: <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cr rows -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols cr -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="src/Matrix.Type.html#comp" class="link">Source</a> <a href="#v:comp" class="selflink">#</a></p><div class="doc"><p>Matrix composition. Equivalent to matrix-matrix multiplication.</p><p>This definition takes advantage of divide-and-conquer and fusion laws
34+ from LAoP.</p></div></div><div class="top"><p class="src"><a id="v:fromF" class="def">fromF</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> b, <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> rows) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)) =&gt; (a -&gt; b) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows <a href="src/Matrix.Type.html#fromF" class="link">Source</a> <a href="#v:fromF" class="selflink">#</a></p><div class="doc"><p>Lifts functions to matrices with arbitrary dimensions.</p><p>NOTE: Be careful to not ask for a matrix bigger than the cardinality of
35+ types <code>a</code> or <code>b</code> allows.</p></div></div><div class="top"><p class="src"><a id="v:fromF-39-" class="def">fromF'</a> :: (<a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> a, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> b, <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> b, <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> e, <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> e, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)), <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b)), <a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">FromLists</a> e (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> b) (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> a)) =&gt; (a -&gt; b) -&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e a b <a href="src/Matrix.Type.html#fromF%27" class="link">Source</a> <a href="#v:fromF-39-" class="selflink">#</a></p><div class="doc"><p>Lifts functions to matrices with dimensions matching <code>a</code> and <code>b</code>
36+ cardinality's.</p></div></div><a href="#g:25" id="g:25"><h1>Matrix printing</h1></a><div class="top"><p class="src"><a id="v:pretty" class="def">pretty</a> :: (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> e) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/Data-String.html#t:String" title="Data.String">String</a> <a href="src/Matrix.Type.html#pretty" class="link">Source</a> <a href="#v:pretty" class="selflink">#</a></p><div class="doc"><p>Matrix pretty printer</p></div></div><div class="top"><p class="src"><a id="v:prettyPrint" class="def">prettyPrint</a> :: (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> (<a href="Matrix-Type.html#t:Count" title="Matrix.Type">Count</a> (<a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Normalize</a> cols)), <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> e) =&gt; <a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix</a> e cols rows -&gt; <a href="/package/base-4.12.0.0/docs/System-IO.html#t:IO" title="System.IO">IO</a> () <a href="src/Matrix.Type.html#prettyPrint" class="link">Source</a> <a href="#v:prettyPrint" class="selflink">#</a></p><div class="doc"><p>Matrix pretty printer</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.22.0</p></div></body></html>
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/Utils.htmlnew file+52
@@ -0,0 +1,52 @@
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><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Utils</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><link rel="stylesheet" type="text/css" href="quick-jump.css" /><script src="haddock-bundle.min.js" async="async" type="text/javascript"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Utils.html">Source</a></li><li><a href="/package/laop-0.1.0.0">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">laop-0.1.0.0: An inductive matrix definition library &#224; la LAoP</p></div><div id="content"><div id="module-header"><table class="info"><tr><th valign="top">Copyright</th><td>(c) Armando Santos 2019-2020</td></tr><tr><th>Maintainer</th><td>armandoifsantos@gmail.com</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Utils</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Coerce auxiliar functions to help promote <code>Int</code> typed functions to</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p><strong>LAoP</strong> is a library for algebraic (inductive) construction and manipulation of matrices
2+ in Haskell. See <a href="https://github.com/bolt12/master-thesis">my Msc Thesis</a> for the
3+ motivation behind the library, the underlying theory, and implementation details.</p><p>This module provides the <code><a href="Utils.html#t:Natural" title="Utils">Natural</a></code> data type.
4+ The semantic associated with this data type is that
5+ it's meant to be a restricted <code><a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></code> value.</p></div></div><div id="synopsis"><details id="syn"><summary>Synopsis</summary><ul class="details-toggle" data-details-id="syn"><li class="src short"><span class="keyword">data</span> <a href="#t:Natural">Natural</a> (start :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a>) (end :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a>)</li><li class="src short"><a href="#v:nat">nat</a> :: <span class="keyword">forall</span> n m. (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> n, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> m) =&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m</li><li class="src short"><a href="#v:coerceNat">coerceNat</a> :: (<a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>) -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> a a' -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> b b' -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> c c'</li><li class="src short"><a href="#v:coerceNat2">coerceNat2</a> :: ((<a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>, <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>) -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>) -&gt; (<a href="Utils.html#t:Natural" title="Utils">Natural</a> a a', <a href="Utils.html#t:Natural" title="Utils">Natural</a> b b') -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> c c' -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> d d'</li><li class="src short"><a href="#v:coerceNat3">coerceNat3</a> :: (<a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; a) -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> b b' -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> c c' -&gt; a</li></ul></details></div><div id="interface"><h1>Documentation</h1><div class="doc"><p>Utility module that provides the <code><a href="Utils.html#t:Natural" title="Utils">Natural</a></code> data type.
6+ The semantic associated with this data type is that
7+ it's meant to be a restricted <code><a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></code> value. For example
8+ the type <code>Natural 1 6</code> can only be instanciated with <code>nat n</code>
9+ where <code>1 &lt;= n &lt;= 6</code>. Why, You might ask, because with normal
10+ <code><a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></code>s it is not possible to have a decent <code>Enum (Int, Int)</code>
11+ instance. See the following probabilistic programming model as and
12+ example:</p><p>We want to calculate the probability of the sum of two dice throws.
13+ To do this we start by defining the sample space: </p><pre>type SampleSpace = Int -- We think <code><a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></code> are enough
14+
15+die :: Dist Int 6
16+die = unifrom [1..6]
17+
18+-- Promote <code><a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></code> addition to a matrix
19+addM = fromF (uncurry (+)) -- Impossible
20+</pre><p>The last line is impossible because <code>(Int, Int)</code> does not have
21+ a good <code><a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a></code> instance: <code>[(0, 1), (0, 2), .. (0, maxBound), (1, 0),
22+ ..]</code>. And we'd like the addition matrix to be of 36 columns by 12
23+ rows but limited to integers up to <code>6</code>!</p><p>One way to solve this issue is by defining and auxilary data type to
24+ represent the sample space:</p><pre>data SampleSpace = S1 | S2 | S3 | S4 | S5 | S6
25+ deriving (Show, Eq, Enum, Bounded) -- Enum and Bounded are
26+ important
27+</pre><p>And write the sample space addition function:</p><pre>ssAdd :: SampleSpace -&gt; SampleSpace -&gt; Int
28+ssAdd a b = (fromEnum a + 1) + (fromEnum b + 1)
29+</pre><p>And then promote that function to matrix and everything is alright:</p><pre>ssAddM = fromF' (uncurry ssAdd)
30+
31+dieSumProb = ssAddM <code>comp</code> (khatri die die)
32+</pre><p>This is a nice solution for small sample spaces. But for larger ones
33+ it is not feasible to write a data type with hundreds of constructors
34+ and then write manipulation functions that need to deal with them.
35+ To mitigate this limitation the <code><a href="Utils.html#t:Natural" title="Utils">Natural</a></code> type comes a long way and
36+ allows one to model the sample in an easier way. See for instance:</p><pre>ssAdd :: Natural 1 6 -&gt; Natural 1 6 -&gt; Natural 1 12
37+ssAdd = coerceNat (+)
38+
39+ssAddM = fromF' (uncurry sumSS)
40+
41+die :: Dist (Natural 1 6) 6
42+die = uniform [nat <code>1 </code>6 1 .. nat 6]
43+
44+dieSumProb = ssAddM <code>comp</code> (khatri die die)
45+</pre><ul><li><code><a href="Utils.html#t:Natural" title="Utils">Natural</a></code> data type</li></ul></div><div class="top"><p class="src"><span class="keyword">data</span> <a id="t:Natural" class="def">Natural</a> (start :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a>) (end :: <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat" title="GHC.TypeNats">Nat</a>) <a href="src/Utils.Internal.html#Natural" class="link">Source</a> <a href="#t:Natural" class="selflink">#</a></p><div class="doc"><p>Wrapper around <code><a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></code>s that have a restrictive semantic associated.
46+ A value of type <code><code><a href="Utils.html#t:Natural" title="Utils">Natural</a></code> n m</code> can only be instanciated with some <code><a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></code>
47+ <code>i</code> that's <code>n &lt;= i &lt;= m</code>.</p></div><div class="subs instances"><details id="i:Natural" open="open"><summary>Instances</summary><table><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Natural:Bounded:1"></span> (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> n, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> m) =&gt; <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Bounded" title="Prelude">Bounded</a> (<a href="Utils.html#t:Natural" title="Utils">Natural</a> n m)</span> <a href="src/Utils.Internal.html#line-138" class="link">Source</a> <a href="#t:Natural" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Natural:Bounded:1"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Utils-Internal.html">Utils.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:minBound">minBound</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m <a href="#v:minBound" class="selflink">#</a></p><p class="src"><a href="#v:maxBound">maxBound</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m <a href="#v:maxBound" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Natural:Enum:2"></span> (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> n, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> m) =&gt; <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Enum" title="Prelude">Enum</a> (<a href="Utils.html#t:Natural" title="Utils">Natural</a> n m)</span> <a href="src/Utils.Internal.html#line-142" class="link">Source</a> <a href="#t:Natural" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Natural:Enum:2"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Utils-Internal.html">Utils.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:succ">succ</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m <a href="#v:succ" class="selflink">#</a></p><p class="src"><a href="#v:pred">pred</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m <a href="#v:pred" class="selflink">#</a></p><p class="src"><a href="#v:toEnum">toEnum</a> :: <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m <a href="#v:toEnum" class="selflink">#</a></p><p class="src"><a href="#v:fromEnum">fromEnum</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> <a href="#v:fromEnum" class="selflink">#</a></p><p class="src"><a href="#v:enumFrom">enumFrom</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; [<a href="Utils.html#t:Natural" title="Utils">Natural</a> n m] <a href="#v:enumFrom" class="selflink">#</a></p><p class="src"><a href="#v:enumFromThen">enumFromThen</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; [<a href="Utils.html#t:Natural" title="Utils">Natural</a> n m] <a href="#v:enumFromThen" class="selflink">#</a></p><p class="src"><a href="#v:enumFromTo">enumFromTo</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; [<a href="Utils.html#t:Natural" title="Utils">Natural</a> n m] <a href="#v:enumFromTo" class="selflink">#</a></p><p class="src"><a href="#v:enumFromThenTo">enumFromThenTo</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; [<a href="Utils.html#t:Natural" title="Utils">Natural</a> n m] <a href="#v:enumFromThenTo" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Natural:Eq:3"></span> <a href="/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq" title="Data.Eq">Eq</a> (<a href="Utils.html#t:Natural" title="Utils">Natural</a> start end)</span> <a href="src/Utils.Internal.html#line-101" class="link">Source</a> <a href="#t:Natural" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Natural:Eq:3"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Utils-Internal.html">Utils.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:-61--61-">(==)</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-61--61-" class="selflink">#</a></p><p class="src"><a href="#v:-47--61-">(/=)</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-47--61-" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Natural:Num:4"></span> (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> n, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> m) =&gt; <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Num" title="Prelude">Num</a> (<a href="Utils.html#t:Natural" title="Utils">Natural</a> n m)</span> <a href="src/Utils.Internal.html#line-105" class="link">Source</a> <a href="#t:Natural" class="selflink">#</a></td><td class="doc"><p>Throws a runtime error if any of the operations overflows or
48+ underflows.</p></td></tr><tr><td colspan="2"><details id="i:id:Natural:Num:4"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Utils-Internal.html">Utils.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:-43-">(+)</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m <a href="#v:-43-" class="selflink">#</a></p><p class="src"><a href="#v:-45-">(-)</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m <a href="#v:-45-" class="selflink">#</a></p><p class="src"><a href="#v:-42-">(*)</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m <a href="#v:-42-" class="selflink">#</a></p><p class="src"><a href="#v:negate">negate</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m <a href="#v:negate" class="selflink">#</a></p><p class="src"><a href="#v:abs">abs</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m <a href="#v:abs" class="selflink">#</a></p><p class="src"><a href="#v:signum">signum</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m <a href="#v:signum" class="selflink">#</a></p><p class="src"><a href="#v:fromInteger">fromInteger</a> :: <a href="/package/base-4.12.0.0/docs/Prelude.html#t:Integer" title="Prelude">Integer</a> -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m <a href="#v:fromInteger" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Natural:Ord:5"></span> <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord" title="Data.Ord">Ord</a> (<a href="Utils.html#t:Natural" title="Utils">Natural</a> start end)</span> <a href="src/Utils.Internal.html#line-101" class="link">Source</a> <a href="#t:Natural" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Natural:Ord:5"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Utils-Internal.html">Utils.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:compare">compare</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="/package/base-4.12.0.0/docs/Data-Ord.html#t:Ordering" title="Data.Ord">Ordering</a> <a href="#v:compare" class="selflink">#</a></p><p class="src"><a href="#v:-60-">(&lt;)</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-60-" class="selflink">#</a></p><p class="src"><a href="#v:-60--61-">(&lt;=)</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-60--61-" class="selflink">#</a></p><p class="src"><a href="#v:-62-">(&gt;)</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-62-" class="selflink">#</a></p><p class="src"><a href="#v:-62--61-">(&gt;=)</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a> <a href="#v:-62--61-" class="selflink">#</a></p><p class="src"><a href="#v:max">max</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end <a href="#v:max" class="selflink">#</a></p><p class="src"><a href="#v:min">min</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end <a href="#v:min" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Natural:Read:6"></span> <a href="/package/base-4.12.0.0/docs/Text-Read.html#t:Read" title="Text.Read">Read</a> (<a href="Utils.html#t:Natural" title="Utils">Natural</a> start end)</span> <a href="src/Utils.Internal.html#line-101" class="link">Source</a> <a href="#t:Natural" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Natural:Read:6"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Utils-Internal.html">Utils.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:readsPrec">readsPrec</a> :: <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="/package/base-4.12.0.0/docs/Text-ParserCombinators-ReadP.html#t:ReadS" title="Text.ParserCombinators.ReadP">ReadS</a> (<a href="Utils.html#t:Natural" title="Utils">Natural</a> start end) <a href="#v:readsPrec" class="selflink">#</a></p><p class="src"><a href="#v:readList">readList</a> :: <a href="/package/base-4.12.0.0/docs/Text-ParserCombinators-ReadP.html#t:ReadS" title="Text.ParserCombinators.ReadP">ReadS</a> [<a href="Utils.html#t:Natural" title="Utils">Natural</a> start end] <a href="#v:readList" class="selflink">#</a></p><p class="src"><a href="#v:readPrec">readPrec</a> :: <a href="/package/base-4.12.0.0/docs/Text-ParserCombinators-ReadPrec.html#t:ReadPrec" title="Text.ParserCombinators.ReadPrec">ReadPrec</a> (<a href="Utils.html#t:Natural" title="Utils">Natural</a> start end) <a href="#v:readPrec" class="selflink">#</a></p><p class="src"><a href="#v:readListPrec">readListPrec</a> :: <a href="/package/base-4.12.0.0/docs/Text-ParserCombinators-ReadPrec.html#t:ReadPrec" title="Text.ParserCombinators.ReadPrec">ReadPrec</a> [<a href="Utils.html#t:Natural" title="Utils">Natural</a> start end] <a href="#v:readListPrec" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Natural:Show:7"></span> <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:Show" title="Text.Show">Show</a> (<a href="Utils.html#t:Natural" title="Utils">Natural</a> start end)</span> <a href="src/Utils.Internal.html#line-101" class="link">Source</a> <a href="#t:Natural" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Natural:Show:7"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Utils-Internal.html">Utils.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; <a href="/package/base-4.12.0.0/docs/Data-String.html#t:String" title="Data.String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="Utils.html#t:Natural" title="Utils">Natural</a> start end] -&gt; <a href="/package/base-4.12.0.0/docs/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Natural:NFData:8"></span> <a href="/package/deepseq-1.4.4.0/docs/Control-DeepSeq.html#t:NFData" title="Control.DeepSeq">NFData</a> (<a href="Utils.html#t:Natural" title="Utils">Natural</a> start end)</span> <a href="src/Utils.Internal.html#line-101" class="link">Source</a> <a href="#t:Natural" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Natural:NFData:8"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Utils-Internal.html">Utils.Internal</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:rnf">rnf</a> :: <a href="Utils.html#t:Natural" title="Utils">Natural</a> start end -&gt; () <a href="#v:rnf" class="selflink">#</a></p></div></details></td></tr></table></details></div></div><div class="top"><p class="src"><a id="v:nat" class="def">nat</a> :: <span class="keyword">forall</span> n m. (<a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> n, <a href="/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat" title="GHC.TypeNats">KnownNat</a> m) =&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> n m <a href="src/Utils.Internal.html#nat" class="link">Source</a> <a href="#v:nat" class="selflink">#</a></p><div class="doc"><p>Natural constructor function. Throws a runtime error if the <code><a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></code>
49+ value is greater than the corresponding <code>m</code> or lower than <code>n</code> in the <code><code><a href="Utils.html#t:Natural" title="Utils">Natural</a></code> n m</code> type.</p></div></div><a href="#g:1" id="g:1"><h1>Coerce auxiliar functions to help promote <code><a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></code> typed functions to</h1></a><div class="top"><p class="src"><a id="v:coerceNat" class="def">coerceNat</a> :: (<a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>) -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> a a' -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> b b' -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> c c' <a href="src/Utils.Internal.html#coerceNat" class="link">Source</a> <a href="#v:coerceNat" class="selflink">#</a></p><div class="doc"><p>Auxiliary function that promotes binary <code><a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></code> functions to <code><a href="Utils.html#t:Natural" title="Utils">Natural</a></code>
50+ binary functions.</p></div></div><div class="top"><p class="src"><a id="v:coerceNat2" class="def">coerceNat2</a> :: ((<a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>, <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>) -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a>) -&gt; (<a href="Utils.html#t:Natural" title="Utils">Natural</a> a a', <a href="Utils.html#t:Natural" title="Utils">Natural</a> b b') -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> c c' -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> d d' <a href="src/Utils.Internal.html#coerceNat2" class="link">Source</a> <a href="#v:coerceNat2" class="selflink">#</a></p><div class="doc"><p>Auxiliary function that promotes ternary (binary) <code><a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></code> functions to <code><a href="Utils.html#t:Natural" title="Utils">Natural</a></code>
51+ functions.</p></div></div><div class="top"><p class="src"><a id="v:coerceNat3" class="def">coerceNat3</a> :: (<a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; a) -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> b b' -&gt; <a href="Utils.html#t:Natural" title="Utils">Natural</a> c c' -&gt; a <a href="src/Utils.Internal.html#coerceNat3" class="link">Source</a> <a href="#v:coerceNat3" class="selflink">#</a></p><div class="doc"><p>Auxiliary function that promotes ternary (binary) <code><a href="/package/base-4.12.0.0/docs/Data-Int.html#t:Int" title="Data.Int">Int</a></code> functions to <code><a href="Utils.html#t:Natural" title="Utils">Natural</a></code>
52+ functions.</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.22.0</p></div></body></html>
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/doc-index.htmlnew file+1
@@ -0,0 +1 @@
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><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>laop-0.1.0.0: An inductive matrix definition library &#224; la LAoP (Index)</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><link rel="stylesheet" type="text/css" href="quick-jump.css" /><script src="haddock-bundle.min.js" async="async" type="text/javascript"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="/package/laop-0.1.0.0">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">laop-0.1.0.0: An inductive matrix definition library &#224; la LAoP</p></div><div id="content"><div id="index"><p class="caption">Index</p><table><tr><td class="src">-|-</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:-45--124--45-" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:-45--124--45-" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">===</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:-61--61--61-" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:-61--61--61-" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">&gt;&lt;</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:-62--60-" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:-62--60-" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">abideJS</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:abideJS" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:abideJS" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">abideSJ</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:abideSJ" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:abideSJ" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">bang</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:bang" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:bang" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">bindD</td><td class="module"><a href="Dist.html#v:bindD" title="Dist">Dist</a></td></tr><tr><td class="src">bindM</td><td class="module"><a href="Matrix-Type.html#v:bindM" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="src">choose</td><td class="module"><a href="Dist.html#v:choose" title="Dist">Dist</a></td></tr><tr><td class="src">coerceNat</td><td class="module"><a href="Utils.html#v:coerceNat" title="Utils">Utils</a></td></tr><tr><td class="src">coerceNat2</td><td class="module"><a href="Utils.html#v:coerceNat2" title="Utils">Utils</a></td></tr><tr><td class="src">coerceNat3</td><td class="module"><a href="Utils.html#v:coerceNat3" title="Utils">Utils</a></td></tr><tr><td class="src">col</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:col" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:col" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">columns</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:columns" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:columns" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">comp</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:comp" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:comp" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">cond</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:cond" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:cond" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">constant</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:constant" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:constant" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">Count</td><td class="module"><a href="Matrix-Type.html#t:Count" title="Matrix.Type">Matrix.Type</a>, <a href="Matrix-Nat.html#t:Count" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">D</td><td class="module"><a href="Dist.html#v:D" title="Dist">Dist</a></td></tr><tr><td class="src">Dist</td><td class="module"><a href="Dist.html#t:Dist" title="Dist">Dist</a></td></tr><tr><td class="src">empty</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:empty" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:empty" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">fmapD</td><td class="module"><a href="Dist.html#v:fmapD" title="Dist">Dist</a></td></tr><tr><td class="src">fmapM</td><td class="module"><a href="Matrix-Type.html#v:fmapM" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="src">fromF</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:fromF" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:fromF" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">fromF'</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:fromF-39-" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:fromF-39-" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">FromLists</td><td class="module"><a href="Matrix-Type.html#t:FromLists" title="Matrix.Type">Matrix.Type</a>, <a href="Matrix-Nat.html#t:FromLists" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">fromLists</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:fromLists" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:fromLists" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">FromNat</td><td class="module"><a href="Matrix-Type.html#t:FromNat" title="Matrix.Type">Matrix.Type</a>, <a href="Matrix-Nat.html#t:FromNat" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">i1</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:i1" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:i1" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">i2</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:i2" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:i2" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">identity</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:identity" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:identity" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">junc</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:junc" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:junc" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">khatri</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:khatri" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:khatri" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">kp1</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:kp1" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:kp1" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">kp2</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:kp2" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:kp2" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">linear</td><td class="module"><a href="Dist.html#v:linear" title="Dist">Dist</a></td></tr><tr><td class="src">M</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Matrix-Type.html#v:M" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Matrix-Nat.html#v:M" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">Matrix</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Matrix-Type.html#t:Matrix" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Type/Class)</td><td class="module"><a href="Matrix-Nat.html#t:Matrix" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">matrixBuilder</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:matrixBuilder" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:matrixBuilder" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">multD</td><td class="module"><a href="Dist.html#v:multD" title="Dist">Dist</a></td></tr><tr><td class="src">multM</td><td class="module"><a href="Matrix-Type.html#v:multM" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="src">nat</td><td class="module"><a href="Utils.html#v:nat" title="Utils">Utils</a></td></tr><tr><td class="src">Natural</td><td class="module"><a href="Utils.html#t:Natural" title="Utils">Utils</a></td></tr><tr><td class="src">negExp</td><td class="module"><a href="Dist.html#v:negExp" title="Dist">Dist</a></td></tr><tr><td class="src">normal</td><td class="module"><a href="Dist.html#v:normal" title="Dist">Dist</a></td></tr><tr><td class="src">Normalize</td><td class="module"><a href="Matrix-Type.html#t:Normalize" title="Matrix.Type">Matrix.Type</a>, <a href="Matrix-Nat.html#t:Normalize" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">One</td><td class="module"><a href="Matrix-Type.html#t:One" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="src">one</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:one" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:one" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">ones</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:ones" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:ones" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">p1</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:p1" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:p1" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">p2</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:p2" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:p2" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">pretty</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:pretty" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:pretty" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">prettyDist</td><td class="module"><a href="Dist.html#v:prettyDist" title="Dist">Dist</a></td></tr><tr><td class="src">prettyPrint</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:prettyPrint" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:prettyPrint" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">prettyPrintDist</td><td class="module"><a href="Dist.html#v:prettyPrintDist" title="Dist">Dist</a></td></tr><tr><td class="src">Prob</td><td class="module"><a href="Dist.html#t:Prob" title="Dist">Dist</a></td></tr><tr><td class="src">returnD</td><td class="module"><a href="Dist.html#v:returnD" title="Dist">Dist</a></td></tr><tr><td class="src">returnM</td><td class="module"><a href="Matrix-Type.html#v:returnM" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="src">row</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:row" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:row" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">rows</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:rows" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:rows" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">select</td><td class="module"><a href="Matrix-Nat.html#v:select" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">selectD</td><td class="module"><a href="Dist.html#v:selectD" title="Dist">Dist</a></td></tr><tr><td class="src">selectM</td><td class="module"><a href="Matrix-Type.html#v:selectM" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="src">shape</td><td class="module"><a href="Dist.html#v:shape" title="Dist">Dist</a></td></tr><tr><td class="src">split</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:split" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:split" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">toList</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:toList" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:toList" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">toLists</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:toLists" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:toLists" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">toValues</td><td class="module"><a href="Dist.html#v:toValues" title="Dist">Dist</a></td></tr><tr><td class="src">tr</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:tr" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:tr" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">uniform</td><td class="module"><a href="Dist.html#v:uniform" title="Dist">Dist</a></td></tr><tr><td class="src">unitD</td><td class="module"><a href="Dist.html#v:unitD" title="Dist">Dist</a></td></tr><tr><td class="src">unitM</td><td class="module"><a href="Matrix-Type.html#v:unitM" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="src">Zero</td><td class="module"><a href="Matrix-Type.html#t:Zero" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="src">zeros</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:zeros" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:zeros" title="Matrix.Nat">Matrix.Nat</a></td></tr><tr><td class="src">|||</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Function)</td><td class="module"><a href="Matrix-Type.html#v:-124--124--124-" title="Matrix.Type">Matrix.Type</a></td></tr><tr><td class="alt">2 (Function)</td><td class="module"><a href="Matrix-Nat.html#v:-124--124--124-" title="Matrix.Nat">Matrix.Nat</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.22.0</p></div></body></html>
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/doc-index.jsonnew file+1
@@ -0,0 +1 @@
1+[{"display_html":"<span class=\"keyword\">data</span> <a href=\"#t:Natural\">Natural</a> (start :: <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat\" title=\"GHC.TypeNats\">Nat</a>) (end :: <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat\" title=\"GHC.TypeNats\">Nat</a>)","name":"Natural","module":"Utils","link":"Utils.html#t:Natural"},{"display_html":"<a href=\"#v:nat\">nat</a> :: <span class=\"keyword\">forall</span> n m. (<a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> n, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> m) =&gt; <a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a> -&gt; <a href=\"Utils.html#t:Natural\" title=\"Utils\">Natural</a> n m","name":"nat","module":"Utils","link":"Utils.html#v:nat"},{"display_html":"<a href=\"#v:coerceNat\">coerceNat</a> :: (<a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a> -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a> -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a>) -&gt; <a href=\"Utils.html#t:Natural\" title=\"Utils\">Natural</a> a a' -&gt; <a href=\"Utils.html#t:Natural\" title=\"Utils\">Natural</a> b b' -&gt; <a href=\"Utils.html#t:Natural\" title=\"Utils\">Natural</a> c c'","name":"coerceNat","module":"Utils","link":"Utils.html#v:coerceNat"},{"display_html":"<a href=\"#v:coerceNat2\">coerceNat2</a> :: ((<a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a>, <a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a>) -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a> -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a>) -&gt; (<a href=\"Utils.html#t:Natural\" title=\"Utils\">Natural</a> a a', <a href=\"Utils.html#t:Natural\" title=\"Utils\">Natural</a> b b') -&gt; <a href=\"Utils.html#t:Natural\" title=\"Utils\">Natural</a> c c' -&gt; <a href=\"Utils.html#t:Natural\" title=\"Utils\">Natural</a> d d'","name":"coerceNat2","module":"Utils","link":"Utils.html#v:coerceNat2"},{"display_html":"<a href=\"#v:coerceNat3\">coerceNat3</a> :: (<a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a> -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a> -&gt; a) -&gt; <a href=\"Utils.html#t:Natural\" title=\"Utils\">Natural</a> b b' -&gt; <a href=\"Utils.html#t:Natural\" title=\"Utils\">Natural</a> c c' -&gt; a","name":"coerceNat3","module":"Utils","link":"Utils.html#v:coerceNat3"},{"display_html":"<span class=\"keyword\">newtype</span> <a href=\"#t:Matrix\">Matrix</a> e (cols :: <a href=\"/package/base-4.12.0.0/docs/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a>) (rows :: <a href=\"/package/base-4.12.0.0/docs/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a>) = <a href=\"#v:M\">M</a> (Matrix e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows))","name":"Matrix M","module":"Matrix.Type","link":"Matrix-Type.html#t:Matrix"},{"display_html":"<span class=\"keyword\">type</span> <a href=\"#t:Zero\">Zero</a> = <a href=\"/package/base-4.12.0.0/docs/Data-Void.html#t:Void\" title=\"Data.Void\">Void</a>","name":"Zero","module":"Matrix.Type","link":"Matrix-Type.html#t:Zero"},{"display_html":"<span class=\"keyword\">type</span> <a href=\"#t:One\">One</a> = ()","name":"One","module":"Matrix.Type","link":"Matrix-Type.html#t:One"},{"display_html":"<a href=\"#v:empty\">empty</a> :: <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e <a href=\"Matrix-Type.html#t:Zero\" title=\"Matrix.Type\">Zero</a> <a href=\"Matrix-Type.html#t:Zero\" title=\"Matrix.Type\">Zero</a>","name":"empty","module":"Matrix.Type","link":"Matrix-Type.html#v:empty"},{"display_html":"<a href=\"#v:one\">one</a> :: e -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e <a href=\"Matrix-Type.html#t:One\" title=\"Matrix.Type\">One</a> <a href=\"Matrix-Type.html#t:One\" title=\"Matrix.Type\">One</a>","name":"one","module":"Matrix.Type","link":"Matrix-Type.html#v:one"},{"display_html":"<a href=\"#v:junc\">junc</a> :: <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> a b) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e a rows -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e b rows -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> a b) rows","name":"junc","module":"Matrix.Type","link":"Matrix-Type.html#v:junc"},{"display_html":"<a href=\"#v:split\">split</a> :: <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> a b) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols a -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols b -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> a b)","name":"split","module":"Matrix.Type","link":"Matrix-Type.html#v:split"},{"display_html":"<span class=\"keyword\">type family</span> <a href=\"#t:FromNat\">FromNat</a> (n :: <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat\" title=\"GHC.TypeNats\">Nat</a>) :: <a href=\"/package/base-4.12.0.0/docs/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a> <span class=\"keyword\">where ...</span>","name":"FromNat","module":"Matrix.Type","link":"Matrix-Type.html#t:FromNat"},{"display_html":"<span class=\"keyword\">type family</span> <a href=\"#t:Count\">Count</a> (d :: <a href=\"/package/base-4.12.0.0/docs/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a>) :: <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat\" title=\"GHC.TypeNats\">Nat</a> <span class=\"keyword\">where ...</span>","name":"Count","module":"Matrix.Type","link":"Matrix-Type.html#t:Count"},{"display_html":"<span class=\"keyword\">type family</span> <a href=\"#t:Normalize\">Normalize</a> (d :: <a href=\"/package/base-4.12.0.0/docs/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a>) :: <a href=\"/package/base-4.12.0.0/docs/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a> <span class=\"keyword\">where ...</span>","name":"Normalize","module":"Matrix.Type","link":"Matrix-Type.html#t:Normalize"},{"display_html":"<span class=\"keyword\">class</span> <a href=\"#t:FromLists\">FromLists</a> e cols rows","name":"FromLists","module":"Matrix.Type","link":"Matrix-Type.html#t:FromLists"},{"display_html":"<a href=\"#v:fromLists\">fromLists</a> :: <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows) =&gt; [[e]] -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows","name":"fromLists","module":"Matrix.Type","link":"Matrix-Type.html#v:fromLists"},{"display_html":"<a href=\"#v:toLists\">toLists</a> :: <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows -&gt; [[e]]","name":"toLists","module":"Matrix.Type","link":"Matrix-Type.html#v:toLists"},{"display_html":"<a href=\"#v:toList\">toList</a> :: <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows -&gt; [e]","name":"toList","module":"Matrix.Type","link":"Matrix-Type.html#v:toList"},{"display_html":"<a href=\"#v:matrixBuilder\">matrixBuilder</a> :: (<a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows))) =&gt; ((<a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a>, <a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a>) -&gt; e) -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows","name":"matrixBuilder","module":"Matrix.Type","link":"Matrix-Type.html#v:matrixBuilder"},{"display_html":"<a href=\"#v:row\">row</a> :: <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols) () =&gt; [e] -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols <a href=\"Matrix-Type.html#t:One\" title=\"Matrix.Type\">One</a>","name":"row","module":"Matrix.Type","link":"Matrix-Type.html#v:row"},{"display_html":"<a href=\"#v:col\">col</a> :: <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e () (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows) =&gt; [e] -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e <a href=\"Matrix-Type.html#t:One\" title=\"Matrix.Type\">One</a> rows","name":"col","module":"Matrix.Type","link":"Matrix-Type.html#v:col"},{"display_html":"<a href=\"#v:zeros\">zeros</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows))) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows","name":"zeros","module":"Matrix.Type","link":"Matrix-Type.html#v:zeros"},{"display_html":"<a href=\"#v:ones\">ones</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows))) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows","name":"ones","module":"Matrix.Type","link":"Matrix-Type.html#v:ones"},{"display_html":"<a href=\"#v:bang\">bang</a> :: <span class=\"keyword\">forall</span> e cols. (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> e, <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols) (), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols))) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols <a href=\"Matrix-Type.html#t:One\" title=\"Matrix.Type\">One</a>","name":"bang","module":"Matrix.Type","link":"Matrix-Type.html#v:bang"},{"display_html":"<a href=\"#v:constant\">constant</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows))) =&gt; e -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows","name":"constant","module":"Matrix.Type","link":"Matrix-Type.html#v:constant"},{"display_html":"<a href=\"#v:fmapM\">fmapM</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> b, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> b, <a href=\"/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq\" title=\"Data.Eq\">Eq</a> b, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord\" title=\"Data.Ord\">Ord</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b)), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a)) =&gt; (a -&gt; b) -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e c a -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e c b","name":"fmapM","module":"Matrix.Type","link":"Matrix-Type.html#v:fmapM"},{"display_html":"<a href=\"#v:unitM\">unitM</a> :: <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e () ()","name":"unitM","module":"Matrix.Type","link":"Matrix-Type.html#v:unitM"},{"display_html":"<a href=\"#v:multM\">multM</a> :: (<a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (a, b))), <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (a, b)) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (a, b)) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (a, b) ~ <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a, <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b)) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e c a -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e c b -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e c (a, b)","name":"multM","module":"Matrix.Type","link":"Matrix-Type.html#v:multM"},{"display_html":"<a href=\"#v:selectM\">selectM</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b)), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> a b) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b)) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> a b) -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e a b -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols b","name":"selectM","module":"Matrix.Type","link":"Matrix-Type.html#v:selectM"},{"display_html":"<a href=\"#v:returnM\">returnM</a> :: <span class=\"keyword\">forall</span> e a. (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> e, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> a, <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e () (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> a)) =&gt; a -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e <a href=\"Matrix-Type.html#t:One\" title=\"Matrix.Type\">One</a> a","name":"returnM","module":"Matrix.Type","link":"Matrix-Type.html#v:returnM"},{"display_html":"<a href=\"#v:bindM\">bindM</a> :: <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e a b -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e b c -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e a c","name":"bindM","module":"Matrix.Type","link":"Matrix-Type.html#v:bindM"},{"display_html":"<a href=\"#v:columns\">columns</a> :: <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols)) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a>","name":"columns","module":"Matrix.Type","link":"Matrix-Type.html#v:columns"},{"display_html":"<a href=\"#v:rows\">rows</a> :: <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows)) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a>","name":"rows","module":"Matrix.Type","link":"Matrix-Type.html#v:rows"},{"display_html":"<a href=\"#v:tr\">tr</a> :: <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e rows cols","name":"tr","module":"Matrix.Type","link":"Matrix-Type.html#v:tr"},{"display_html":"<a href=\"#v:cond\">cond</a> :: (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) ~ <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a)), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e () (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) (), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a), <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord\" title=\"Data.Ord\">Ord</a> e) =&gt; (a -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool\" title=\"Data.Bool\">Bool</a>) -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e a b -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e a b -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e a b","name":"cond","module":"Matrix.Type","link":"Matrix-Type.html#v:cond"},{"display_html":"<a href=\"#v:abideJS\">abideJS</a> :: <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows","name":"abideJS","module":"Matrix.Type","link":"Matrix-Type.html#v:abideJS"},{"display_html":"<a href=\"#v:abideSJ\">abideSJ</a> :: <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows","name":"abideSJ","module":"Matrix.Type","link":"Matrix-Type.html#v:abideSJ"},{"display_html":"<a href=\"#v:-61--61--61-\">(===)</a> :: <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> a b) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols a -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols b -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> a b)","name":"===","module":"Matrix.Type","link":"Matrix-Type.html#v:-61--61--61-"},{"display_html":"<a href=\"#v:p1\">p1</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m)), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> m n) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n)) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> m n) m","name":"p1","module":"Matrix.Type","link":"Matrix-Type.html#v:p1"},{"display_html":"<a href=\"#v:p2\">p2</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m)), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> m n) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n)) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> m n) n","name":"p2","module":"Matrix.Type","link":"Matrix-Type.html#v:p2"},{"display_html":"<a href=\"#v:-124--124--124-\">(|||)</a> :: <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> a b) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e a rows -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e b rows -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> a b) rows","name":"|||","module":"Matrix.Type","link":"Matrix-Type.html#v:-124--124--124-"},{"display_html":"<a href=\"#v:i1\">i1</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m)), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> m n) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n)) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e m (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> m n)","name":"i1","module":"Matrix.Type","link":"Matrix-Type.html#v:i1"},{"display_html":"<a href=\"#v:i2\">i2</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m)), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> m n) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n)) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e n (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> m n)","name":"i2","module":"Matrix.Type","link":"Matrix-Type.html#v:i2"},{"display_html":"<a href=\"#v:-45--124--45-\">(-|-)</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> j)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> k)), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> k) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> k), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> j) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> k), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> k) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> j), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> j) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> j), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> n m) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> k j) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> k) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> j)) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e n k -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e m j -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> n m) (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> k j)","name":"-|-","module":"Matrix.Type","link":"Matrix-Type.html#v:-45--124--45-"},{"display_html":"<a href=\"#v:-62--60-\">(&gt;&lt;)</a> :: <span class=\"keyword\">forall</span> e m p n q. (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> p)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> q)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (m, n))), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (p, q))), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (m, n)) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (m, n)) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (p, q)) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> p), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (p, q)) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> q), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (m, n) ~ <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m, <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> n), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (p, q) ~ <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> p, <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> q)) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e m p -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e n q -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e (m, n) (p, q)","name":"><","module":"Matrix.Type","link":"Matrix-Type.html#v:-62--60-"},{"display_html":"<a href=\"#v:kp1\">kp1</a> :: <span class=\"keyword\">forall</span> e m k. (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> k)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (m, k))), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (m, k)) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (m, k) ~ <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m, <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> k)) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e (m, k) m","name":"kp1","module":"Matrix.Type","link":"Matrix-Type.html#v:kp1"},{"display_html":"<a href=\"#v:kp2\">kp2</a> :: <span class=\"keyword\">forall</span> e m k. (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> k)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (m, k))), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (m, k)) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> k), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (m, k) ~ <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> m, <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> k)) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e (m, k) k","name":"kp2","module":"Matrix.Type","link":"Matrix-Type.html#v:kp2"},{"display_html":"<a href=\"#v:khatri\">khatri</a> :: <span class=\"keyword\">forall</span> e cols a b. (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (a, b))), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (a, b)) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (a, b)) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (a, b) ~ <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a, <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b)) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols a -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols b -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols (a, b)","name":"khatri","module":"Matrix.Type","link":"Matrix-Type.html#v:khatri"},{"display_html":"<a href=\"#v:identity\">identity</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a))) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e a a","name":"identity","module":"Matrix.Type","link":"Matrix-Type.html#v:identity"},{"display_html":"<a href=\"#v:comp\">comp</a> :: <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cr rows -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols cr -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows","name":"comp","module":"Matrix.Type","link":"Matrix-Type.html#v:comp"},{"display_html":"<a href=\"#v:fromF\">fromF</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> b, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> b, <a href=\"/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq\" title=\"Data.Eq\">Eq</a> b, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord\" title=\"Data.Ord\">Ord</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows)), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> rows) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols)) =&gt; (a -&gt; b) -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows","name":"fromF","module":"Matrix.Type","link":"Matrix-Type.html#v:fromF"},{"display_html":"<a href=\"#v:fromF-39-\">fromF'</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> b, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> b, <a href=\"/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq\" title=\"Data.Eq\">Eq</a> b, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord\" title=\"Data.Ord\">Ord</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b)), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> e (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a)) =&gt; (a -&gt; b) -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e a b","name":"fromF'","module":"Matrix.Type","link":"Matrix-Type.html#v:fromF-39-"},{"display_html":"<a href=\"#v:pretty\">pretty</a> :: (<a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols)), <a href=\"/package/base-4.12.0.0/docs/Text-Show.html#t:Show\" title=\"Text.Show\">Show</a> e) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-String.html#t:String\" title=\"Data.String\">String</a>","name":"pretty","module":"Matrix.Type","link":"Matrix-Type.html#v:pretty"},{"display_html":"<a href=\"#v:prettyPrint\">prettyPrint</a> :: (<a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> cols)), <a href=\"/package/base-4.12.0.0/docs/Text-Show.html#t:Show\" title=\"Text.Show\">Show</a> e) =&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> e cols rows -&gt; <a href=\"/package/base-4.12.0.0/docs/System-IO.html#t:IO\" title=\"System.IO\">IO</a> ()","name":"prettyPrint","module":"Matrix.Type","link":"Matrix-Type.html#v:prettyPrint"},{"display_html":"<span class=\"keyword\">newtype</span> <a href=\"#t:Matrix\">Matrix</a> e (cols :: <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat\" title=\"GHC.TypeNats\">Nat</a>) (rows :: <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat\" title=\"GHC.TypeNats\">Nat</a>) = <a href=\"#v:M\">M</a> (Matrix e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows))","name":"Matrix M","module":"Matrix.Nat","link":"Matrix-Nat.html#t:Matrix"},{"display_html":"<a href=\"#v:empty\">empty</a> :: <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e 0 0","name":"empty","module":"Matrix.Nat","link":"Matrix-Nat.html#v:empty"},{"display_html":"<a href=\"#v:one\">one</a> :: e -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e 1 1","name":"one","module":"Matrix.Nat","link":"Matrix-Nat.html#v:one"},{"display_html":"<a href=\"#v:junc\">junc</a> :: <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols3 ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols1) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols2) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols1 rows -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols2 rows -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols3 rows","name":"junc","module":"Matrix.Nat","link":"Matrix-Nat.html#v:junc"},{"display_html":"<a href=\"#v:split\">split</a> :: <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows3 ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows1) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows2) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows1 -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows2 -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows3","name":"split","module":"Matrix.Nat","link":"Matrix-Nat.html#v:split"},{"display_html":"<span class=\"keyword\">type family</span> <a href=\"#t:FromNat\">FromNat</a> (n :: <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat\" title=\"GHC.TypeNats\">Nat</a>) :: <a href=\"/package/base-4.12.0.0/docs/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a> <span class=\"keyword\">where ...</span>","name":"FromNat","module":"Matrix.Nat","link":"Matrix-Nat.html#t:FromNat"},{"display_html":"<span class=\"keyword\">type family</span> <a href=\"#t:Count\">Count</a> (d :: <a href=\"/package/base-4.12.0.0/docs/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a>) :: <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:Nat\" title=\"GHC.TypeNats\">Nat</a> <span class=\"keyword\">where ...</span>","name":"Count","module":"Matrix.Nat","link":"Matrix-Nat.html#t:Count"},{"display_html":"<span class=\"keyword\">type family</span> <a href=\"#t:Normalize\">Normalize</a> (d :: <a href=\"/package/base-4.12.0.0/docs/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a>) :: <a href=\"/package/base-4.12.0.0/docs/Data-Kind.html#t:Type\" title=\"Data.Kind\">Type</a> <span class=\"keyword\">where ...</span>","name":"Normalize","module":"Matrix.Nat","link":"Matrix-Nat.html#t:Normalize"},{"display_html":"<span class=\"keyword\">class</span> <a href=\"#t:FromLists\">FromLists</a> e cols rows","name":"FromLists","module":"Matrix.Nat","link":"Matrix-Nat.html#t:FromLists"},{"display_html":"<a href=\"#v:fromLists\">fromLists</a> :: <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows) =&gt; [[e]] -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows","name":"fromLists","module":"Matrix.Nat","link":"Matrix-Nat.html#v:fromLists"},{"display_html":"<a href=\"#v:toLists\">toLists</a> :: <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows -&gt; [[e]]","name":"toLists","module":"Matrix.Nat","link":"Matrix-Nat.html#v:toLists"},{"display_html":"<a href=\"#v:toList\">toList</a> :: <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows -&gt; [e]","name":"toList","module":"Matrix.Nat","link":"Matrix-Nat.html#v:toList"},{"display_html":"<a href=\"#v:matrixBuilder\">matrixBuilder</a> :: (<a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows))) =&gt; ((<a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a>, <a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a>) -&gt; e) -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows","name":"matrixBuilder","module":"Matrix.Nat","link":"Matrix-Nat.html#v:matrixBuilder"},{"display_html":"<a href=\"#v:row\">row</a> :: <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols) () =&gt; [e] -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols 1","name":"row","module":"Matrix.Nat","link":"Matrix-Nat.html#v:row"},{"display_html":"<a href=\"#v:col\">col</a> :: <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e () (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows) =&gt; [e] -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e 1 rows","name":"col","module":"Matrix.Nat","link":"Matrix-Nat.html#v:col"},{"display_html":"<a href=\"#v:zeros\">zeros</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows))) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows","name":"zeros","module":"Matrix.Nat","link":"Matrix-Nat.html#v:zeros"},{"display_html":"<a href=\"#v:ones\">ones</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows))) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows","name":"ones","module":"Matrix.Nat","link":"Matrix-Nat.html#v:ones"},{"display_html":"<a href=\"#v:bang\">bang</a> :: <span class=\"keyword\">forall</span> e cols. (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> e, <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols) (), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols))) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols 1","name":"bang","module":"Matrix.Nat","link":"Matrix-Nat.html#v:bang"},{"display_html":"<a href=\"#v:constant\">constant</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows))) =&gt; e -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows","name":"constant","module":"Matrix.Nat","link":"Matrix-Nat.html#v:constant"},{"display_html":"<a href=\"#v:columns\">columns</a> :: <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols)) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a>","name":"columns","module":"Matrix.Nat","link":"Matrix-Nat.html#v:columns"},{"display_html":"<a href=\"#v:rows\">rows</a> :: <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows)) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-Int.html#t:Int\" title=\"Data.Int\">Int</a>","name":"rows","module":"Matrix.Nat","link":"Matrix-Nat.html#v:rows"},{"display_html":"<a href=\"#v:tr\">tr</a> :: <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e rows cols","name":"tr","module":"Matrix.Nat","link":"Matrix-Nat.html#v:tr"},{"display_html":"<a href=\"#v:select\">select</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows1) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows1), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows1)), <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows2 ~ <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows1, <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols1 ~ <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols2, <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows3 ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols3) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows1)) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols1 rows3 -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols3 rows1 -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols2 rows2","name":"select","module":"Matrix.Nat","link":"Matrix-Nat.html#v:select"},{"display_html":"<a href=\"#v:cond\">cond</a> :: (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols)) ~ <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols)), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e () (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols) (), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols), <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord\" title=\"Data.Ord\">Ord</a> e) =&gt; (a -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-Bool.html#t:Bool\" title=\"Data.Bool\">Bool</a>) -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows","name":"cond","module":"Matrix.Nat","link":"Matrix-Nat.html#v:cond"},{"display_html":"<a href=\"#v:abideJS\">abideJS</a> :: <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows","name":"abideJS","module":"Matrix.Nat","link":"Matrix-Nat.html#v:abideJS"},{"display_html":"<a href=\"#v:abideSJ\">abideSJ</a> :: <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows","name":"abideSJ","module":"Matrix.Nat","link":"Matrix-Nat.html#v:abideSJ"},{"display_html":"<a href=\"#v:-61--61--61-\">(===)</a> :: <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows3 ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows1) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows2) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows1 -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows2 -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows3","name":"===","module":"Matrix.Nat","link":"Matrix-Nat.html#v:-61--61--61-"},{"display_html":"<a href=\"#v:p1\">p1</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m)), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m), <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-\" title=\"GHC.TypeNats\">+</a> n) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n)) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-\" title=\"GHC.TypeNats\">+</a> n) m","name":"p1","module":"Matrix.Nat","link":"Matrix-Nat.html#v:p1"},{"display_html":"<a href=\"#v:p2\">p2</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m)), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n), <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-\" title=\"GHC.TypeNats\">+</a> n) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n)) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-\" title=\"GHC.TypeNats\">+</a> n) n","name":"p2","module":"Matrix.Nat","link":"Matrix-Nat.html#v:p2"},{"display_html":"<a href=\"#v:-124--124--124-\">(|||)</a> :: <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols3 ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols1) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols2) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols1 rows -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols2 rows -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols3 rows","name":"|||","module":"Matrix.Nat","link":"Matrix-Nat.html#v:-124--124--124-"},{"display_html":"<a href=\"#v:i1\">i1</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows)), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows), <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (rows <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-\" title=\"GHC.TypeNats\">+</a> n) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n)) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e rows (rows <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-\" title=\"GHC.TypeNats\">+</a> n)","name":"i1","module":"Matrix.Nat","link":"Matrix-Nat.html#v:i1"},{"display_html":"<a href=\"#v:i2\">i2</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m)), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows), <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-\" title=\"GHC.TypeNats\">+</a> rows) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows)) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e rows (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-\" title=\"GHC.TypeNats\">+</a> rows)","name":"i2","module":"Matrix.Nat","link":"Matrix-Nat.html#v:i2"},{"display_html":"<a href=\"#v:-45--124--45-\">(-|-)</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> j)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> k)), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> k) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> k), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> j) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> k), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> k) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> j), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> j) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> j), <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (n <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-\" title=\"GHC.TypeNats\">+</a> m) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m), <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (k <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-\" title=\"GHC.TypeNats\">+</a> j) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> k) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> j)) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e n k -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e m j -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e (n <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-\" title=\"GHC.TypeNats\">+</a> m) (k <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-43-\" title=\"GHC.TypeNats\">+</a> j)","name":"-|-","module":"Matrix.Nat","link":"Matrix-Nat.html#v:-45--124--45-"},{"display_html":"<a href=\"#v:-62--60-\">(&gt;&lt;)</a> :: <span class=\"keyword\">forall</span> e m p n q. (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> p)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> q)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> n))), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (p <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> q))), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> n)) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> n)) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (p <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> q)) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> p), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (p <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> q)) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> q), <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> n) ~ <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m) <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> <a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> n)), <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (p <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> q) ~ <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> p) <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> <a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> q))) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e m p -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e n q -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> n) (p <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> q)","name":"><","module":"Matrix.Nat","link":"Matrix-Nat.html#v:-62--60-"},{"display_html":"<a href=\"#v:kp1\">kp1</a> :: <span class=\"keyword\">forall</span> e m k. (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> k)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> k))), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> k)) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m), <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> k) ~ <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m) <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> <a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> k))) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> k) m","name":"kp1","module":"Matrix.Nat","link":"Matrix-Nat.html#v:kp1"},{"display_html":"<a href=\"#v:kp2\">kp2</a> :: <span class=\"keyword\">forall</span> e m k. (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> k)), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> k)) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> k), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> k))), <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> k) ~ <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> m) <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> <a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> k))) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e (m <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> k) k","name":"kp2","module":"Matrix.Nat","link":"Matrix-Nat.html#v:kp2"},{"display_html":"<a href=\"#v:khatri\">khatri</a> :: <span class=\"keyword\">forall</span> e cols a b. (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> a)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> b)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (a <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> b))), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (a <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> b)) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> a), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (a <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> b)) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> b), <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (a <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> b) ~ <a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> a) <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> <a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> b))) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols a -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols b -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols (a <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:-42-\" title=\"GHC.TypeNats\">*</a> b)","name":"khatri","module":"Matrix.Nat","link":"Matrix-Nat.html#v:khatri"},{"display_html":"<a href=\"#v:identity\">identity</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols))) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols cols","name":"identity","module":"Matrix.Nat","link":"Matrix-Nat.html#v:identity"},{"display_html":"<a href=\"#v:comp\">comp</a> :: <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cr rows -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols cr -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows","name":"comp","module":"Matrix.Nat","link":"Matrix-Nat.html#v:comp"},{"display_html":"<a href=\"#v:fromF\">fromF</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> b, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> b, <a href=\"/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq\" title=\"Data.Eq\">Eq</a> b, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord\" title=\"Data.Ord\">Ord</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows)), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> rows) (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols)) =&gt; (a -&gt; b) -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows","name":"fromF","module":"Matrix.Nat","link":"Matrix-Nat.html#v:fromF"},{"display_html":"<a href=\"#v:fromF-39-\">fromF'</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> b, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> b, <a href=\"/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq\" title=\"Data.Eq\">Eq</a> b, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Num\" title=\"Prelude\">Num</a> e, <a href=\"/package/base-4.12.0.0/docs/Data-Ord.html#t:Ord\" title=\"Data.Ord\">Ord</a> e, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:Normalize\" title=\"Matrix.Nat\">Normalize</a> a)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:Normalize\" title=\"Matrix.Nat\">Normalize</a> b)), <a href=\"Matrix-Nat.html#t:FromLists\" title=\"Matrix.Nat\">FromLists</a> e (<a href=\"Matrix-Nat.html#t:Normalize\" title=\"Matrix.Nat\">Normalize</a> b) (<a href=\"Matrix-Nat.html#t:Normalize\" title=\"Matrix.Nat\">Normalize</a> a)) =&gt; (a -&gt; b) -&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> a) (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> b)","name":"fromF'","module":"Matrix.Nat","link":"Matrix-Nat.html#v:fromF-39-"},{"display_html":"<a href=\"#v:pretty\">pretty</a> :: (<a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols)), <a href=\"/package/base-4.12.0.0/docs/Text-Show.html#t:Show\" title=\"Text.Show\">Show</a> e) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-String.html#t:String\" title=\"Data.String\">String</a>","name":"pretty","module":"Matrix.Nat","link":"Matrix-Nat.html#v:pretty"},{"display_html":"<a href=\"#v:prettyPrint\">prettyPrint</a> :: (<a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Nat.html#t:Count\" title=\"Matrix.Nat\">Count</a> (<a href=\"Matrix-Nat.html#t:FromNat\" title=\"Matrix.Nat\">FromNat</a> cols)), <a href=\"/package/base-4.12.0.0/docs/Text-Show.html#t:Show\" title=\"Text.Show\">Show</a> e) =&gt; <a href=\"Matrix-Nat.html#t:Matrix\" title=\"Matrix.Nat\">Matrix</a> e cols rows -&gt; <a href=\"/package/base-4.12.0.0/docs/System-IO.html#t:IO\" title=\"System.IO\">IO</a> ()","name":"prettyPrint","module":"Matrix.Nat","link":"Matrix-Nat.html#v:prettyPrint"},{"display_html":"<span class=\"keyword\">newtype</span> <a href=\"#t:Dist\">Dist</a> a = <a href=\"#v:D\">D</a> (<a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> () a)","name":"Dist D","module":"Dist","link":"Dist.html#t:Dist"},{"display_html":"<span class=\"keyword\">type</span> <a href=\"#t:Prob\">Prob</a> = <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Double\" title=\"Prelude\">Double</a>","name":"Prob","module":"Dist","link":"Dist.html#t:Prob"},{"display_html":"<a href=\"#v:fmapD\">fmapD</a> :: (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Bounded\" title=\"Prelude\">Bounded</a> b, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> b, <a href=\"/package/base-4.12.0.0/docs/Data-Eq.html#t:Eq\" title=\"Data.Eq\">Eq</a> b, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b)), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a)) =&gt; (a -&gt; b) -&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> a -&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> b","name":"fmapD","module":"Dist","link":"Dist.html#v:fmapD"},{"display_html":"<a href=\"#v:unitD\">unitD</a> :: <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> ()","name":"unitD","module":"Dist","link":"Dist.html#v:unitD"},{"display_html":"<a href=\"#v:multD\">multD</a> :: (<a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b)), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (a, b))), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (a, b)) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (a, b)) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b), <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (a, b) ~ <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a, <a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b)) =&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> a -&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> b -&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> (a, b)","name":"multD","module":"Dist","link":"Dist.html#v:multD"},{"display_html":"<a href=\"#v:selectD\">selectD</a> :: (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> a b) ~ <a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b) (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> b))) =&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> (<a href=\"/package/base-4.12.0.0/docs/Data-Either.html#t:Either\" title=\"Data.Either\">Either</a> a b) -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> a b -&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> b","name":"selectD","module":"Dist","link":"Dist.html#v:selectD"},{"display_html":"<a href=\"#v:returnD\">returnD</a> :: <span class=\"keyword\">forall</span> a. (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> a, <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> () (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a), <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> a)) =&gt; a -&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> a","name":"returnD","module":"Dist","link":"Dist.html#v:returnD"},{"display_html":"<a href=\"#v:bindD\">bindD</a> :: <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> a -&gt; <a href=\"Matrix-Type.html#t:Matrix\" title=\"Matrix.Type\">Matrix</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> a b -&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> b","name":"bindD","module":"Dist","link":"Dist.html#v:bindD"},{"display_html":"<a href=\"#v:choose\">choose</a> :: <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> () (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) =&gt; <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> -&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> a","name":"choose","module":"Dist","link":"Dist.html#v:choose"},{"display_html":"<a href=\"#v:shape\">shape</a> :: <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> () (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) =&gt; (<a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> -&gt; <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a>) -&gt; [a] -&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> a","name":"shape","module":"Dist","link":"Dist.html#v:shape"},{"display_html":"<a href=\"#v:linear\">linear</a> :: <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> () (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) =&gt; [a] -&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> a","name":"linear","module":"Dist","link":"Dist.html#v:linear"},{"display_html":"<a href=\"#v:uniform\">uniform</a> :: <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> () (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) =&gt; [a] -&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> a","name":"uniform","module":"Dist","link":"Dist.html#v:uniform"},{"display_html":"<a href=\"#v:negExp\">negExp</a> :: <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> () (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) =&gt; [a] -&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> a","name":"negExp","module":"Dist","link":"Dist.html#v:negExp"},{"display_html":"<a href=\"#v:normal\">normal</a> :: <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> () (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a) =&gt; [a] -&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> a","name":"normal","module":"Dist","link":"Dist.html#v:normal"},{"display_html":"<a href=\"#v:toValues\">toValues</a> :: <span class=\"keyword\">forall</span> a. (<a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> a, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> a), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> () (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a)) =&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> a -&gt; [(a, <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a>)]","name":"toValues","module":"Dist","link":"Dist.html#v:toValues"},{"display_html":"<a href=\"#v:prettyDist\">prettyDist</a> :: <span class=\"keyword\">forall</span> a. (<a href=\"/package/base-4.12.0.0/docs/Text-Show.html#t:Show\" title=\"Text.Show\">Show</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> a, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> a), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> () (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a)) =&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> a -&gt; <a href=\"/package/base-4.12.0.0/docs/Data-String.html#t:String\" title=\"Data.String\">String</a>","name":"prettyDist","module":"Dist","link":"Dist.html#v:prettyDist"},{"display_html":"<a href=\"#v:prettyPrintDist\">prettyPrintDist</a> :: <span class=\"keyword\">forall</span> a. (<a href=\"/package/base-4.12.0.0/docs/Text-Show.html#t:Show\" title=\"Text.Show\">Show</a> a, <a href=\"/package/base-4.12.0.0/docs/Prelude.html#t:Enum\" title=\"Prelude\">Enum</a> a, <a href=\"/package/base-4.12.0.0/docs/GHC-TypeNats.html#t:KnownNat\" title=\"GHC.TypeNats\">KnownNat</a> (<a href=\"Matrix-Type.html#t:Count\" title=\"Matrix.Type\">Count</a> a), <a href=\"Matrix-Type.html#t:FromLists\" title=\"Matrix.Type\">FromLists</a> <a href=\"Dist.html#t:Prob\" title=\"Dist\">Prob</a> () (<a href=\"Matrix-Type.html#t:Normalize\" title=\"Matrix.Type\">Normalize</a> a)) =&gt; <a href=\"Dist.html#t:Dist\" title=\"Dist\">Dist</a> a -&gt; <a href=\"/package/base-4.12.0.0/docs/System-IO.html#t:IO\" title=\"System.IO\">IO</a> ()","name":"prettyPrintDist","module":"Dist","link":"Dist.html#v:prettyPrintDist"}]
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/haddock-bundle.min.jsnew file+2
@@ -0,0 +1,2 @@
1+!function e(t,n,o){function r(s,a){if(!n[s]){if(!t[s]){var l="function"==typeof require&&require;if(!a&&l)return l(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[s]={exports:{}};t[s][0].call(u.exports,function(e){var n=t[s][1][e];return r(n||e)},u,u.exports,e,t,n,o)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s<o.length;s++)r(o[s]);return r}({1:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.setCookie=function(e,t){document.cookie=e+"="+encodeURIComponent(t)+";path=/;"},n.clearCookie=function(e){document.cookie=e+"=;path=/;expires=Thu, 01-Jan-1970 00:00:01 GMT;"},n.getCookie=function(e){for(var t=e+"=",n=document.cookie.split(";"),o=0;o<n.length;o++){for(var r=n[o];" "==r.charAt(0);)r=r.substring(1,r.length);if(0==r.indexOf(t))return decodeURIComponent(r.substring(t.length,r.length))}return null}},{}],2:[function(e,t,n){"use strict";function o(e){var t=d[e];if(void 0==t)throw new Error("could not find <details> element with id '"+e+"'");return t}function r(e){for(var t=e.target,n=t.id,r=o(n),i=r.element.open,s=0,l=r.toggles;s<l.length;s++){var c=l[s];c.classList.contains("details-toggle-control")&&(c.classList.add(i?"collapser":"expander"),c.classList.remove(i?"expander":"collapser"))}t.open==r.openByDefault?delete p[n]:p[n]=!0,a()}function i(){for(var e=0,t=Array.prototype.slice.call(document.getElementsByTagName("details"));e<t.length;e++){var n=t[e];"string"==typeof n.id&&n.id.length>0&&(d[n.id]={element:n,openByDefault:!!n.open,toggles:[]},n.addEventListener("toggle",r))}}function s(e){var t=o(e).element;t.open=!t.open}function a(){var e=Object.keys(p);document.cookie="toggled="+encodeURIComponent(e.join("+"))}function l(){var e=h.getCookie("toggled");if(e)for(var t=0,n=e.split("+");t<n.length;t++){var o=n[t],r=d[o];p[o]=!0,r&&(r.element.open=!r.element.open)}}function c(e){e.preventDefault();var t=e.currentTarget.getAttribute("data-details-id");if(!t)throw new Error("element with class 'details-toggle' has no 'data-details-id' attribute!");s(t)}function u(){Array.prototype.slice.call(document.getElementsByClassName("details-toggle")).forEach(function(e){var t=e.getAttribute("data-details-id");if(!t)throw new Error("element with class 'details-toggle' has no 'data-details-id' attribute!");var n=o(t);n.toggles.push(e),e.addEventListener("click",c),e.classList.contains("details-toggle-control")&&e.classList.add(n.element.open?"collapser":"expander")})}Object.defineProperty(n,"__esModule",{value:!0});var h=e("./cookies"),d={},p={};n.init=function(){i(),l(),u()}},{"./cookies":1}],3:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var o=e("./style-menu"),r=e("./details-helper"),i=e("./quick-jump");!function(e){"interactive"===document.readyState?e():document.addEventListener("readystatechange",function(){"interactive"===document.readyState&&e()})}(function(){document.body.classList.add("js-enabled"),o.init(),r.init(),i.init()})},{"./details-helper":2,"./quick-jump":4,"./style-menu":5}],4:[function(e,t,n){"use strict";function o(e,t,n){var o=new XMLHttpRequest;o.onreadystatechange=function(){if(o.readyState===XMLHttpRequest.DONE)if(200===o.status){if(t)try{t(JSON.parse(o.responseText))}catch(e){n(o)}}else n&&n(o)},o.open("GET",e,!0),o.send()}function r(e){var t=document.querySelector("#page-menu"),n=document.createElement("li");t.insertBefore(n,t.firstChild),d.render(p(v,{onClick:e,title:"Quick Jump"}),t,n)}function i(e,t){return t.length<=e?t:t.slice(0,e)}function s(){return p("table",{class:"keyboard-shortcuts"},p("tr",null,p("th",null,"Key"),p("th",null,"Shortcut")),p("tr",null,p("td",null,p("span",{class:"key"},"s")),p("td",null,"Open this search box")),p("tr",null,p("td",null,p("span",{class:"key"},"esc")),p("td",null,"Close this search box")),p("tr",null,p("td",null,p("span",{class:"key"},"↓"),",",p("span",{class:"key"},"ctrl")," + ",p("span",{class:"key"},"j")),p("td",null,"Move down in search results")),p("tr",null,p("td",null,p("span",{class:"key"},"↑"),",",p("span",{class:"key"},"ctrl")," + ",p("span",{class:"key"},"k")),p("td",null,"Move up in search results")),p("tr",null,p("td",null,p("span",{class:"key"},"↵")),p("td",null,"Go to active search result")))}function a(){return p("p",null,"You can find any exported type, constructor, class, function or pattern defined in this package by (approximate) name.")}function l(e){var t=[p("p",null,"Your search for '",e.searchString,"' produced the following list of results: ",p("code",null,"[]"),"."),p("p",null,p("code",null,"Nothing")," matches your query for '",e.searchString,"'."),p("p",null,p("code",null,"Left \"no matches for '",e.searchString,"'\" :: Either String (NonEmpty SearchResult)"))];return t[(e.searchString||"a").charCodeAt(0)%t.length]}function c(e,t){d.render(p(g,{baseUrl:e||".",showHideTrigger:t||r}),document.body)}var u=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function o(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(o.prototype=n.prototype,new o)}}();Object.defineProperty(n,"__esModule",{value:!0});var h=e("fuse.js"),d=e("preact"),p=d.h,f=d.Component,v=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return u(t,e),t.prototype.render=function(e){return p("li",null,p("a",{href:"#",onClick:function(t){t.preventDefault(),e.onClick()}},e.title))},t}(f),g=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.linkIndex=0,t.focusPlease=!1,t.navigatedByKeyboard=!1,t}return u(t,e),t.prototype.componentWillMount=function(){var e=this;this.setState({searchString:"",isVisible:!1,expanded:{},activeLinkIndex:-1,moduleResults:[]}),o(this.props.baseUrl+"/doc-index.json",function(t){e.setState({fuse:new h(t,{threshold:.25,caseSensitive:!0,includeScore:!0,tokenize:!0,keys:[{name:"name",weight:.7},{name:"module",weight:.3}]}),moduleResults:[]})},function(t){console&&console.error("could not load 'doc-index.json' for searching",t),e.setState({failedLoading:!0})}),document.addEventListener("mousedown",this.hide.bind(this)),document.addEventListener("keydown",function(t){e.state.isVisible&&("Escape"===t.key?e.hide():"ArrowUp"===t.key||"k"===t.key&&t.ctrlKey?(t.preventDefault(),e.navigateLinks(-1)):"ArrowDown"===t.key||"j"===t.key&&t.ctrlKey?(t.preventDefault(),e.navigateLinks(1)):"Enter"===t.key&&e.state.activeLinkIndex>=0&&e.followActiveLink()),"s"===t.key&&"input"!==t.target.tagName.toLowerCase()&&(t.preventDefault(),e.show())})},t.prototype.hide=function(){this.setState({isVisible:!1,searchString:""})},t.prototype.show=function(){this.state.isVisible||(this.focusPlease=!0,this.setState({isVisible:!0,activeLinkIndex:-1}))},t.prototype.toggleVisibility=function(){this.state.isVisible?this.hide():this.show()},t.prototype.navigateLinks=function(e){var t=Math.max(-1,Math.min(this.linkIndex-1,this.state.activeLinkIndex+e));this.navigatedByKeyboard=!0,this.setState({activeLinkIndex:t})},t.prototype.followActiveLink=function(){this.activeLinkAction&&this.activeLinkAction()},t.prototype.updateResults=function(){var e=this.input&&this.input.value||"",t={};this.state.fuse.search(e).forEach(function(e){var n=e.item.module;(t[n]||(t[n]=[])).push(e)});var n=[];for(var o in t)!function(e){var o=t[e],r=0;o.forEach(function(e){r+=1/e.score}),n.push({module:e,totalScore:1/r,items:o})}(o);n.sort(function(e,t){return e.totalScore-t.totalScore}),this.setState({searchString:e,isVisible:!0,moduleResults:n})},t.prototype.componentDidUpdate=function(){if(this.searchResults&&this.activeLink&&this.navigatedByKeyboard){var e=this.activeLink.getClientRects()[0],t=this.searchResults.getClientRects()[0].top;e.bottom>window.innerHeight?this.searchResults.scrollTop+=e.bottom-window.innerHeight+80:e.top<t&&(this.searchResults.scrollTop-=t-e.top+80)}this.focusPlease&&this.input&&this.input.focus(),this.navigatedByKeyboard=!1,this.focusPlease=!1},t.prototype.componentDidMount=function(){this.props.showHideTrigger(this.toggleVisibility.bind(this))},t.prototype.render=function(e,t){var n=this;if(t.failedLoading){var o="file:"==window.location.protocol;return p("div",{id:"search",class:t.isVisible?"":"hidden"},p("div",{id:"search-results"},p("p",{class:"error"},"Failed to load file 'doc-index.json' containing definitions in this package."),o?p("p",{class:"error"},"To use quick jump, load this page with HTTP (from a local static file web server) instead of using the ",p("code",null,"file://")," protocol. (For security reasons, it is not possible to fetch auxiliary files using JS in a HTML page opened with ",p("code",null,"file://"),".)"):[]))}this.linkIndex=0;var r=function(e){e.stopPropagation()},c=i(10,t.moduleResults).map(function(e){return n.renderResultsInModule(e)});return p("div",{id:"search",class:t.isVisible?"":"hidden"},p("div",{id:"search-form",onMouseDown:r},p("input",{placeholder:"Search in package by name",ref:function(e){n.input=e},onFocus:this.show.bind(this),onClick:this.show.bind(this),onInput:this.updateResults.bind(this)})),p("div",{id:"search-results",ref:function(e){n.searchResults=e},onMouseDown:r,onMouseOver:function(e){for(var t=e.target;t&&"function"==typeof t.getAttribute;){var o=t.getAttribute("data-link-index");if("string"==typeof o){var r=parseInt(o,10);n.setState({activeLinkIndex:r});break}t=t.parentNode}}},""===t.searchString?[p(a,null),p(s,null)]:0==c.length?p(l,{searchString:t.searchString}):p("ul",null,c)))},t.prototype.renderResultsInModule=function(e){var t=this,n=e.items,o=e.module,r=this.state.expanded[o]||n.length<=10,s=r?n:i(8,n),a=function(e){return p("li",{class:"search-result"},t.navigationLink(t.props.baseUrl+"/"+e.link,{},p(m,{html:e.display_html})))};return p("li",{class:"search-module"},p("h4",null,o),p("ul",null,s.map(function(e){return a(e.item)}),r?[]:p("li",{class:"more-results"},this.actionLink(function(){var e=Object.assign({},t.state.expanded);e[o]=!0,t.setState({expanded:e})},{},"show "+(n.length-s.length)+" more results from this module"))))},t.prototype.navigationLink=function(e,t){for(var n=this,o=[],r=2;r<arguments.length;r++)o[r-2]=arguments[r];var i=Object.assign({href:e,onClick:this.hide.bind(this)},t);return this.menuLink.apply(this,[i,function(){window.location.href=e,n.hide()}].concat(o))},t.prototype.actionLink=function(e,t){for(var n=[],o=2;o<arguments.length;o++)n[o-2]=arguments[o];var r=Object.assign({href:"#",onClick:function(t){t.preventDefault(),e()}},t);return this.menuLink.apply(this,[r,e].concat(n))},t.prototype.menuLink=function(e,t){for(var n=this,o=[],r=2;r<arguments.length;r++)o[r-2]=arguments[r];var i=this.linkIndex;i===this.state.activeLinkIndex&&(e.class=(e.class?e.class+" ":"")+"active-link",e.ref=function(e){e&&(n.activeLink=e)},this.activeLinkAction=t);var s=Object.assign({"data-link-index":i},e);return this.linkIndex+=1,p.apply(void 0,["a",s].concat(o))},t}(f),m=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return u(t,e),t.prototype.shouldComponentUpdate=function(e){return this.props.html!==e.html},t.prototype.render=function(e){return p("div",{dangerouslySetInnerHTML:{__html:e.html}})},t}(f);n.init=c,window.quickNav={init:c}},{"fuse.js":6,preact:7}],5:[function(e,t,n){"use strict";function o(e){return(" "+e+" ").replace(g," ")}function r(e){return e.replace(m,"")}function i(e,t){return o(e.className||"").indexOf(" "+t+" ")>=0}function s(e,t){var n=o(e.className||"");n.indexOf(" "+t+" ")<0&&(e.className=r(n+" "+t))}function a(e,t){var n=o(e.className||"");n=n.replace(" "+t+" "," "),e.className=r(n)}function l(e,t,n,o){return null==o&&(o=!i(e,t)),o?(a(e,n),s(e,t)):(a(e,t),s(e,n)),o}function c(e){var t=document.getElementById("page-menu");if(t&&t.firstChild){var n=t.firstChild.cloneNode(!1);n.innerHTML=e,t.appendChild(n)}}function u(){return Array.prototype.slice.call(document.getElementsByTagName("link")).filter(function(e){return-1!=e.rel.indexOf("style")&&e.title})}function h(){var e=u(),t="";e.forEach(function(e){t+="<li><a href='#' onclick=\"setActiveStyleSheet('"+e.title+"'); return false;\">"+e.title+"</a></li>"}),e.length>1&&c("<div id='style-menu-holder'><a href='#' onclick='styleMenu(); return false;'>Style &#9662;</a><ul id='style-menu' class='hide'>"+t+"</ul></div>")}function d(e){for(var t=u(),n=null,o=0;o<t.length;o++){var r=t[o];r.disabled=!0,r.title==e&&(n=r)}n?(n.disabled=!1,v.setCookie("haddock-style",e)):(t[0].disabled=!1,v.clearCookie("haddock-style")),f(!1)}function p(){var e=v.getCookie("haddock-style");e&&d(e)}function f(e){var t=document.getElementById("style-menu");t&&y(t,e)}Object.defineProperty(n,"__esModule",{value:!0});var v=e("./cookies"),g=/\s\s+/g,m=/^\s+|\s+$/g,y=function(e,t){return function(n,o){return l(n,e,t,o)}}("show","hide");n.init=function(){h(),p()}},{"./cookies":1}],6:[function(e,t,n){!function(e,o){"object"==typeof n&&"object"==typeof t?t.exports=o():"function"==typeof define&&define.amd?define("Fuse",[],o):"object"==typeof n?n.Fuse=o():e.Fuse=o()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=8)}([function(e,t,n){"use strict";e.exports=function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,n){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),i=n(5),s=n(7),a=n(4),l=function(){function e(t,n){var r=n.location,i=void 0===r?0:r,s=n.distance,l=void 0===s?100:s,c=n.threshold,u=void 0===c?.6:c,h=n.maxPatternLength,d=void 0===h?32:h,p=n.isCaseSensitive,f=void 0!==p&&p,v=n.tokenSeparator,g=void 0===v?/ +/g:v,m=n.findAllMatches,y=void 0!==m&&m,_=n.minMatchCharLength,k=void 0===_?1:_;o(this,e),this.options={location:i,distance:l,threshold:u,maxPatternLength:d,isCaseSensitive:f,tokenSeparator:g,findAllMatches:y,minMatchCharLength:k},this.pattern=this.options.isCaseSensitive?t:t.toLowerCase(),this.pattern.length<=d&&(this.patternAlphabet=a(this.pattern))}return r(e,[{key:"search",value:function(e){if(this.options.isCaseSensitive||(e=e.toLowerCase()),this.pattern===e)return{isMatch:!0,score:0,matchedIndices:[[0,e.length-1]]};var t=this.options,n=t.maxPatternLength,o=t.tokenSeparator;if(this.pattern.length>n)return i(e,this.pattern,o);var r=this.options,a=r.location,l=r.distance,c=r.threshold,u=r.findAllMatches,h=r.minMatchCharLength;return s(e,this.pattern,this.patternAlphabet,{location:a,distance:l,threshold:c,findAllMatches:u,minMatchCharLength:h})}}]),e}();e.exports=l},function(e,t,n){"use strict";var o=n(0),r=function e(t,n,r){if(n){var i=n.indexOf("."),s=n,a=null;-1!==i&&(s=n.slice(0,i),a=n.slice(i+1));var l=t[s];if(null!==l&&void 0!==l)if(a||"string"!=typeof l&&"number"!=typeof l)if(o(l))for(var c=0,u=l.length;c<u;c+=1)e(l[c],a,r);else a&&e(l,a,r);else r.push(l.toString())}else r.push(t);return r};e.exports=function(e,t){return r(e,t,[])}},function(e,t,n){"use strict";e.exports=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[],o=-1,r=-1,i=0,s=e.length;i<s;i+=1){var a=e[i];a&&-1===o?o=i:a||-1===o||((r=i-1)-o+1>=t&&n.push([o,r]),o=-1)}return e[i-1]&&i-o>=t&&n.push([o,i-1]),n}},function(e,t,n){"use strict";e.exports=function(e){for(var t={},n=e.length,o=0;o<n;o+=1)t[e.charAt(o)]=0;for(var r=0;r<n;r+=1)t[e.charAt(r)]|=1<<n-r-1;return t}},function(e,t,n){"use strict";var o=/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g;e.exports=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:/ +/g,r=new RegExp(t.replace(o,"\\$&").replace(n,"|")),i=e.match(r),s=!!i,a=[];if(s)for(var l=0,c=i.length;l<c;l+=1){var u=i[l];a.push([e.indexOf(u),u.length-1])}return{score:s?.5:1,isMatch:s,matchedIndices:a}}},function(e,t,n){"use strict";e.exports=function(e,t){var n=t.errors,o=void 0===n?0:n,r=t.currentLocation,i=void 0===r?0:r,s=t.expectedLocation,a=void 0===s?0:s,l=t.distance,c=void 0===l?100:l,u=o/e.length,h=Math.abs(a-i);return c?u+h/c:h?1:u}},function(e,t,n){"use strict";var o=n(6),r=n(3);e.exports=function(e,t,n,i){for(var s=i.location,a=void 0===s?0:s,l=i.distance,c=void 0===l?100:l,u=i.threshold,h=void 0===u?.6:u,d=i.findAllMatches,p=void 0!==d&&d,f=i.minMatchCharLength,v=void 0===f?1:f,g=a,m=e.length,y=h,_=e.indexOf(t,g),k=t.length,b=[],x=0;x<m;x+=1)b[x]=0;if(-1!==_){var w=o(t,{errors:0,currentLocation:_,expectedLocation:g,distance:c});if(y=Math.min(w,y),-1!==(_=e.lastIndexOf(t,g+k))){var S=o(t,{errors:0,currentLocation:_,expectedLocation:g,distance:c});y=Math.min(S,y)}}_=-1;for(var L=[],C=1,M=k+m,N=1<<k-1,I=0;I<k;I+=1){for(var A=0,O=M;A<O;)o(t,{errors:I,currentLocation:g+O,expectedLocation:g,distance:c})<=y?A=O:M=O,O=Math.floor((M-A)/2+A);M=O;var E=Math.max(1,g-O+1),T=p?m:Math.min(g+O,m)+k,j=Array(T+2);j[T+1]=(1<<I)-1;for(var P=T;P>=E;P-=1){var R=P-1,U=n[e.charAt(R)];if(U&&(b[R]=1),j[P]=(j[P+1]<<1|1)&U,0!==I&&(j[P]|=(L[P+1]|L[P])<<1|1|L[P+1]),j[P]&N&&(C=o(t,{errors:I,currentLocation:R,expectedLocation:g,distance:c}))<=y){if(y=C,(_=R)<=g)break;E=Math.max(1,2*g-_)}}if(o(t,{errors:I+1,currentLocation:g,expectedLocation:g,distance:c})>y)break;L=j}return{isMatch:_>=0,score:0===C?.001:C,matchedIndices:r(b,v)}}},function(e,t,n){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),i=n(1),s=n(2),a=n(0),l=function(){function e(t,n){var r=n.location,i=void 0===r?0:r,a=n.distance,l=void 0===a?100:a,c=n.threshold,u=void 0===c?.6:c,h=n.maxPatternLength,d=void 0===h?32:h,p=n.caseSensitive,f=void 0!==p&&p,v=n.tokenSeparator,g=void 0===v?/ +/g:v,m=n.findAllMatches,y=void 0!==m&&m,_=n.minMatchCharLength,k=void 0===_?1:_,b=n.id,x=void 0===b?null:b,w=n.keys,S=void 0===w?[]:w,L=n.shouldSort,C=void 0===L||L,M=n.getFn,N=void 0===M?s:M,I=n.sortFn,A=void 0===I?function(e,t){return e.score-t.score}:I,O=n.tokenize,E=void 0!==O&&O,T=n.matchAllTokens,j=void 0!==T&&T,P=n.includeMatches,R=void 0!==P&&P,U=n.includeScore,D=void 0!==U&&U,V=n.verbose,F=void 0!==V&&V;o(this,e),this.options={location:i,distance:l,threshold:u,maxPatternLength:d,isCaseSensitive:f,tokenSeparator:g,findAllMatches:y,minMatchCharLength:k,id:x,keys:S,includeMatches:R,includeScore:D,shouldSort:C,getFn:N,sortFn:A,verbose:F,tokenize:E,matchAllTokens:j},this.setCollection(t)}return r(e,[{key:"setCollection",value:function(e){return this.list=e,e}},{key:"search",value:function(e){this._log('---------\nSearch pattern: "'+e+'"');var t=this._prepareSearchers(e),n=t.tokenSearchers,o=t.fullSearcher,r=this._search(n,o),i=r.weights,s=r.results;return this._computeScore(i,s),this.options.shouldSort&&this._sort(s),this._format(s)}},{key:"_prepareSearchers",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=[];if(this.options.tokenize)for(var n=e.split(this.options.tokenSeparator),o=0,r=n.length;o<r;o+=1)t.push(new i(n[o],this.options));return{tokenSearchers:t,fullSearcher:new i(e,this.options)}}},{key:"_search",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=this.list,o={},r=[];if("string"==typeof n[0]){for(var i=0,s=n.length;i<s;i+=1)this._analyze({key:"",value:n[i],record:i,index:i},{resultMap:o,results:r,tokenSearchers:e,fullSearcher:t});return{weights:null,results:r}}for(var a={},l=0,c=n.length;l<c;l+=1)for(var u=n[l],h=0,d=this.options.keys.length;h<d;h+=1){var p=this.options.keys[h];if("string"!=typeof p){if(a[p.name]={weight:1-p.weight||1},p.weight<=0||p.weight>1)throw new Error("Key weight has to be > 0 and <= 1");p=p.name}else a[p]={weight:1};this._analyze({key:p,value:this.options.getFn(u,p),record:u,index:l},{resultMap:o,results:r,tokenSearchers:e,fullSearcher:t})}return{weights:a,results:r}}},{key:"_analyze",value:function(e,t){var n=e.key,o=e.arrayIndex,r=void 0===o?-1:o,i=e.value,s=e.record,l=e.index,c=t.tokenSearchers,u=void 0===c?[]:c,h=t.fullSearcher,d=void 0===h?[]:h,p=t.resultMap,f=void 0===p?{}:p,v=t.results,g=void 0===v?[]:v;if(void 0!==i&&null!==i){var m=!1,y=-1,_=0;if("string"==typeof i){this._log("\nKey: "+(""===n?"-":n));var k=d.search(i);if(this._log('Full text: "'+i+'", score: '+k.score),this.options.tokenize){for(var b=i.split(this.options.tokenSeparator),x=[],w=0;w<u.length;w+=1){var S=u[w];this._log('\nPattern: "'+S.pattern+'"');for(var L=!1,C=0;C<b.length;C+=1){var M=b[C],N=S.search(M),I={};N.isMatch?(I[M]=N.score,m=!0,L=!0,x.push(N.score)):(I[M]=1,this.options.matchAllTokens||x.push(1)),this._log('Token: "'+M+'", score: '+I[M])}L&&(_+=1)}y=x[0];for(var A=x.length,O=1;O<A;O+=1)y+=x[O];y/=A,this._log("Token score average:",y)}var E=k.score;y>-1&&(E=(E+y)/2),this._log("Score average:",E);var T=!this.options.tokenize||!this.options.matchAllTokens||_>=u.length;if(this._log("\nCheck Matches: "+T),(m||k.isMatch)&&T){var j=f[l];j?j.output.push({key:n,arrayIndex:r,value:i,score:E,matchedIndices:k.matchedIndices}):(f[l]={item:s,output:[{key:n,arrayIndex:r,value:i,score:E,matchedIndices:k.matchedIndices}]},g.push(f[l]))}}else if(a(i))for(var P=0,R=i.length;P<R;P+=1)this._analyze({key:n,arrayIndex:P,value:i[P],record:s,index:l},{resultMap:f,results:g,tokenSearchers:u,fullSearcher:d})}}},{key:"_computeScore",value:function(e,t){this._log("\n\nComputing score:\n");for(var n=0,o=t.length;n<o;n+=1){for(var r=t[n].output,i=r.length,s=0,a=1,l=0;l<i;l+=1){var c=r[l].score,u=e?e[r[l].key].weight:1,h=c*u;1!==u?a=Math.min(a,h):(r[l].nScore=h,s+=h)}t[n].score=1===a?s/i:a,this._log(t[n])}}},{key:"_sort",value:function(e){this._log("\n\nSorting...."),e.sort(this.options.sortFn)}},{key:"_format",value:function(e){var t=[];this._log("\n\nOutput:\n\n",JSON.stringify(e));var n=[];this.options.includeMatches&&n.push(function(e,t){var n=e.output;t.matches=[];for(var o=0,r=n.length;o<r;o+=1){var i=n[o];if(0!==i.matchedIndices.length){var s={indices:i.matchedIndices,value:i.value};i.key&&(s.key=i.key),i.hasOwnProperty("arrayIndex")&&i.arrayIndex>-1&&(s.arrayIndex=i.arrayIndex),t.matches.push(s)}}}),this.options.includeScore&&n.push(function(e,t){t.score=e.score});for(var o=0,r=e.length;o<r;o+=1){var i=e[o];if(this.options.id&&(i.item=this.options.getFn(i.item,this.options.id)[0]),n.length){for(var s={item:i.item},a=0,l=n.length;a<l;a+=1)n[a](i,s);t.push(s)}else t.push(i.item)}return t}},{key:"_log",value:function(){if(this.options.verbose){var e;(e=console).log.apply(e,arguments)}}}]),e}();e.exports=l}])})},{}],7:[function(e,t,n){!function(){"use strict";function e(){}function n(t,n){var o,r,i,s,a=O;for(s=arguments.length;s-- >2;)A.push(arguments[s]);for(n&&null!=n.children&&(A.length||A.push(n.children),delete n.children);A.length;)if((r=A.pop())&&void 0!==r.pop)for(s=r.length;s--;)A.push(r[s]);else"boolean"==typeof r&&(r=null),(i="function"!=typeof t)&&(null==r?r="":"number"==typeof r?r=String(r):"string"!=typeof r&&(i=!1)),i&&o?a[a.length-1]+=r:a===O?a=[r]:a.push(r),o=i;var l=new e;return l.nodeName=t,l.children=a,l.attributes=null==n?void 0:n,l.key=null==n?void 0:n.key,void 0!==I.vnode&&I.vnode(l),l}function o(e,t){for(var n in t)e[n]=t[n];return e}function r(e){!e.__d&&(e.__d=!0)&&1==j.push(e)&&(I.debounceRendering||E)(i)}function i(){var e,t=j;for(j=[];e=t.pop();)e.__d&&L(e)}function s(e,t,n){return"string"==typeof t||"number"==typeof t?void 0!==e.splitText:"string"==typeof t.nodeName?!e._componentConstructor&&a(e,t.nodeName):n||e._componentConstructor===t.nodeName}function a(e,t){return e.__n===t||e.nodeName.toLowerCase()===t.toLowerCase()}function l(e){var t=o({},e.attributes);t.children=e.children;var n=e.nodeName.defaultProps;if(void 0!==n)for(var r in n)void 0===t[r]&&(t[r]=n[r]);return t}function c(e,t){var n=t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e);return n.__n=e,n}function u(e){var t=e.parentNode;t&&t.removeChild(e)}function h(e,t,n,o,r){if("className"===t&&(t="class"),"key"===t);else if("ref"===t)n&&n(null),o&&o(e);else if("class"!==t||r)if("style"===t){if(o&&"string"!=typeof o&&"string"!=typeof n||(e.style.cssText=o||""),o&&"object"==typeof o){if("string"!=typeof n)for(var i in n)i in o||(e.style[i]="");for(var i in o)e.style[i]="number"==typeof o[i]&&!1===T.test(i)?o[i]+"px":o[i]}}else if("dangerouslySetInnerHTML"===t)o&&(e.innerHTML=o.__html||"");else if("o"==t[0]&&"n"==t[1]){var s=t!==(t=t.replace(/Capture$/,""));t=t.toLowerCase().substring(2),o?n||e.addEventListener(t,p,s):e.removeEventListener(t,p,s),(e.__l||(e.__l={}))[t]=o}else if("list"!==t&&"type"!==t&&!r&&t in e)d(e,t,null==o?"":o),null!=o&&!1!==o||e.removeAttribute(t);else{var a=r&&t!==(t=t.replace(/^xlink\:?/,""));null==o||!1===o?a?e.removeAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase()):e.removeAttribute(t):"function"!=typeof o&&(a?e.setAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase(),o):e.setAttribute(t,o))}else e.className=o||""}function d(e,t,n){try{e[t]=n}catch(e){}}function p(e){return this.__l[e.type](I.event&&I.event(e)||e)}function f(){for(var e;e=P.pop();)I.afterMount&&I.afterMount(e),e.componentDidMount&&e.componentDidMount()}function v(e,t,n,o,r,i){R++||(U=null!=r&&void 0!==r.ownerSVGElement,D=null!=e&&!("__preactattr_"in e));var s=g(e,t,n,o,i);return r&&s.parentNode!==r&&r.appendChild(s),--R||(D=!1,i||f()),s}function g(e,t,n,o,r){var i=e,s=U;if(null!=t&&"boolean"!=typeof t||(t=""),"string"==typeof t||"number"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=t&&(e.nodeValue=t):(i=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),y(e,!0))),i.__preactattr_=!0,i;var l=t.nodeName;if("function"==typeof l)return C(e,t,n,o);if(U="svg"===l||"foreignObject"!==l&&U,l=String(l),(!e||!a(e,l))&&(i=c(l,U),e)){for(;e.firstChild;)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),y(e,!0)}var u=i.firstChild,h=i.__preactattr_,d=t.children;if(null==h){h=i.__preactattr_={};for(var p=i.attributes,f=p.length;f--;)h[p[f].name]=p[f].value}return!D&&d&&1===d.length&&"string"==typeof d[0]&&null!=u&&void 0!==u.splitText&&null==u.nextSibling?u.nodeValue!=d[0]&&(u.nodeValue=d[0]):(d&&d.length||null!=u)&&m(i,d,n,o,D||null!=h.dangerouslySetInnerHTML),k(i,t.attributes,h),U=s,i}function m(e,t,n,o,r){var i,a,l,c,h,d=e.childNodes,p=[],f={},v=0,m=0,_=d.length,k=0,b=t?t.length:0;if(0!==_)for(L=0;L<_;L++){var x=d[L],w=x.__preactattr_;null!=(S=b&&w?x._component?x._component.__k:w.key:null)?(v++,f[S]=x):(w||(void 0!==x.splitText?!r||x.nodeValue.trim():r))&&(p[k++]=x)}if(0!==b)for(L=0;L<b;L++){h=null;var S=(c=t[L]).key;if(null!=S)v&&void 0!==f[S]&&(h=f[S],f[S]=void 0,v--);else if(!h&&m<k)for(i=m;i<k;i++)if(void 0!==p[i]&&s(a=p[i],c,r)){h=a,p[i]=void 0,i===k-1&&k--,i===m&&m++;break}h=g(h,c,n,o),l=d[L],h&&h!==e&&h!==l&&(null==l?e.appendChild(h):h===l.nextSibling?u(l):e.insertBefore(h,l))}if(v)for(var L in f)void 0!==f[L]&&y(f[L],!1);for(;m<=k;)void 0!==(h=p[k--])&&y(h,!1)}function y(e,t){var n=e._component;n?M(n):(null!=e.__preactattr_&&e.__preactattr_.ref&&e.__preactattr_.ref(null),!1!==t&&null!=e.__preactattr_||u(e),_(e))}function _(e){for(e=e.lastChild;e;){var t=e.previousSibling;y(e,!0),e=t}}function k(e,t,n){var o;for(o in n)t&&null!=t[o]||null==n[o]||h(e,o,n[o],n[o]=void 0,U);for(o in t)"children"===o||"innerHTML"===o||o in n&&t[o]===("value"===o||"checked"===o?e[o]:n[o])||h(e,o,n[o],n[o]=t[o],U)}function b(e){var t=e.constructor.name;(V[t]||(V[t]=[])).push(e)}function x(e,t,n){var o,r=V[e.name];if(e.prototype&&e.prototype.render?(o=new e(t,n),N.call(o,t,n)):((o=new N(t,n)).constructor=e,o.render=w),r)for(var i=r.length;i--;)if(r[i].constructor===e){o.__b=r[i].__b,r.splice(i,1);break}return o}function w(e,t,n){return this.constructor(e,n)}function S(e,t,n,o,i){e.__x||(e.__x=!0,(e.__r=t.ref)&&delete t.ref,(e.__k=t.key)&&delete t.key,!e.base||i?e.componentWillMount&&e.componentWillMount():e.componentWillReceiveProps&&e.componentWillReceiveProps(t,o),o&&o!==e.context&&(e.__c||(e.__c=e.context),e.context=o),e.__p||(e.__p=e.props),e.props=t,e.__x=!1,0!==n&&(1!==n&&!1===I.syncComponentUpdates&&e.base?r(e):L(e,1,i)),e.__r&&e.__r(e))}function L(e,t,n,r){if(!e.__x){var i,s,a,c=e.props,u=e.state,h=e.context,d=e.__p||c,p=e.__s||u,g=e.__c||h,m=e.base,_=e.__b,k=m||_,b=e._component,w=!1;if(m&&(e.props=d,e.state=p,e.context=g,2!==t&&e.shouldComponentUpdate&&!1===e.shouldComponentUpdate(c,u,h)?w=!0:e.componentWillUpdate&&e.componentWillUpdate(c,u,h),e.props=c,e.state=u,e.context=h),e.__p=e.__s=e.__c=e.__b=null,e.__d=!1,!w){i=e.render(c,u,h),e.getChildContext&&(h=o(o({},h),e.getChildContext()));var C,N,A=i&&i.nodeName;if("function"==typeof A){var O=l(i);(s=b)&&s.constructor===A&&O.key==s.__k?S(s,O,1,h,!1):(C=s,e._component=s=x(A,O,h),s.__b=s.__b||_,s.__u=e,S(s,O,0,h,!1),L(s,1,n,!0)),N=s.base}else a=k,(C=b)&&(a=e._component=null),(k||1===t)&&(a&&(a._component=null),N=v(a,i,h,n||!m,k&&k.parentNode,!0));if(k&&N!==k&&s!==b){var E=k.parentNode;E&&N!==E&&(E.replaceChild(N,k),C||(k._component=null,y(k,!1)))}if(C&&M(C),e.base=N,N&&!r){for(var T=e,j=e;j=j.__u;)(T=j).base=N;N._component=T,N._componentConstructor=T.constructor}}if(!m||n?P.unshift(e):w||(e.componentDidUpdate&&e.componentDidUpdate(d,p,g),I.afterUpdate&&I.afterUpdate(e)),null!=e.__h)for(;e.__h.length;)e.__h.pop().call(e);R||r||f()}}function C(e,t,n,o){for(var r=e&&e._component,i=r,s=e,a=r&&e._componentConstructor===t.nodeName,c=a,u=l(t);r&&!c&&(r=r.__u);)c=r.constructor===t.nodeName;return r&&c&&(!o||r._component)?(S(r,u,3,n,o),e=r.base):(i&&!a&&(M(i),e=s=null),r=x(t.nodeName,u,n),e&&!r.__b&&(r.__b=e,s=null),S(r,u,1,n,o),e=r.base,s&&e!==s&&(s._component=null,y(s,!1))),e}function M(e){I.beforeUnmount&&I.beforeUnmount(e);var t=e.base;e.__x=!0,e.componentWillUnmount&&e.componentWillUnmount(),e.base=null;var n=e._component;n?M(n):t&&(t.__preactattr_&&t.__preactattr_.ref&&t.__preactattr_.ref(null),e.__b=t,u(t),b(e),_(t)),e.__r&&e.__r(null)}function N(e,t){this.__d=!0,this.context=t,this.props=e,this.state=this.state||{}}var I={},A=[],O=[],E="function"==typeof Promise?Promise.resolve().then.bind(Promise.resolve()):setTimeout,T=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,j=[],P=[],R=0,U=!1,D=!1,V={};o(N.prototype,{setState:function(e,t){var n=this.state;this.__s||(this.__s=o({},n)),o(n,"function"==typeof e?e(n,this.props):e),t&&(this.__h=this.__h||[]).push(t),r(this)},forceUpdate:function(e){e&&(this.__h=this.__h||[]).push(e),L(this,2)},render:function(){}});var F={h:n,createElement:n,cloneElement:function(e,t){return n(e.nodeName,o(o({},e.attributes),t),arguments.length>2?[].slice.call(arguments,2):e.children)},Component:N,render:function(e,t,n){return v(n,e,{},!1,t,!1)},rerender:i,options:I};void 0!==t?t.exports=F:self.preact=F}()},{}]},{},[3]);
2+//# sourceMappingURL=haddock-bundle.min.js.map
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/hslogo-16.pngnew file

Binary file not shown.

build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/laop.haddocknew file

Binary file not shown.

build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/laop.txtnew file+429
@@ -0,0 +1,429 @@
1+-- Hoogle documentation, generated by Haddock
2+-- See Hoogle, http://www.haskell.org/hoogle/
3+
4+
5+-- | An inductive matrix definition library à la LAoP
6+--
7+-- Please see the README on GitHub at
8+-- <a>https://github.com/bolt12/laop#readme</a>
9+@package laop
10+@version 0.1.0.0
11+
12+
13+-- | <b>LAoP</b> is a library for algebraic (inductive) construction and
14+-- manipulation of matrices in Haskell. See <a>my Msc Thesis</a> for the
15+-- motivation behind the library, the underlying theory, and
16+-- implementation details.
17+--
18+-- This module provides the <a>Natural</a> data type. The semantic
19+-- associated with this data type is that it's meant to be a restricted
20+-- <a>Int</a> value.
21+module Utils
22+
23+-- | Wrapper around <a>Int</a>s that have a restrictive semantic
24+-- associated. A value of type <tt><a>Natural</a> n m</tt> can only be
25+-- instanciated with some <a>Int</a> <tt>i</tt> that's <tt>n &lt;= i
26+-- &lt;= m</tt>.
27+data Natural (start :: Nat) (end :: Nat)
28+
29+-- | Natural constructor function. Throws a runtime error if the <a>Int</a>
30+-- value is greater than the corresponding <tt>m</tt> or lower than
31+-- <tt>n</tt> in the <tt><a>Natural</a> n m</tt> type.
32+nat :: forall n m. (KnownNat n, KnownNat m) => Int -> Natural n m
33+
34+-- | Auxiliary function that promotes binary <a>Int</a> functions to
35+-- <a>Natural</a> binary functions.
36+coerceNat :: (Int -> Int -> Int) -> Natural a a' -> Natural b b' -> Natural c c'
37+
38+-- | Auxiliary function that promotes ternary (binary) <a>Int</a> functions
39+-- to <a>Natural</a> functions.
40+coerceNat2 :: ((Int, Int) -> Int -> Int) -> (Natural a a', Natural b b') -> Natural c c' -> Natural d d'
41+
42+-- | Auxiliary function that promotes ternary (binary) <a>Int</a> functions
43+-- to <a>Natural</a> functions.
44+coerceNat3 :: (Int -> Int -> a) -> Natural b b' -> Natural c c' -> a
45+
46+
47+-- | The LAoP discipline generalises relations and functions treating them
48+-- as Boolean matrices and in turn consider these as arrows.
49+--
50+-- <b>LAoP</b> is a library for algebraic (inductive) construction and
51+-- manipulation of matrices in Haskell. See <a>my Msc Thesis</a> for the
52+-- motivation behind the library, the underlying theory, and
53+-- implementation details.
54+--
55+-- This module offers a newtype wrapper around <a>Matrix</a> that uses
56+-- arbitrary types instead of canonical data types for the matrices
57+-- dimensions.
58+--
59+-- <b>NOTE</b>: If the types in the dimensions are custom they must need
60+-- to implement a <tt>Generic</tt> instance.
61+module Matrix.Type
62+newtype Matrix e (cols :: Type) (rows :: Type)
63+M :: Matrix e (Normalize cols) (Normalize rows) -> Matrix e
64+
65+-- | Zero type alias
66+type Zero = Void
67+
68+-- | One type alias
69+type One = ()
70+
71+-- | Empty matrix constructor
72+empty :: Matrix e Zero Zero
73+
74+-- | Unit matrix constructor
75+one :: e -> Matrix e One One
76+
77+-- | Matrix <tt>Junc</tt> constructor
78+junc :: Normalize (Either a b) ~ Either (Normalize a) (Normalize b) => Matrix e a rows -> Matrix e b rows -> Matrix e (Either a b) rows
79+
80+-- | Matrix <tt>Split</tt> constructor
81+split :: Normalize (Either a b) ~ Either (Normalize a) (Normalize b) => Matrix e cols a -> Matrix e cols b -> Matrix e cols (Either a b)
82+
83+-- | Type family that computes of a given type dimension from a given
84+-- natural
85+--
86+-- Thanks to Li-Yao Xia this type family is super fast.
87+type family FromNat (n :: Nat) :: Type
88+
89+-- | Type family that computes the cardinality of a given type dimension.
90+--
91+-- It can also count the cardinality of custom types that implement the
92+-- <a>Generic</a> instance.
93+type family Count (d :: Type) :: Nat
94+
95+-- | Type family that normalizes the representation of a given data
96+-- structure
97+type family Normalize (d :: Type) :: Type
98+
99+-- | Type class for defining the <tt>fromList</tt> conversion function.
100+--
101+-- Given that it is not possible to branch on types at the term level
102+-- type classes are needed bery much like an inductive definition but on
103+-- types.
104+class FromLists e cols rows
105+
106+-- | Build a matrix out of a list of list of elements. Throws a runtime
107+-- error if the dimensions do not match.
108+fromLists :: FromLists e (Normalize cols) (Normalize rows) => [[e]] -> Matrix e cols rows
109+
110+-- | Converts a matrix to a list of lists of elements.
111+toLists :: Matrix e cols rows -> [[e]]
112+
113+-- | Converts a matrix to a list of elements.
114+toList :: Matrix e cols rows -> [e]
115+
116+-- | Matrix builder function. Constructs a matrix provided with a
117+-- construction function.
118+matrixBuilder :: (FromLists e (Normalize cols) (Normalize rows), KnownNat (Count (Normalize cols)), KnownNat (Count (Normalize rows))) => ((Int, Int) -> e) -> Matrix e cols rows
119+
120+-- | Constructs a row vector matrix
121+row :: FromLists e (Normalize cols) () => [e] -> Matrix e cols One
122+
123+-- | Constructs a column vector matrix
124+col :: FromLists e () (Normalize rows) => [e] -> Matrix e One rows
125+
126+-- | The zero matrix. A matrix wholly filled with zeros.
127+zeros :: (Num e, FromLists e (Normalize cols) (Normalize rows), KnownNat (Count (Normalize cols)), KnownNat (Count (Normalize rows))) => Matrix e cols rows
128+
129+-- | The ones matrix. A matrix wholly filled with ones.
130+--
131+-- Also known as T (Top) matrix.
132+ones :: (Num e, FromLists e (Normalize cols) (Normalize rows), KnownNat (Count (Normalize cols)), KnownNat (Count (Normalize rows))) => Matrix e cols rows
133+
134+-- | The T (Top) row vector matrix.
135+bang :: forall e cols. (Num e, Enum e, FromLists e (Normalize cols) (), KnownNat (Count (Normalize cols))) => Matrix e cols One
136+
137+-- | The constant matrix constructor. A matrix wholly filled with a given
138+-- value.
139+constant :: (Num e, FromLists e (Normalize cols) (Normalize rows), KnownNat (Count (Normalize cols)), KnownNat (Count (Normalize rows))) => e -> Matrix e cols rows
140+
141+-- | Functor instance equivalent function
142+fmapM :: (Bounded a, Bounded b, Enum a, Enum b, Eq b, Num e, Ord e, KnownNat (Count (Normalize a)), KnownNat (Count (Normalize b)), FromLists e (Normalize b) (Normalize a)) => (a -> b) -> Matrix e c a -> Matrix e c b
143+
144+-- | Applicative instance equivalent <tt>unit</tt> function,
145+unitM :: Num e => Matrix e () ()
146+
147+-- | Applicative instance equivalent <tt>unit</tt> function,
148+multM :: (KnownNat (Count (Normalize a)), KnownNat (Count (Normalize b)), KnownNat (Count (Normalize (a, b))), Num e, FromLists e (Normalize (a, b)) (Normalize a), FromLists e (Normalize (a, b)) (Normalize b), Normalize (a, b) ~ Normalize (Normalize a, Normalize b)) => Matrix e c a -> Matrix e c b -> Matrix e c (a, b)
149+
150+-- | Selective functors <tt>select</tt> operator equivalent inspired by the
151+-- ArrowMonad solution presented in the paper.
152+selectM :: (Num e, FromLists e (Normalize b) (Normalize b), KnownNat (Count (Normalize b)), Normalize (Either a b) ~ Either (Normalize a) (Normalize b)) => Matrix e cols (Either a b) -> Matrix e a b -> Matrix e cols b
153+
154+-- | Monad instance equivalent <a>return</a> function,
155+returnM :: forall e a. (Num e, Enum e, Enum a, FromLists e () (Normalize a), KnownNat (Count a)) => a -> Matrix e One a
156+
157+-- | Monad instance equivalent '(&gt;&gt;=)' function,
158+bindM :: Num e => Matrix e a b -> Matrix e b c -> Matrix e a c
159+
160+-- | Obtain the number of columns.
161+--
162+-- NOTE: The <a>KnownNat</a> constaint is needed in order to obtain the
163+-- dimensions in constant time.
164+--
165+-- TODO: A <a>columns</a> function that does not need the <a>KnownNat</a>
166+-- constraint in exchange for performance.
167+columns :: KnownNat (Count (Normalize cols)) => Matrix e cols rows -> Int
168+
169+-- | Obtain the number of rows.
170+--
171+-- NOTE: The <a>KnownNat</a> constaint is needed in order to obtain the
172+-- dimensions in constant time.
173+--
174+-- TODO: A <a>rows</a> function that does not need the <a>KnownNat</a>
175+-- constraint in exchange for performance.
176+rows :: KnownNat (Count (Normalize rows)) => Matrix e cols rows -> Int
177+
178+-- | Matrix transposition.
179+tr :: Matrix e cols rows -> Matrix e rows cols
180+
181+-- | McCarthy's Conditional expresses probabilistic choice.
182+cond :: (Normalize (Normalize a) ~ Normalize a, KnownNat (Count (Normalize a)), FromLists e () (Normalize a), FromLists e (Normalize a) (), FromLists e (Normalize a) (Normalize a), Bounded a, Enum a, Num e, Ord e) => (a -> Bool) -> Matrix e a b -> Matrix e a b -> Matrix e a b
183+
184+-- | Matrix "abiding" followin the 'Junc'-'Split' abide law.
185+--
186+-- Law:
187+--
188+-- <pre>
189+-- <tt>Junc</tt> (<tt>Split</tt> a c) (<tt>Split</tt> b d) == <tt>Split</tt> (<tt>Junc</tt> a b) (<tt>Junc</tt> c d)
190+-- </pre>
191+abideJS :: Matrix e cols rows -> Matrix e cols rows
192+
193+-- | Matrix "abiding" followin the 'Split'-'Junc' abide law.
194+--
195+-- Law:
196+--
197+-- <pre>
198+-- <tt>Split</tt> (<tt>Junc</tt> a b) (<tt>Junc</tt> c d) == <tt>Junc</tt> (<tt>Split</tt> a c) (<tt>Split</tt> b d)
199+-- </pre>
200+abideSJ :: Matrix e cols rows -> Matrix e cols rows
201+
202+-- | Matrix <tt>Split</tt> constructor
203+(===) :: Normalize (Either a b) ~ Either (Normalize a) (Normalize b) => Matrix e cols a -> Matrix e cols b -> Matrix e cols (Either a b)
204+infixl 2 ===
205+
206+-- | Biproduct first component projection
207+p1 :: (Num e, KnownNat (Count (Normalize n)), KnownNat (Count (Normalize m)), FromLists e (Normalize n) (Normalize m), FromLists e (Normalize m) (Normalize m), Normalize (Either m n) ~ Either (Normalize m) (Normalize n)) => Matrix e (Either m n) m
208+
209+-- | Biproduct second component projection
210+p2 :: (Num e, KnownNat (Count (Normalize n)), KnownNat (Count (Normalize m)), FromLists e (Normalize m) (Normalize n), FromLists e (Normalize n) (Normalize n), Normalize (Either m n) ~ Either (Normalize m) (Normalize n)) => Matrix e (Either m n) n
211+
212+-- | Matrix <tt>Junc</tt> constructor
213+(|||) :: Normalize (Either a b) ~ Either (Normalize a) (Normalize b) => Matrix e a rows -> Matrix e b rows -> Matrix e (Either a b) rows
214+infixl 3 |||
215+
216+-- | Biproduct first component injection
217+i1 :: (Num e, KnownNat (Count (Normalize n)), KnownNat (Count (Normalize m)), FromLists e (Normalize n) (Normalize m), FromLists e (Normalize m) (Normalize m), Normalize (Either m n) ~ Either (Normalize m) (Normalize n)) => Matrix e m (Either m n)
218+
219+-- | Biproduct second component injection
220+i2 :: (Num e, KnownNat (Count (Normalize n)), KnownNat (Count (Normalize m)), FromLists e (Normalize m) (Normalize n), FromLists e (Normalize n) (Normalize n), Normalize (Either m n) ~ Either (Normalize m) (Normalize n)) => Matrix e n (Either m n)
221+
222+-- | Matrix coproduct functor also known as matrix direct sum.
223+(-|-) :: (Num e, KnownNat (Count (Normalize j)), KnownNat (Count (Normalize k)), FromLists e (Normalize k) (Normalize k), FromLists e (Normalize j) (Normalize k), FromLists e (Normalize k) (Normalize j), FromLists e (Normalize j) (Normalize j), Normalize (Either n m) ~ Either (Normalize n) (Normalize m), Normalize (Either k j) ~ Either (Normalize k) (Normalize j)) => Matrix e n k -> Matrix e m j -> Matrix e (Either n m) (Either k j)
224+infixl 5 -|-
225+
226+-- | Matrix product functor also known as kronecker product
227+(><) :: forall e m p n q. (Num e, KnownNat (Count (Normalize m)), KnownNat (Count (Normalize n)), KnownNat (Count (Normalize p)), KnownNat (Count (Normalize q)), KnownNat (Count (Normalize (m, n))), KnownNat (Count (Normalize (p, q))), FromLists e (Normalize (m, n)) (Normalize m), FromLists e (Normalize (m, n)) (Normalize n), FromLists e (Normalize (p, q)) (Normalize p), FromLists e (Normalize (p, q)) (Normalize q), Normalize (m, n) ~ Normalize (Normalize m, Normalize n), Normalize (p, q) ~ Normalize (Normalize p, Normalize q)) => Matrix e m p -> Matrix e n q -> Matrix e (m, n) (p, q)
228+infixl 4 ><
229+
230+-- | Khatri Rao product first component projection matrix.
231+kp1 :: forall e m k. (Num e, KnownNat (Count (Normalize m)), KnownNat (Count (Normalize k)), KnownNat (Count (Normalize (m, k))), FromLists e (Normalize (m, k)) (Normalize m), Normalize (m, k) ~ Normalize (Normalize m, Normalize k)) => Matrix e (m, k) m
232+
233+-- | Khatri Rao product second component projection matrix.
234+kp2 :: forall e m k. (Num e, KnownNat (Count (Normalize k)), KnownNat (Count (Normalize m)), KnownNat (Count (Normalize (m, k))), FromLists e (Normalize (m, k)) (Normalize k), Normalize (m, k) ~ Normalize (Normalize m, Normalize k)) => Matrix e (m, k) k
235+
236+-- | Khatri Rao Matrix product also known as matrix pairing.
237+--
238+-- NOTE: That this is not a true categorical product, see for instance:
239+--
240+-- <pre>
241+-- | kp1 <a>comp</a> khatri a b == a
242+-- khatri a b ==&gt; |
243+-- | kp2 <a>comp</a> khatri a b == b
244+-- </pre>
245+--
246+-- <b>Emphasis</b> on the implication symbol.
247+khatri :: forall e cols a b. (Num e, KnownNat (Count (Normalize a)), KnownNat (Count (Normalize b)), KnownNat (Count (Normalize (a, b))), FromLists e (Normalize (a, b)) (Normalize a), FromLists e (Normalize (a, b)) (Normalize b), Normalize (a, b) ~ Normalize (Normalize a, Normalize b)) => Matrix e cols a -> Matrix e cols b -> Matrix e cols (a, b)
248+
249+-- | Identity matrix
250+identity :: (Num e, FromLists e (Normalize a) (Normalize a), KnownNat (Count (Normalize a))) => Matrix e a a
251+
252+-- | Matrix composition. Equivalent to matrix-matrix multiplication.
253+--
254+-- This definition takes advantage of divide-and-conquer and fusion laws
255+-- from LAoP.
256+comp :: Num e => Matrix e cr rows -> Matrix e cols cr -> Matrix e cols rows
257+
258+-- | Lifts functions to matrices with arbitrary dimensions.
259+--
260+-- NOTE: Be careful to not ask for a matrix bigger than the cardinality
261+-- of types <tt>a</tt> or <tt>b</tt> allows.
262+fromF :: (Bounded a, Bounded b, Enum a, Enum b, Eq b, Num e, Ord e, KnownNat (Count (Normalize cols)), KnownNat (Count (Normalize rows)), FromLists e (Normalize rows) (Normalize cols)) => (a -> b) -> Matrix e cols rows
263+
264+-- | Lifts functions to matrices with dimensions matching <tt>a</tt> and
265+-- <tt>b</tt> cardinality's.
266+fromF' :: (Bounded a, Bounded b, Enum a, Enum b, Eq b, Num e, Ord e, KnownNat (Count (Normalize a)), KnownNat (Count (Normalize b)), FromLists e (Normalize b) (Normalize a)) => (a -> b) -> Matrix e a b
267+
268+-- | Matrix pretty printer
269+pretty :: (KnownNat (Count (Normalize cols)), Show e) => Matrix e cols rows -> String
270+
271+-- | Matrix pretty printer
272+prettyPrint :: (KnownNat (Count (Normalize cols)), Show e) => Matrix e cols rows -> IO ()
273+instance Control.DeepSeq.NFData e => Control.DeepSeq.NFData (Matrix.Type.Matrix e cols rows)
274+instance GHC.Classes.Ord e => GHC.Classes.Ord (Matrix.Type.Matrix e cols rows)
275+instance GHC.Classes.Eq e => GHC.Classes.Eq (Matrix.Type.Matrix e cols rows)
276+instance GHC.Num.Num e => GHC.Num.Num (Matrix.Type.Matrix e cols rows)
277+instance GHC.Show.Show e => GHC.Show.Show (Matrix.Type.Matrix e cols rows)
278+instance GHC.Num.Num e => Control.Category.Category (Matrix.Type.Matrix e)
279+
280+
281+-- | The LAoP discipline generalises relations and functions treating them
282+-- as Boolean matrices and in turn consider these as arrows.
283+--
284+-- <b>LAoP</b> is a library for algebraic (inductive) construction and
285+-- manipulation of matrices in Haskell. See <a>my Msc Thesis</a> for the
286+-- motivation behind the library, the underlying theory, and
287+-- implementation details.
288+--
289+-- This module offers a newtype wrapper around <a>Matrix</a> that uses
290+-- type level naturals instead of standard data types for the matrices
291+-- dimensions.
292+module Matrix.Nat
293+newtype Matrix e (cols :: Nat) (rows :: Nat)
294+M :: Matrix e (FromNat cols) (FromNat rows) -> Matrix e
295+empty :: Matrix e 0 0
296+one :: e -> Matrix e 1 1
297+junc :: FromNat cols3 ~ Either (FromNat cols1) (FromNat cols2) => Matrix e cols1 rows -> Matrix e cols2 rows -> Matrix e cols3 rows
298+split :: FromNat rows3 ~ Either (FromNat rows1) (FromNat rows2) => Matrix e cols rows1 -> Matrix e cols rows2 -> Matrix e cols rows3
299+
300+-- | Type family that computes of a given type dimension from a given
301+-- natural
302+--
303+-- Thanks to Li-Yao Xia this type family is super fast.
304+type family FromNat (n :: Nat) :: Type
305+
306+-- | Type family that computes the cardinality of a given type dimension.
307+--
308+-- It can also count the cardinality of custom types that implement the
309+-- <a>Generic</a> instance.
310+type family Count (d :: Type) :: Nat
311+
312+-- | Type family that normalizes the representation of a given data
313+-- structure
314+type family Normalize (d :: Type) :: Type
315+
316+-- | Type class for defining the <tt>fromList</tt> conversion function.
317+--
318+-- Given that it is not possible to branch on types at the term level
319+-- type classes are needed bery much like an inductive definition but on
320+-- types.
321+class FromLists e cols rows
322+fromLists :: FromLists e (FromNat cols) (FromNat rows) => [[e]] -> Matrix e cols rows
323+toLists :: Matrix e cols rows -> [[e]]
324+toList :: Matrix e cols rows -> [e]
325+matrixBuilder :: (FromLists e (FromNat cols) (FromNat rows), KnownNat (Count (FromNat cols)), KnownNat (Count (FromNat rows))) => ((Int, Int) -> e) -> Matrix e cols rows
326+row :: FromLists e (FromNat cols) () => [e] -> Matrix e cols 1
327+col :: FromLists e () (FromNat rows) => [e] -> Matrix e 1 rows
328+zeros :: (Num e, FromLists e (FromNat cols) (FromNat rows), KnownNat (Count (FromNat cols)), KnownNat (Count (FromNat rows))) => Matrix e cols rows
329+ones :: (Num e, FromLists e (FromNat cols) (FromNat rows), KnownNat (Count (FromNat cols)), KnownNat (Count (FromNat rows))) => Matrix e cols rows
330+bang :: forall e cols. (Num e, Enum e, FromLists e (FromNat cols) (), KnownNat (Count (FromNat cols))) => Matrix e cols 1
331+constant :: (Num e, FromLists e (FromNat cols) (FromNat rows), KnownNat (Count (FromNat cols)), KnownNat (Count (FromNat rows))) => e -> Matrix e cols rows
332+columns :: KnownNat (Count (FromNat cols)) => Matrix e cols rows -> Int
333+rows :: KnownNat (Count (FromNat rows)) => Matrix e cols rows -> Int
334+tr :: Matrix e cols rows -> Matrix e rows cols
335+select :: (Num e, FromLists e (FromNat rows1) (FromNat rows1), KnownNat (Count (FromNat rows1)), FromNat rows2 ~ FromNat rows1, FromNat cols1 ~ FromNat cols2, FromNat rows3 ~ Either (FromNat cols3) (FromNat rows1)) => Matrix e cols1 rows3 -> Matrix e cols3 rows1 -> Matrix e cols2 rows2
336+cond :: (FromNat (Count (FromNat cols)) ~ FromNat cols, KnownNat (Count (FromNat cols)), FromLists e () (FromNat cols), FromLists e (FromNat cols) (), FromLists e (FromNat cols) (FromNat cols), Bounded a, Enum a, Num e, Ord e) => (a -> Bool) -> Matrix e cols rows -> Matrix e cols rows -> Matrix e cols rows
337+abideJS :: Matrix e cols rows -> Matrix e cols rows
338+abideSJ :: Matrix e cols rows -> Matrix e cols rows
339+(===) :: FromNat rows3 ~ Either (FromNat rows1) (FromNat rows2) => Matrix e cols rows1 -> Matrix e cols rows2 -> Matrix e cols rows3
340+infixl 2 ===
341+p1 :: (Num e, KnownNat (Count (FromNat n)), KnownNat (Count (FromNat m)), FromLists e (FromNat n) (FromNat m), FromLists e (FromNat m) (FromNat m), FromNat (m + n) ~ Either (FromNat m) (FromNat n)) => Matrix e (m + n) m
342+p2 :: (Num e, KnownNat (Count (FromNat n)), KnownNat (Count (FromNat m)), FromLists e (FromNat m) (FromNat n), FromLists e (FromNat n) (FromNat n), FromNat (m + n) ~ Either (FromNat m) (FromNat n)) => Matrix e (m + n) n
343+(|||) :: FromNat cols3 ~ Either (FromNat cols1) (FromNat cols2) => Matrix e cols1 rows -> Matrix e cols2 rows -> Matrix e cols3 rows
344+infixl 3 |||
345+i1 :: (Num e, KnownNat (Count (FromNat n)), KnownNat (Count (FromNat rows)), FromLists e (FromNat n) (FromNat rows), FromLists e (FromNat rows) (FromNat rows), FromNat (rows + n) ~ Either (FromNat rows) (FromNat n)) => Matrix e rows (rows + n)
346+i2 :: (Num e, KnownNat (Count (FromNat rows)), KnownNat (Count (FromNat m)), FromLists e (FromNat m) (FromNat rows), FromLists e (FromNat rows) (FromNat rows), FromNat (m + rows) ~ Either (FromNat m) (FromNat rows)) => Matrix e rows (m + rows)
347+(-|-) :: (Num e, KnownNat (Count (FromNat j)), KnownNat (Count (FromNat k)), FromLists e (FromNat k) (FromNat k), FromLists e (FromNat j) (FromNat k), FromLists e (FromNat k) (FromNat j), FromLists e (FromNat j) (FromNat j), FromNat (n + m) ~ Either (FromNat n) (FromNat m), FromNat (k + j) ~ Either (FromNat k) (FromNat j)) => Matrix e n k -> Matrix e m j -> Matrix e (n + m) (k + j)
348+infixl 5 -|-
349+(><) :: forall e m p n q. (Num e, KnownNat (Count (FromNat m)), KnownNat (Count (FromNat n)), KnownNat (Count (FromNat p)), KnownNat (Count (FromNat q)), KnownNat (Count (FromNat (m * n))), KnownNat (Count (FromNat (p * q))), FromLists e (FromNat (m * n)) (FromNat m), FromLists e (FromNat (m * n)) (FromNat n), FromLists e (FromNat (p * q)) (FromNat p), FromLists e (FromNat (p * q)) (FromNat q), FromNat (m * n) ~ FromNat (Count (FromNat m) * Count (FromNat n)), FromNat (p * q) ~ FromNat (Count (FromNat p) * Count (FromNat q))) => Matrix e m p -> Matrix e n q -> Matrix e (m * n) (p * q)
350+infixl 4 ><
351+kp1 :: forall e m k. (Num e, KnownNat (Count (FromNat m)), KnownNat (Count (FromNat k)), KnownNat (Count (FromNat (m * k))), FromLists e (FromNat (m * k)) (FromNat m), FromNat (m * k) ~ FromNat (Count (FromNat m) * Count (FromNat k))) => Matrix e (m * k) m
352+kp2 :: forall e m k. (Num e, KnownNat (Count (FromNat k)), FromLists e (FromNat (m * k)) (FromNat k), KnownNat (Count (FromNat m)), KnownNat (Count (FromNat (m * k))), FromNat (m * k) ~ FromNat (Count (FromNat m) * Count (FromNat k))) => Matrix e (m * k) k
353+khatri :: forall e cols a b. (Num e, KnownNat (Count (FromNat a)), KnownNat (Count (FromNat b)), KnownNat (Count (FromNat (a * b))), FromLists e (FromNat (a * b)) (FromNat a), FromLists e (FromNat (a * b)) (FromNat b), FromNat (a * b) ~ FromNat (Count (FromNat a) * Count (FromNat b))) => Matrix e cols a -> Matrix e cols b -> Matrix e cols (a * b)
354+identity :: (Num e, FromLists e (FromNat cols) (FromNat cols), KnownNat (Count (FromNat cols))) => Matrix e cols cols
355+comp :: Num e => Matrix e cr rows -> Matrix e cols cr -> Matrix e cols rows
356+fromF :: (Bounded a, Bounded b, Enum a, Enum b, Eq b, Num e, Ord e, KnownNat (Count (FromNat cols)), KnownNat (Count (FromNat rows)), FromLists e (FromNat rows) (FromNat cols)) => (a -> b) -> Matrix e cols rows
357+fromF' :: (Bounded a, Bounded b, Enum a, Enum b, Eq b, Num e, Ord e, KnownNat (Count (Normalize a)), KnownNat (Count (Normalize b)), FromLists e (Normalize b) (Normalize a)) => (a -> b) -> Matrix e (Count a) (Count b)
358+pretty :: (KnownNat (Count (FromNat cols)), Show e) => Matrix e cols rows -> String
359+prettyPrint :: (KnownNat (Count (FromNat cols)), Show e) => Matrix e cols rows -> IO ()
360+instance Control.DeepSeq.NFData e => Control.DeepSeq.NFData (Matrix.Nat.Matrix e cols rows)
361+instance GHC.Classes.Ord e => GHC.Classes.Ord (Matrix.Nat.Matrix e cols rows)
362+instance GHC.Classes.Eq e => GHC.Classes.Eq (Matrix.Nat.Matrix e cols rows)
363+instance GHC.Num.Num e => GHC.Num.Num (Matrix.Nat.Matrix e cols rows)
364+instance GHC.Show.Show e => GHC.Show.Show (Matrix.Nat.Matrix e cols rows)
365+instance GHC.Num.Num e => Control.Category.Category (Matrix.Nat.Matrix e)
366+
367+
368+-- | <b>LAoP</b> is a library for algebraic (inductive) construction and
369+-- manipulation of matrices in Haskell. See <a>my Msc Thesis</a> for the
370+-- motivation behind the library, the underlying theory, and
371+-- implementation details.
372+--
373+-- This module exports a type synonym <a>Dist</a> that represents a
374+-- stochastic distribution matrix and several distribution construction
375+-- functions.
376+module Dist
377+
378+-- | Type synonym for column vector matrices. This represents a probability
379+-- distribution.
380+newtype Dist a
381+D :: Matrix Prob () a -> Dist a
382+
383+-- | Type synonym for probability value
384+type Prob = Double
385+
386+-- | Functor instance
387+fmapD :: (Bounded a, Bounded b, Enum a, Enum b, Eq b, KnownNat (Count (Normalize a)), KnownNat (Count (Normalize b)), FromLists Prob (Normalize b) (Normalize a)) => (a -> b) -> Dist a -> Dist b
388+
389+-- | Applicative/Monoidal instance <tt>unit</tt> function
390+unitD :: Dist ()
391+
392+-- | Applicative/Monoidal instance <tt>mult</tt> function
393+multD :: (KnownNat (Count (Normalize a)), KnownNat (Count (Normalize b)), KnownNat (Count (Normalize (a, b))), FromLists Prob (Normalize (a, b)) (Normalize a), FromLists Prob (Normalize (a, b)) (Normalize b), Normalize (a, b) ~ Normalize (Normalize a, Normalize b)) => Dist a -> Dist b -> Dist (a, b)
394+
395+-- | Selective instance function
396+selectD :: (Normalize (Either a b) ~ Either (Normalize a) (Normalize b), FromLists Prob (Normalize b) (Normalize b), KnownNat (Count (Normalize b))) => Dist (Either a b) -> Matrix Prob a b -> Dist b
397+
398+-- | Monad instance <a>return</a> function
399+returnD :: forall a. (Enum a, FromLists Prob () (Normalize a), KnownNat (Count a)) => a -> Dist a
400+
401+-- | Monad instance '(&gt;&gt;=)' function
402+bindD :: Dist a -> Matrix Prob a b -> Dist b
403+
404+-- | Constructs a Bernoulli distribution
405+choose :: FromLists Prob () (Normalize a) => Prob -> Dist a
406+
407+-- | Creates a distribution given a shape function
408+shape :: FromLists Prob () (Normalize a) => (Prob -> Prob) -> [a] -> Dist a
409+
410+-- | Constructs a Linear distribution
411+linear :: FromLists Prob () (Normalize a) => [a] -> Dist a
412+
413+-- | Constructs an Uniform distribution
414+uniform :: FromLists Prob () (Normalize a) => [a] -> Dist a
415+
416+-- | Constructs an Negative Exponential distribution
417+negExp :: FromLists Prob () (Normalize a) => [a] -> Dist a
418+
419+-- | Constructs an Normal distribution
420+normal :: FromLists Prob () (Normalize a) => [a] -> Dist a
421+
422+-- | Transforms a <a>Dist</a> into a list of pairs.
423+toValues :: forall a. (Enum a, KnownNat (Count a), FromLists Prob () (Normalize a)) => Dist a -> [(a, Prob)]
424+
425+-- | Pretty a distribution
426+prettyDist :: forall a. (Show a, Enum a, KnownNat (Count a), FromLists Prob () (Normalize a)) => Dist a -> String
427+
428+-- | Pretty Print a distribution
429+prettyPrintDist :: forall a. (Show a, Enum a, KnownNat (Count a), FromLists Prob () (Normalize a)) => Dist a -> IO ()
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/meta.jsonnew file+1
@@ -0,0 +1 @@
1+{"haddock_version":"2.22.0","quickjump_version":1}
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/minus.gifnew file

Binary file not shown.

build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/ocean.cssnew file+647
@@ -0,0 +1,647 @@
1+/* @group Fundamentals */
2+
3+* { margin: 0; padding: 0 }
4+
5+/* Is this portable? */
6+html {
7+ background-color: white;
8+ width: 100%;
9+ height: 100%;
10+}
11+
12+body {
13+ background: white;
14+ color: black;
15+ text-align: left;
16+ min-height: 100%;
17+ position: relative;
18+}
19+
20+p {
21+ margin: 0.8em 0;
22+}
23+
24+ul, ol {
25+ margin: 0.8em 0 0.8em 2em;
26+}
27+
28+dl {
29+ margin: 0.8em 0;
30+}
31+
32+dt {
33+ font-weight: bold;
34+}
35+dd {
36+ margin-left: 2em;
37+}
38+
39+a { text-decoration: none; }
40+a[href]:link { color: rgb(196,69,29); }
41+a[href]:visited { color: rgb(171,105,84); }
42+a[href]:hover { text-decoration:underline; }
43+
44+a[href].def:link, a[href].def:visited { color: black; }
45+a[href].def:hover { color: rgb(78, 98, 114); }
46+
47+/* @end */
48+
49+/* @group Show and hide with JS */
50+
51+body.js-enabled .hide-when-js-enabled {
52+ display: none;
53+}
54+
55+/* @end */
56+
57+/* @group Fonts & Sizes */
58+
59+/* Basic technique & IE workarounds from YUI 3
60+ For reasons, see:
61+ http://yui.yahooapis.com/3.1.1/build/cssfonts/fonts.css
62+ */
63+
64+body {
65+ font:13px/1.4 sans-serif;
66+ *font-size:small; /* for IE */
67+ *font:x-small; /* for IE in quirks mode */
68+}
69+
70+h1 { font-size: 146.5%; /* 19pt */ }
71+h2 { font-size: 131%; /* 17pt */ }
72+h3 { font-size: 116%; /* 15pt */ }
73+h4 { font-size: 100%; /* 13pt */ }
74+h5 { font-size: 100%; /* 13pt */ }
75+
76+select, input, button, textarea {
77+ font:99% sans-serif;
78+}
79+
80+table {
81+ font-size:inherit;
82+ font:100%;
83+}
84+
85+pre, code, kbd, samp, tt, .src {
86+ font-family:monospace;
87+ *font-size:108%;
88+ line-height: 124%;
89+}
90+
91+.links, .link {
92+ font-size: 85%; /* 11pt */
93+}
94+
95+#module-header .caption {
96+ font-size: 182%; /* 24pt */
97+}
98+
99+#module-header .caption sup {
100+ font-size: 70%;
101+ font-weight: normal;
102+}
103+
104+.info {
105+ font-size: 85%; /* 11pt */
106+}
107+
108+#table-of-contents, #synopsis {
109+ /* font-size: 85%; /* 11pt */
110+}
111+
112+
113+/* @end */
114+
115+/* @group Common */
116+
117+.caption, h1, h2, h3, h4, h5, h6, summary {
118+ font-weight: bold;
119+ color: rgb(78,98,114);
120+ margin: 0.8em 0 0.4em;
121+}
122+
123+* + h1, * + h2, * + h3, * + h4, * + h5, * + h6 {
124+ margin-top: 2em;
125+}
126+
127+h1 + h2, h2 + h3, h3 + h4, h4 + h5, h5 + h6 {
128+ margin-top: inherit;
129+}
130+
131+ul.links {
132+ list-style: none;
133+ text-align: left;
134+ float: right;
135+ display: inline-table;
136+ margin: 0 0 0 1em;
137+}
138+
139+ul.links li {
140+ display: inline;
141+ border-left: 1px solid #d5d5d5;
142+ white-space: nowrap;
143+ padding: 0;
144+}
145+
146+ul.links li a {
147+ padding: 0.2em 0.5em;
148+}
149+
150+.hide { display: none; }
151+.show { display: inherit; }
152+.clear { clear: both; }
153+
154+.collapser {
155+ background-image: url(minus.gif);
156+ background-repeat: no-repeat;
157+}
158+.expander {
159+ background-image: url(plus.gif);
160+ background-repeat: no-repeat;
161+}
162+.collapser, .expander {
163+ padding-left: 14px;
164+ margin-left: -14px;
165+ cursor: pointer;
166+}
167+p.caption.collapser,
168+p.caption.expander {
169+ background-position: 0 0.4em;
170+}
171+
172+.instance.collapser, .instance.expander {
173+ margin-left: 0px;
174+ background-position: left center;
175+ min-width: 9px;
176+ min-height: 9px;
177+}
178+
179+summary {
180+ cursor: pointer;
181+ outline: none;
182+ list-style-image: url(plus.gif);
183+ list-style-position: outside;
184+}
185+
186+details[open] > summary {
187+ list-style-image: url(minus.gif);
188+}
189+
190+pre {
191+ padding: 0.25em;
192+ margin: 0.8em 0;
193+ background: rgb(229,237,244);
194+ overflow: auto;
195+ border-bottom: 0.25em solid white;
196+ /* white border adds some space below the box to compensate
197+ for visual extra space that paragraphs have between baseline
198+ and the bounding box */
199+}
200+
201+.src {
202+ background: #f0f0f0;
203+ padding: 0.2em 0.5em;
204+}
205+
206+.keyword { font-weight: normal; }
207+.def { font-weight: bold; }
208+
209+@media print {
210+ #footer { display: none; }
211+}
212+
213+/* @end */
214+
215+/* @group Page Structure */
216+
217+#content {
218+ margin: 0 auto;
219+ padding: 0 2em 6em;
220+}
221+
222+#package-header {
223+ background: rgb(41,56,69);
224+ border-top: 5px solid rgb(78,98,114);
225+ color: #ddd;
226+ padding: 0.2em;
227+ position: relative;
228+ text-align: left;
229+}
230+
231+#package-header .caption {
232+ background: url(hslogo-16.png) no-repeat 0em;
233+ color: white;
234+ margin: 0 2em;
235+ font-weight: normal;
236+ font-style: normal;
237+ padding-left: 2em;
238+}
239+
240+#package-header a:link, #package-header a:visited { color: white; }
241+#package-header a:hover { background: rgb(78,98,114); }
242+
243+#module-header .caption {
244+ color: rgb(78,98,114);
245+ font-weight: bold;
246+ border-bottom: 1px solid #ddd;
247+}
248+
249+table.info {
250+ float: right;
251+ padding: 0.5em 1em;
252+ border: 1px solid #ddd;
253+ color: rgb(78,98,114);
254+ background-color: #fff;
255+ max-width: 40%;
256+ border-spacing: 0;
257+ position: relative;
258+ top: -0.5em;
259+ margin: 0 0 0 2em;
260+}
261+
262+.info th {
263+ padding: 0 1em 0 0;
264+}
265+
266+div#style-menu-holder {
267+ position: relative;
268+ z-index: 2;
269+ display: inline;
270+}
271+
272+#style-menu {
273+ position: absolute;
274+ z-index: 1;
275+ overflow: visible;
276+ background: #374c5e;
277+ margin: 0;
278+ text-align: center;
279+ right: 0;
280+ padding: 0;
281+ top: 1.25em;
282+}
283+
284+#style-menu li {
285+ display: list-item;
286+ border-style: none;
287+ margin: 0;
288+ padding: 0;
289+ color: #000;
290+ list-style-type: none;
291+}
292+
293+#style-menu li + li {
294+ border-top: 1px solid #919191;
295+}
296+
297+#style-menu a {
298+ width: 6em;
299+ padding: 3px;
300+ display: block;
301+}
302+
303+#footer {
304+ background: #ddd;
305+ border-top: 1px solid #aaa;
306+ padding: 0.5em 0;
307+ color: #666;
308+ text-align: center;
309+ position: absolute;
310+ bottom: 0;
311+ width: 100%;
312+ height: 3em;
313+}
314+
315+/* @end */
316+
317+/* @group Front Matter */
318+
319+#table-of-contents {
320+ float: right;
321+ clear: right;
322+ background: #faf9dc;
323+ border: 1px solid #d8d7ad;
324+ padding: 0.5em 1em;
325+ max-width: 20em;
326+ margin: 0.5em 0 1em 1em;
327+}
328+
329+#table-of-contents .caption {
330+ text-align: center;
331+ margin: 0;
332+}
333+
334+#table-of-contents ul {
335+ list-style: none;
336+ margin: 0;
337+}
338+
339+#table-of-contents ul ul {
340+ margin-left: 2em;
341+}
342+
343+#description .caption {
344+ display: none;
345+}
346+
347+#synopsis {
348+ display: block;
349+ position: fixed;
350+ right: 0;
351+ height: 80%;
352+ top: 10%;
353+ padding: 0;
354+ max-width: 75%;
355+ /* Ensure that synopsis covers everything (including MathJAX markup) */
356+ z-index: 1;
357+}
358+
359+#synopsis summary {
360+ display: block;
361+ float: left;
362+ width: 29px;
363+ color: rgba(255,255,255,0);
364+ height: 110px;
365+ margin: 0;
366+ font-size: 1px;
367+ padding: 0;
368+ background: url(synopsis.png) no-repeat 0px -8px;
369+}
370+
371+#synopsis details[open] > summary {
372+ background: url(synopsis.png) no-repeat -64px -8px;
373+}
374+
375+#synopsis ul {
376+ height: 100%;
377+ overflow: auto;
378+ padding: 0.5em;
379+ margin: 0;
380+}
381+
382+#synopsis ul ul {
383+ overflow: hidden;
384+}
385+
386+#synopsis ul,
387+#synopsis ul li.src {
388+ background-color: #faf9dc;
389+ white-space: nowrap;
390+ list-style: none;
391+ margin-left: 0;
392+}
393+
394+/* @end */
395+
396+/* @group Main Content */
397+
398+#interface div.top { margin: 2em 0; }
399+#interface h1 + div.top,
400+#interface h2 + div.top,
401+#interface h3 + div.top,
402+#interface h4 + div.top,
403+#interface h5 + div.top {
404+ margin-top: 1em;
405+}
406+#interface .src .selflink,
407+#interface .src .link {
408+ float: right;
409+ color: #919191;
410+ background: #f0f0f0;
411+ padding: 0 0.5em 0.2em;
412+ margin: 0 -0.5em 0 0;
413+ -moz-user-select: none;
414+}
415+#interface .src .selflink {
416+ border-left: 1px solid #919191;
417+ margin: 0 -0.5em 0 0.5em;
418+}
419+
420+#interface span.fixity {
421+ color: #919191;
422+ border-left: 1px solid #919191;
423+ padding: 0.2em 0.5em 0.2em 0.5em;
424+ margin: 0 -1em 0 1em;
425+}
426+
427+#interface span.rightedge {
428+ border-left: 1px solid #919191;
429+ padding: 0.2em 0 0.2em 0;
430+ margin: 0 0 0 1em;
431+}
432+
433+#interface table { border-spacing: 2px; }
434+#interface td {
435+ vertical-align: top;
436+ padding-left: 0.5em;
437+}
438+
439+#interface td.doc p {
440+ margin: 0;
441+}
442+#interface td.doc p + p {
443+ margin-top: 0.8em;
444+}
445+
446+.doc table {
447+ border-collapse: collapse;
448+ border-spacing: 0px;
449+}
450+
451+.doc th,
452+.doc td {
453+ padding: 5px;
454+ border: 1px solid #ddd;
455+}
456+
457+.doc th {
458+ background-color: #f0f0f0;
459+}
460+
461+.clearfix:after {
462+ clear: both;
463+ content: " ";
464+ display: block;
465+ height: 0;
466+ visibility: hidden;
467+}
468+
469+.subs ul {
470+ list-style: none;
471+ display: table;
472+ margin: 0;
473+}
474+
475+.subs ul li {
476+ display: table-row;
477+}
478+
479+.subs ul li dfn {
480+ display: table-cell;
481+ font-style: normal;
482+ font-weight: bold;
483+ margin: 1px 0;
484+ white-space: nowrap;
485+}
486+
487+.subs ul li > .doc {
488+ display: table-cell;
489+ padding-left: 0.5em;
490+ margin-bottom: 0.5em;
491+}
492+
493+.subs ul li > .doc p {
494+ margin: 0;
495+}
496+
497+/* Render short-style data instances */
498+.inst ul {
499+ height: 100%;
500+ padding: 0.5em;
501+ margin: 0;
502+}
503+
504+.inst, .inst li {
505+ list-style: none;
506+ margin-left: 1em;
507+}
508+
509+/* Workaround for bug in Firefox (issue #384) */
510+.inst-left {
511+ float: left;
512+}
513+
514+.top p.src {
515+ border-top: 1px solid #ccc;
516+}
517+
518+.subs, .doc {
519+ /* use this selector for one level of indent */
520+ padding-left: 2em;
521+}
522+
523+.warning {
524+ color: red;
525+}
526+
527+.arguments {
528+ margin-top: -0.4em;
529+}
530+.arguments .caption {
531+ display: none;
532+}
533+
534+.fields { padding-left: 1em; }
535+
536+.fields .caption { display: none; }
537+
538+.fields p { margin: 0 0; }
539+
540+/* this seems bulky to me
541+.methods, .constructors {
542+ background: #f8f8f8;
543+ border: 1px solid #eee;
544+}
545+*/
546+
547+/* @end */
548+
549+/* @group Auxillary Pages */
550+
551+
552+.extension-list {
553+ list-style-type: none;
554+ margin-left: 0;
555+}
556+
557+#mini {
558+ margin: 0 auto;
559+ padding: 0 1em 1em;
560+}
561+
562+#mini > * {
563+ font-size: 93%; /* 12pt */
564+}
565+
566+#mini #module-list .caption,
567+#mini #module-header .caption {
568+ font-size: 125%; /* 15pt */
569+}
570+
571+#mini #interface h1,
572+#mini #interface h2,
573+#mini #interface h3,
574+#mini #interface h4 {
575+ font-size: 109%; /* 13pt */
576+ margin: 1em 0 0;
577+}
578+
579+#mini #interface .top,
580+#mini #interface .src {
581+ margin: 0;
582+}
583+
584+#mini #module-list ul {
585+ list-style: none;
586+ margin: 0;
587+}
588+
589+#alphabet ul {
590+ list-style: none;
591+ padding: 0;
592+ margin: 0.5em 0 0;
593+ text-align: center;
594+}
595+
596+#alphabet li {
597+ display: inline;
598+ margin: 0 0.25em;
599+}
600+
601+#alphabet a {
602+ font-weight: bold;
603+}
604+
605+#index .caption,
606+#module-list .caption { font-size: 131%; /* 17pt */ }
607+
608+#index table {
609+ margin-left: 2em;
610+}
611+
612+#index .src {
613+ font-weight: bold;
614+}
615+#index .alt {
616+ font-size: 77%; /* 10pt */
617+ font-style: italic;
618+ padding-left: 2em;
619+}
620+
621+#index td + td {
622+ padding-left: 1em;
623+}
624+
625+#module-list ul {
626+ list-style: none;
627+ margin: 0 0 0 2em;
628+}
629+
630+#module-list li {
631+ clear: right;
632+}
633+
634+#module-list span.collapser,
635+#module-list span.expander {
636+ background-position: 0 0.3em;
637+}
638+
639+#module-list .package {
640+ float: right;
641+}
642+
643+:target {
644+ background-color: #ffff00;
645+}
646+
647+/* @end */
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/plus.gifnew file

Binary file not shown.

build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/quick-jump.cssnew file+164
@@ -0,0 +1,164 @@
1+/* @group Search box layout */
2+
3+#search {
4+ position: fixed;
5+ top: 3.2em;
6+ bottom: 0;
7+ left: calc(50% - 22em);
8+ width: 44em;
9+ z-index: 1000;
10+ pointer-events: none;
11+ overflow-y: auto;
12+}
13+
14+#search.hidden {
15+ display: none;
16+}
17+
18+#search-form, #search-results {
19+ box-shadow: 2px 2px 6px rgb(199, 204, 208);
20+ pointer-events: all;
21+}
22+
23+#search-form input {
24+ font-size: 1.25em; line-height: 2.3em; height: 2.4em;
25+ display: block;
26+ box-sizing: border-box;
27+ width: 100%;
28+ margin: 0;
29+ padding: 0 0.75em;
30+ border: 0.05em solid rgb(151, 179, 202);
31+}
32+
33+#search input:focus {
34+ outline: none;
35+}
36+
37+#search p.error {
38+ color: rgb(107, 24, 24);
39+ font-weight: bold;
40+}
41+
42+#search-results {
43+ box-sizing: border-box;
44+ border: 0.05em solid #b2d5fb;
45+ background: #e8f3ff;
46+}
47+
48+#search-form input + #search-results {
49+ border-top: none;
50+ top: 3em;
51+ max-height: calc(100% - 3em);
52+}
53+
54+/* @end */
55+
56+/* @group search results */
57+
58+#search-results > ul {
59+ margin: 0;
60+ list-style: none;
61+}
62+
63+#search-results > ul > li,
64+#search-results > p,
65+#search-results > table {
66+ padding: 0.5em 1em;
67+ margin: 0;
68+}
69+
70+#search-results > ul > li {
71+ border-bottom: 1px solid #b2d5fb;
72+}
73+
74+#search-results > ul > li > ul {
75+ list-style: none;
76+}
77+
78+.search-module h4 {
79+ margin: 0;
80+}
81+
82+.search-module > ul {
83+ margin: 0.5em 0 0.5em 2em;
84+}
85+
86+.search-module > ul > li > a[href] {
87+ display: block;
88+ color: inherit;
89+ padding: 0.25em 0.5em;
90+}
91+
92+.search-module > ul > li > a[href].active-link {
93+ background: #faf9dc;
94+}
95+
96+.search-module a[href]:hover {
97+ text-decoration: none;
98+}
99+
100+.search-result a a {
101+ pointer-events: none;
102+}
103+
104+.search-result ul.subs {
105+ display: inline-block;
106+ margin: 0; padding: 0;
107+}
108+
109+.search-result ul.subs li {
110+ display: none;
111+}
112+
113+.search-result ul.subs::after {
114+ display: inline-block;
115+ content: "...";
116+ color: rgb(78,98,114);
117+ margin: 0 0.25em;
118+}
119+
120+.more-results {
121+ color: rgb(99, 141, 173);
122+ position: relative;
123+}
124+
125+.more-results::before {
126+ content: "+";
127+ display: inline-block;
128+ color: #b2d5fb;
129+ font-weight: bold;
130+ font-size: 1.25em; line-height: inherit;
131+ position: absolute;
132+ left: -1em;
133+}
134+
135+/* @end */
136+
137+/* @group Keyboard shortcuts table */
138+
139+.keyboard-shortcuts {
140+ line-height: 1.6em;
141+}
142+
143+.keyboard-shortcuts th {
144+ color: rgb(78,98,114);
145+}
146+
147+.keyboard-shortcuts td:first-child,
148+.keyboard-shortcuts th:first-child {
149+ text-align: right;
150+ padding-right: 0.6em;
151+}
152+
153+.key {
154+ display: inline-block;
155+ font-size: 0.9em;
156+ min-width: 0.8em; line-height: 1.2em;
157+ text-align: center;
158+ background: #b2d5fb;
159+ border: 1px solid #74a3d6;
160+ padding: 0 0.2em;
161+ margin: 0 0.1em;
162+}
163+
164+/* @end */
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/quick-jump.min.jsnew file+2
@@ -0,0 +1,2 @@
1+!function e(t,n,o){function r(s,a){if(!n[s]){if(!t[s]){var l="function"==typeof require&&require;if(!a&&l)return l(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[s]={exports:{}};t[s][0].call(u.exports,function(e){var n=t[s][1][e];return r(n||e)},u,u.exports,e,t,n,o)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s<o.length;s++)r(o[s]);return r}({1:[function(e,t,n){"use strict";function o(e,t,n){var o=new XMLHttpRequest;o.onreadystatechange=function(){if(o.readyState===XMLHttpRequest.DONE)if(200===o.status){if(t)try{t(JSON.parse(o.responseText))}catch(e){n(o)}}else n&&n(o)},o.open("GET",e,!0),o.send()}function r(e){var t=document.querySelector("#page-menu"),n=document.createElement("li");t.insertBefore(n,t.firstChild),p.render(d(v,{onClick:e,title:"Quick Jump"}),t,n)}function i(e,t){return t.length<=e?t:t.slice(0,e)}function s(){return d("table",{class:"keyboard-shortcuts"},d("tr",null,d("th",null,"Key"),d("th",null,"Shortcut")),d("tr",null,d("td",null,d("span",{class:"key"},"s")),d("td",null,"Open this search box")),d("tr",null,d("td",null,d("span",{class:"key"},"esc")),d("td",null,"Close this search box")),d("tr",null,d("td",null,d("span",{class:"key"},"↓"),",",d("span",{class:"key"},"ctrl")," + ",d("span",{class:"key"},"j")),d("td",null,"Move down in search results")),d("tr",null,d("td",null,d("span",{class:"key"},"↑"),",",d("span",{class:"key"},"ctrl")," + ",d("span",{class:"key"},"k")),d("td",null,"Move up in search results")),d("tr",null,d("td",null,d("span",{class:"key"},"↵")),d("td",null,"Go to active search result")))}function a(){return d("p",null,"You can find any exported type, constructor, class, function or pattern defined in this package by (approximate) name.")}function l(e){var t=[d("p",null,"Your search for '",e.searchString,"' produced the following list of results: ",d("code",null,"[]"),"."),d("p",null,d("code",null,"Nothing")," matches your query for '",e.searchString,"'."),d("p",null,d("code",null,"Left \"no matches for '",e.searchString,"'\" :: Either String (NonEmpty SearchResult)"))];return t[(e.searchString||"a").charCodeAt(0)%t.length]}function c(e,t){p.render(d(_,{baseUrl:e||".",showHideTrigger:t||r}),document.body)}var u=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function o(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(o.prototype=n.prototype,new o)}}();Object.defineProperty(n,"__esModule",{value:!0});var h=e("fuse.js"),p=e("preact"),d=p.h,f=p.Component,v=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return u(t,e),t.prototype.render=function(e){return d("li",null,d("a",{href:"#",onClick:function(t){t.preventDefault(),e.onClick()}},e.title))},t}(f),_=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.linkIndex=0,t.focusPlease=!1,t.navigatedByKeyboard=!1,t}return u(t,e),t.prototype.componentWillMount=function(){var e=this;this.setState({searchString:"",isVisible:!1,expanded:{},activeLinkIndex:-1,moduleResults:[]}),o(this.props.baseUrl+"/doc-index.json",function(t){e.setState({fuse:new h(t,{threshold:.25,caseSensitive:!0,includeScore:!0,tokenize:!0,keys:[{name:"name",weight:.7},{name:"module",weight:.3}]}),moduleResults:[]})},function(t){console&&console.error("could not load 'doc-index.json' for searching",t),e.setState({failedLoading:!0})}),document.addEventListener("mousedown",this.hide.bind(this)),document.addEventListener("keydown",function(t){e.state.isVisible&&("Escape"===t.key?e.hide():"ArrowUp"===t.key||"k"===t.key&&t.ctrlKey?(t.preventDefault(),e.navigateLinks(-1)):"ArrowDown"===t.key||"j"===t.key&&t.ctrlKey?(t.preventDefault(),e.navigateLinks(1)):"Enter"===t.key&&e.state.activeLinkIndex>=0&&e.followActiveLink()),"s"===t.key&&"input"!==t.target.tagName.toLowerCase()&&(t.preventDefault(),e.show())})},t.prototype.hide=function(){this.setState({isVisible:!1,searchString:""})},t.prototype.show=function(){this.state.isVisible||(this.focusPlease=!0,this.setState({isVisible:!0,activeLinkIndex:-1}))},t.prototype.toggleVisibility=function(){this.state.isVisible?this.hide():this.show()},t.prototype.navigateLinks=function(e){var t=Math.max(-1,Math.min(this.linkIndex-1,this.state.activeLinkIndex+e));this.navigatedByKeyboard=!0,this.setState({activeLinkIndex:t})},t.prototype.followActiveLink=function(){this.activeLinkAction&&this.activeLinkAction()},t.prototype.updateResults=function(){var e=this.input&&this.input.value||"",t={};this.state.fuse.search(e).forEach(function(e){var n=e.item.module;(t[n]||(t[n]=[])).push(e)});var n=[];for(var o in t)!function(e){var o=t[e],r=0;o.forEach(function(e){r+=1/e.score}),n.push({module:e,totalScore:1/r,items:o})}(o);n.sort(function(e,t){return e.totalScore-t.totalScore}),this.setState({searchString:e,isVisible:!0,moduleResults:n})},t.prototype.componentDidUpdate=function(){if(this.searchResults&&this.activeLink&&this.navigatedByKeyboard){var e=this.activeLink.getClientRects()[0],t=this.searchResults.getClientRects()[0].top;e.bottom>window.innerHeight?this.searchResults.scrollTop+=e.bottom-window.innerHeight+80:e.top<t&&(this.searchResults.scrollTop-=t-e.top+80)}this.focusPlease&&this.input&&this.input.focus(),this.navigatedByKeyboard=!1,this.focusPlease=!1},t.prototype.componentDidMount=function(){this.props.showHideTrigger(this.toggleVisibility.bind(this))},t.prototype.render=function(e,t){var n=this;if(t.failedLoading){var o="file:"==window.location.protocol;return d("div",{id:"search",class:t.isVisible?"":"hidden"},d("div",{id:"search-results"},d("p",{class:"error"},"Failed to load file 'doc-index.json' containing definitions in this package."),o?d("p",{class:"error"},"To use quick jump, load this page with HTTP (from a local static file web server) instead of using the ",d("code",null,"file://")," protocol. (For security reasons, it is not possible to fetch auxiliary files using JS in a HTML page opened with ",d("code",null,"file://"),".)"):[]))}this.linkIndex=0;var r=function(e){e.stopPropagation()},c=i(10,t.moduleResults).map(function(e){return n.renderResultsInModule(e)});return d("div",{id:"search",class:t.isVisible?"":"hidden"},d("div",{id:"search-form",onMouseDown:r},d("input",{placeholder:"Search in package by name",ref:function(e){n.input=e},onFocus:this.show.bind(this),onClick:this.show.bind(this),onInput:this.updateResults.bind(this)})),d("div",{id:"search-results",ref:function(e){n.searchResults=e},onMouseDown:r,onMouseOver:function(e){for(var t=e.target;t&&"function"==typeof t.getAttribute;){var o=t.getAttribute("data-link-index");if("string"==typeof o){var r=parseInt(o,10);n.setState({activeLinkIndex:r});break}t=t.parentNode}}},""===t.searchString?[d(a,null),d(s,null)]:0==c.length?d(l,{searchString:t.searchString}):d("ul",null,c)))},t.prototype.renderResultsInModule=function(e){var t=this,n=e.items,o=e.module,r=this.state.expanded[o]||n.length<=10,s=r?n:i(8,n),a=function(e){return d("li",{class:"search-result"},t.navigationLink(t.props.baseUrl+"/"+e.link,{},d(g,{html:e.display_html})))};return d("li",{class:"search-module"},d("h4",null,o),d("ul",null,s.map(function(e){return a(e.item)}),r?[]:d("li",{class:"more-results"},this.actionLink(function(){var e=Object.assign({},t.state.expanded);e[o]=!0,t.setState({expanded:e})},{},"show "+(n.length-s.length)+" more results from this module"))))},t.prototype.navigationLink=function(e,t){for(var n=this,o=[],r=2;r<arguments.length;r++)o[r-2]=arguments[r];var i=Object.assign({href:e,onClick:this.hide.bind(this)},t);return this.menuLink.apply(this,[i,function(){window.location.href=e,n.hide()}].concat(o))},t.prototype.actionLink=function(e,t){for(var n=[],o=2;o<arguments.length;o++)n[o-2]=arguments[o];var r=Object.assign({href:"#",onClick:function(t){t.preventDefault(),e()}},t);return this.menuLink.apply(this,[r,e].concat(n))},t.prototype.menuLink=function(e,t){for(var n=this,o=[],r=2;r<arguments.length;r++)o[r-2]=arguments[r];var i=this.linkIndex;i===this.state.activeLinkIndex&&(e.class=(e.class?e.class+" ":"")+"active-link",e.ref=function(e){e&&(n.activeLink=e)},this.activeLinkAction=t);var s=Object.assign({"data-link-index":i},e);return this.linkIndex+=1,d.apply(void 0,["a",s].concat(o))},t}(f),g=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return u(t,e),t.prototype.shouldComponentUpdate=function(e){return this.props.html!==e.html},t.prototype.render=function(e){return d("div",{dangerouslySetInnerHTML:{__html:e.html}})},t}(f);n.init=c,window.quickNav={init:c}},{"fuse.js":2,preact:3}],2:[function(e,t,n){!function(e,o){"object"==typeof n&&"object"==typeof t?t.exports=o():"function"==typeof define&&define.amd?define("Fuse",[],o):"object"==typeof n?n.Fuse=o():e.Fuse=o()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=8)}([function(e,t,n){"use strict";e.exports=function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,n){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),i=n(5),s=n(7),a=n(4),l=function(){function e(t,n){var r=n.location,i=void 0===r?0:r,s=n.distance,l=void 0===s?100:s,c=n.threshold,u=void 0===c?.6:c,h=n.maxPatternLength,p=void 0===h?32:h,d=n.isCaseSensitive,f=void 0!==d&&d,v=n.tokenSeparator,_=void 0===v?/ +/g:v,g=n.findAllMatches,m=void 0!==g&&g,y=n.minMatchCharLength,k=void 0===y?1:y;o(this,e),this.options={location:i,distance:l,threshold:u,maxPatternLength:p,isCaseSensitive:f,tokenSeparator:_,findAllMatches:m,minMatchCharLength:k},this.pattern=this.options.isCaseSensitive?t:t.toLowerCase(),this.pattern.length<=p&&(this.patternAlphabet=a(this.pattern))}return r(e,[{key:"search",value:function(e){if(this.options.isCaseSensitive||(e=e.toLowerCase()),this.pattern===e)return{isMatch:!0,score:0,matchedIndices:[[0,e.length-1]]};var t=this.options,n=t.maxPatternLength,o=t.tokenSeparator;if(this.pattern.length>n)return i(e,this.pattern,o);var r=this.options,a=r.location,l=r.distance,c=r.threshold,u=r.findAllMatches,h=r.minMatchCharLength;return s(e,this.pattern,this.patternAlphabet,{location:a,distance:l,threshold:c,findAllMatches:u,minMatchCharLength:h})}}]),e}();e.exports=l},function(e,t,n){"use strict";var o=n(0),r=function e(t,n,r){if(n){var i=n.indexOf("."),s=n,a=null;-1!==i&&(s=n.slice(0,i),a=n.slice(i+1));var l=t[s];if(null!==l&&void 0!==l)if(a||"string"!=typeof l&&"number"!=typeof l)if(o(l))for(var c=0,u=l.length;c<u;c+=1)e(l[c],a,r);else a&&e(l,a,r);else r.push(l.toString())}else r.push(t);return r};e.exports=function(e,t){return r(e,t,[])}},function(e,t,n){"use strict";e.exports=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[],o=-1,r=-1,i=0,s=e.length;i<s;i+=1){var a=e[i];a&&-1===o?o=i:a||-1===o||((r=i-1)-o+1>=t&&n.push([o,r]),o=-1)}return e[i-1]&&i-o>=t&&n.push([o,i-1]),n}},function(e,t,n){"use strict";e.exports=function(e){for(var t={},n=e.length,o=0;o<n;o+=1)t[e.charAt(o)]=0;for(var r=0;r<n;r+=1)t[e.charAt(r)]|=1<<n-r-1;return t}},function(e,t,n){"use strict";var o=/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g;e.exports=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:/ +/g,r=new RegExp(t.replace(o,"\\$&").replace(n,"|")),i=e.match(r),s=!!i,a=[];if(s)for(var l=0,c=i.length;l<c;l+=1){var u=i[l];a.push([e.indexOf(u),u.length-1])}return{score:s?.5:1,isMatch:s,matchedIndices:a}}},function(e,t,n){"use strict";e.exports=function(e,t){var n=t.errors,o=void 0===n?0:n,r=t.currentLocation,i=void 0===r?0:r,s=t.expectedLocation,a=void 0===s?0:s,l=t.distance,c=void 0===l?100:l,u=o/e.length,h=Math.abs(a-i);return c?u+h/c:h?1:u}},function(e,t,n){"use strict";var o=n(6),r=n(3);e.exports=function(e,t,n,i){for(var s=i.location,a=void 0===s?0:s,l=i.distance,c=void 0===l?100:l,u=i.threshold,h=void 0===u?.6:u,p=i.findAllMatches,d=void 0!==p&&p,f=i.minMatchCharLength,v=void 0===f?1:f,_=a,g=e.length,m=h,y=e.indexOf(t,_),k=t.length,b=[],x=0;x<g;x+=1)b[x]=0;if(-1!==y){var w=o(t,{errors:0,currentLocation:y,expectedLocation:_,distance:c});if(m=Math.min(w,m),-1!==(y=e.lastIndexOf(t,_+k))){var S=o(t,{errors:0,currentLocation:y,expectedLocation:_,distance:c});m=Math.min(S,m)}}y=-1;for(var L=[],C=1,M=k+g,N=1<<k-1,I=0;I<k;I+=1){for(var A=0,T=M;A<T;)o(t,{errors:I,currentLocation:_+T,expectedLocation:_,distance:c})<=m?A=T:M=T,T=Math.floor((M-A)/2+A);M=T;var O=Math.max(1,_-T+1),j=d?g:Math.min(_+T,g)+k,P=Array(j+2);P[j+1]=(1<<I)-1;for(var E=j;E>=O;E-=1){var R=E-1,U=n[e.charAt(R)];if(U&&(b[R]=1),P[E]=(P[E+1]<<1|1)&U,0!==I&&(P[E]|=(L[E+1]|L[E])<<1|1|L[E+1]),P[E]&N&&(C=o(t,{errors:I,currentLocation:R,expectedLocation:_,distance:c}))<=m){if(m=C,(y=R)<=_)break;O=Math.max(1,2*_-y)}}if(o(t,{errors:I+1,currentLocation:_,expectedLocation:_,distance:c})>m)break;L=P}return{isMatch:y>=0,score:0===C?.001:C,matchedIndices:r(b,v)}}},function(e,t,n){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),i=n(1),s=n(2),a=n(0),l=function(){function e(t,n){var r=n.location,i=void 0===r?0:r,a=n.distance,l=void 0===a?100:a,c=n.threshold,u=void 0===c?.6:c,h=n.maxPatternLength,p=void 0===h?32:h,d=n.caseSensitive,f=void 0!==d&&d,v=n.tokenSeparator,_=void 0===v?/ +/g:v,g=n.findAllMatches,m=void 0!==g&&g,y=n.minMatchCharLength,k=void 0===y?1:y,b=n.id,x=void 0===b?null:b,w=n.keys,S=void 0===w?[]:w,L=n.shouldSort,C=void 0===L||L,M=n.getFn,N=void 0===M?s:M,I=n.sortFn,A=void 0===I?function(e,t){return e.score-t.score}:I,T=n.tokenize,O=void 0!==T&&T,j=n.matchAllTokens,P=void 0!==j&&j,E=n.includeMatches,R=void 0!==E&&E,U=n.includeScore,D=void 0!==U&&U,V=n.verbose,F=void 0!==V&&V;o(this,e),this.options={location:i,distance:l,threshold:u,maxPatternLength:p,isCaseSensitive:f,tokenSeparator:_,findAllMatches:m,minMatchCharLength:k,id:x,keys:S,includeMatches:R,includeScore:D,shouldSort:C,getFn:N,sortFn:A,verbose:F,tokenize:O,matchAllTokens:P},this.setCollection(t)}return r(e,[{key:"setCollection",value:function(e){return this.list=e,e}},{key:"search",value:function(e){this._log('---------\nSearch pattern: "'+e+'"');var t=this._prepareSearchers(e),n=t.tokenSearchers,o=t.fullSearcher,r=this._search(n,o),i=r.weights,s=r.results;return this._computeScore(i,s),this.options.shouldSort&&this._sort(s),this._format(s)}},{key:"_prepareSearchers",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=[];if(this.options.tokenize)for(var n=e.split(this.options.tokenSeparator),o=0,r=n.length;o<r;o+=1)t.push(new i(n[o],this.options));return{tokenSearchers:t,fullSearcher:new i(e,this.options)}}},{key:"_search",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=this.list,o={},r=[];if("string"==typeof n[0]){for(var i=0,s=n.length;i<s;i+=1)this._analyze({key:"",value:n[i],record:i,index:i},{resultMap:o,results:r,tokenSearchers:e,fullSearcher:t});return{weights:null,results:r}}for(var a={},l=0,c=n.length;l<c;l+=1)for(var u=n[l],h=0,p=this.options.keys.length;h<p;h+=1){var d=this.options.keys[h];if("string"!=typeof d){if(a[d.name]={weight:1-d.weight||1},d.weight<=0||d.weight>1)throw new Error("Key weight has to be > 0 and <= 1");d=d.name}else a[d]={weight:1};this._analyze({key:d,value:this.options.getFn(u,d),record:u,index:l},{resultMap:o,results:r,tokenSearchers:e,fullSearcher:t})}return{weights:a,results:r}}},{key:"_analyze",value:function(e,t){var n=e.key,o=e.arrayIndex,r=void 0===o?-1:o,i=e.value,s=e.record,l=e.index,c=t.tokenSearchers,u=void 0===c?[]:c,h=t.fullSearcher,p=void 0===h?[]:h,d=t.resultMap,f=void 0===d?{}:d,v=t.results,_=void 0===v?[]:v;if(void 0!==i&&null!==i){var g=!1,m=-1,y=0;if("string"==typeof i){this._log("\nKey: "+(""===n?"-":n));var k=p.search(i);if(this._log('Full text: "'+i+'", score: '+k.score),this.options.tokenize){for(var b=i.split(this.options.tokenSeparator),x=[],w=0;w<u.length;w+=1){var S=u[w];this._log('\nPattern: "'+S.pattern+'"');for(var L=!1,C=0;C<b.length;C+=1){var M=b[C],N=S.search(M),I={};N.isMatch?(I[M]=N.score,g=!0,L=!0,x.push(N.score)):(I[M]=1,this.options.matchAllTokens||x.push(1)),this._log('Token: "'+M+'", score: '+I[M])}L&&(y+=1)}m=x[0];for(var A=x.length,T=1;T<A;T+=1)m+=x[T];m/=A,this._log("Token score average:",m)}var O=k.score;m>-1&&(O=(O+m)/2),this._log("Score average:",O);var j=!this.options.tokenize||!this.options.matchAllTokens||y>=u.length;if(this._log("\nCheck Matches: "+j),(g||k.isMatch)&&j){var P=f[l];P?P.output.push({key:n,arrayIndex:r,value:i,score:O,matchedIndices:k.matchedIndices}):(f[l]={item:s,output:[{key:n,arrayIndex:r,value:i,score:O,matchedIndices:k.matchedIndices}]},_.push(f[l]))}}else if(a(i))for(var E=0,R=i.length;E<R;E+=1)this._analyze({key:n,arrayIndex:E,value:i[E],record:s,index:l},{resultMap:f,results:_,tokenSearchers:u,fullSearcher:p})}}},{key:"_computeScore",value:function(e,t){this._log("\n\nComputing score:\n");for(var n=0,o=t.length;n<o;n+=1){for(var r=t[n].output,i=r.length,s=0,a=1,l=0;l<i;l+=1){var c=r[l].score,u=e?e[r[l].key].weight:1,h=c*u;1!==u?a=Math.min(a,h):(r[l].nScore=h,s+=h)}t[n].score=1===a?s/i:a,this._log(t[n])}}},{key:"_sort",value:function(e){this._log("\n\nSorting...."),e.sort(this.options.sortFn)}},{key:"_format",value:function(e){var t=[];this._log("\n\nOutput:\n\n",JSON.stringify(e));var n=[];this.options.includeMatches&&n.push(function(e,t){var n=e.output;t.matches=[];for(var o=0,r=n.length;o<r;o+=1){var i=n[o];if(0!==i.matchedIndices.length){var s={indices:i.matchedIndices,value:i.value};i.key&&(s.key=i.key),i.hasOwnProperty("arrayIndex")&&i.arrayIndex>-1&&(s.arrayIndex=i.arrayIndex),t.matches.push(s)}}}),this.options.includeScore&&n.push(function(e,t){t.score=e.score});for(var o=0,r=e.length;o<r;o+=1){var i=e[o];if(this.options.id&&(i.item=this.options.getFn(i.item,this.options.id)[0]),n.length){for(var s={item:i.item},a=0,l=n.length;a<l;a+=1)n[a](i,s);t.push(s)}else t.push(i.item)}return t}},{key:"_log",value:function(){if(this.options.verbose){var e;(e=console).log.apply(e,arguments)}}}]),e}();e.exports=l}])})},{}],3:[function(e,t,n){!function(){"use strict";function e(){}function n(t,n){var o,r,i,s,a=T;for(s=arguments.length;s-- >2;)A.push(arguments[s]);for(n&&null!=n.children&&(A.length||A.push(n.children),delete n.children);A.length;)if((r=A.pop())&&void 0!==r.pop)for(s=r.length;s--;)A.push(r[s]);else"boolean"==typeof r&&(r=null),(i="function"!=typeof t)&&(null==r?r="":"number"==typeof r?r=String(r):"string"!=typeof r&&(i=!1)),i&&o?a[a.length-1]+=r:a===T?a=[r]:a.push(r),o=i;var l=new e;return l.nodeName=t,l.children=a,l.attributes=null==n?void 0:n,l.key=null==n?void 0:n.key,void 0!==I.vnode&&I.vnode(l),l}function o(e,t){for(var n in t)e[n]=t[n];return e}function r(e){!e.__d&&(e.__d=!0)&&1==P.push(e)&&(I.debounceRendering||O)(i)}function i(){var e,t=P;for(P=[];e=t.pop();)e.__d&&L(e)}function s(e,t,n){return"string"==typeof t||"number"==typeof t?void 0!==e.splitText:"string"==typeof t.nodeName?!e._componentConstructor&&a(e,t.nodeName):n||e._componentConstructor===t.nodeName}function a(e,t){return e.__n===t||e.nodeName.toLowerCase()===t.toLowerCase()}function l(e){var t=o({},e.attributes);t.children=e.children;var n=e.nodeName.defaultProps;if(void 0!==n)for(var r in n)void 0===t[r]&&(t[r]=n[r]);return t}function c(e,t){var n=t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e);return n.__n=e,n}function u(e){var t=e.parentNode;t&&t.removeChild(e)}function h(e,t,n,o,r){if("className"===t&&(t="class"),"key"===t);else if("ref"===t)n&&n(null),o&&o(e);else if("class"!==t||r)if("style"===t){if(o&&"string"!=typeof o&&"string"!=typeof n||(e.style.cssText=o||""),o&&"object"==typeof o){if("string"!=typeof n)for(var i in n)i in o||(e.style[i]="");for(var i in o)e.style[i]="number"==typeof o[i]&&!1===j.test(i)?o[i]+"px":o[i]}}else if("dangerouslySetInnerHTML"===t)o&&(e.innerHTML=o.__html||"");else if("o"==t[0]&&"n"==t[1]){var s=t!==(t=t.replace(/Capture$/,""));t=t.toLowerCase().substring(2),o?n||e.addEventListener(t,d,s):e.removeEventListener(t,d,s),(e.__l||(e.__l={}))[t]=o}else if("list"!==t&&"type"!==t&&!r&&t in e)p(e,t,null==o?"":o),null!=o&&!1!==o||e.removeAttribute(t);else{var a=r&&t!==(t=t.replace(/^xlink\:?/,""));null==o||!1===o?a?e.removeAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase()):e.removeAttribute(t):"function"!=typeof o&&(a?e.setAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase(),o):e.setAttribute(t,o))}else e.className=o||""}function p(e,t,n){try{e[t]=n}catch(e){}}function d(e){return this.__l[e.type](I.event&&I.event(e)||e)}function f(){for(var e;e=E.pop();)I.afterMount&&I.afterMount(e),e.componentDidMount&&e.componentDidMount()}function v(e,t,n,o,r,i){R++||(U=null!=r&&void 0!==r.ownerSVGElement,D=null!=e&&!("__preactattr_"in e));var s=_(e,t,n,o,i);return r&&s.parentNode!==r&&r.appendChild(s),--R||(D=!1,i||f()),s}function _(e,t,n,o,r){var i=e,s=U;if(null!=t&&"boolean"!=typeof t||(t=""),"string"==typeof t||"number"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=t&&(e.nodeValue=t):(i=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),m(e,!0))),i.__preactattr_=!0,i;var l=t.nodeName;if("function"==typeof l)return C(e,t,n,o);if(U="svg"===l||"foreignObject"!==l&&U,l=String(l),(!e||!a(e,l))&&(i=c(l,U),e)){for(;e.firstChild;)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),m(e,!0)}var u=i.firstChild,h=i.__preactattr_,p=t.children;if(null==h){h=i.__preactattr_={};for(var d=i.attributes,f=d.length;f--;)h[d[f].name]=d[f].value}return!D&&p&&1===p.length&&"string"==typeof p[0]&&null!=u&&void 0!==u.splitText&&null==u.nextSibling?u.nodeValue!=p[0]&&(u.nodeValue=p[0]):(p&&p.length||null!=u)&&g(i,p,n,o,D||null!=h.dangerouslySetInnerHTML),k(i,t.attributes,h),U=s,i}function g(e,t,n,o,r){var i,a,l,c,h,p=e.childNodes,d=[],f={},v=0,g=0,y=p.length,k=0,b=t?t.length:0;if(0!==y)for(L=0;L<y;L++){var x=p[L],w=x.__preactattr_;null!=(S=b&&w?x._component?x._component.__k:w.key:null)?(v++,f[S]=x):(w||(void 0!==x.splitText?!r||x.nodeValue.trim():r))&&(d[k++]=x)}if(0!==b)for(L=0;L<b;L++){h=null;var S=(c=t[L]).key;if(null!=S)v&&void 0!==f[S]&&(h=f[S],f[S]=void 0,v--);else if(!h&&g<k)for(i=g;i<k;i++)if(void 0!==d[i]&&s(a=d[i],c,r)){h=a,d[i]=void 0,i===k-1&&k--,i===g&&g++;break}h=_(h,c,n,o),l=p[L],h&&h!==e&&h!==l&&(null==l?e.appendChild(h):h===l.nextSibling?u(l):e.insertBefore(h,l))}if(v)for(var L in f)void 0!==f[L]&&m(f[L],!1);for(;g<=k;)void 0!==(h=d[k--])&&m(h,!1)}function m(e,t){var n=e._component;n?M(n):(null!=e.__preactattr_&&e.__preactattr_.ref&&e.__preactattr_.ref(null),!1!==t&&null!=e.__preactattr_||u(e),y(e))}function y(e){for(e=e.lastChild;e;){var t=e.previousSibling;m(e,!0),e=t}}function k(e,t,n){var o;for(o in n)t&&null!=t[o]||null==n[o]||h(e,o,n[o],n[o]=void 0,U);for(o in t)"children"===o||"innerHTML"===o||o in n&&t[o]===("value"===o||"checked"===o?e[o]:n[o])||h(e,o,n[o],n[o]=t[o],U)}function b(e){var t=e.constructor.name;(V[t]||(V[t]=[])).push(e)}function x(e,t,n){var o,r=V[e.name];if(e.prototype&&e.prototype.render?(o=new e(t,n),N.call(o,t,n)):((o=new N(t,n)).constructor=e,o.render=w),r)for(var i=r.length;i--;)if(r[i].constructor===e){o.__b=r[i].__b,r.splice(i,1);break}return o}function w(e,t,n){return this.constructor(e,n)}function S(e,t,n,o,i){e.__x||(e.__x=!0,(e.__r=t.ref)&&delete t.ref,(e.__k=t.key)&&delete t.key,!e.base||i?e.componentWillMount&&e.componentWillMount():e.componentWillReceiveProps&&e.componentWillReceiveProps(t,o),o&&o!==e.context&&(e.__c||(e.__c=e.context),e.context=o),e.__p||(e.__p=e.props),e.props=t,e.__x=!1,0!==n&&(1!==n&&!1===I.syncComponentUpdates&&e.base?r(e):L(e,1,i)),e.__r&&e.__r(e))}function L(e,t,n,r){if(!e.__x){var i,s,a,c=e.props,u=e.state,h=e.context,p=e.__p||c,d=e.__s||u,_=e.__c||h,g=e.base,y=e.__b,k=g||y,b=e._component,w=!1;if(g&&(e.props=p,e.state=d,e.context=_,2!==t&&e.shouldComponentUpdate&&!1===e.shouldComponentUpdate(c,u,h)?w=!0:e.componentWillUpdate&&e.componentWillUpdate(c,u,h),e.props=c,e.state=u,e.context=h),e.__p=e.__s=e.__c=e.__b=null,e.__d=!1,!w){i=e.render(c,u,h),e.getChildContext&&(h=o(o({},h),e.getChildContext()));var C,N,A=i&&i.nodeName;if("function"==typeof A){var T=l(i);(s=b)&&s.constructor===A&&T.key==s.__k?S(s,T,1,h,!1):(C=s,e._component=s=x(A,T,h),s.__b=s.__b||y,s.__u=e,S(s,T,0,h,!1),L(s,1,n,!0)),N=s.base}else a=k,(C=b)&&(a=e._component=null),(k||1===t)&&(a&&(a._component=null),N=v(a,i,h,n||!g,k&&k.parentNode,!0));if(k&&N!==k&&s!==b){var O=k.parentNode;O&&N!==O&&(O.replaceChild(N,k),C||(k._component=null,m(k,!1)))}if(C&&M(C),e.base=N,N&&!r){for(var j=e,P=e;P=P.__u;)(j=P).base=N;N._component=j,N._componentConstructor=j.constructor}}if(!g||n?E.unshift(e):w||(e.componentDidUpdate&&e.componentDidUpdate(p,d,_),I.afterUpdate&&I.afterUpdate(e)),null!=e.__h)for(;e.__h.length;)e.__h.pop().call(e);R||r||f()}}function C(e,t,n,o){for(var r=e&&e._component,i=r,s=e,a=r&&e._componentConstructor===t.nodeName,c=a,u=l(t);r&&!c&&(r=r.__u);)c=r.constructor===t.nodeName;return r&&c&&(!o||r._component)?(S(r,u,3,n,o),e=r.base):(i&&!a&&(M(i),e=s=null),r=x(t.nodeName,u,n),e&&!r.__b&&(r.__b=e,s=null),S(r,u,1,n,o),e=r.base,s&&e!==s&&(s._component=null,m(s,!1))),e}function M(e){I.beforeUnmount&&I.beforeUnmount(e);var t=e.base;e.__x=!0,e.componentWillUnmount&&e.componentWillUnmount(),e.base=null;var n=e._component;n?M(n):t&&(t.__preactattr_&&t.__preactattr_.ref&&t.__preactattr_.ref(null),e.__b=t,u(t),b(e),y(t)),e.__r&&e.__r(null)}function N(e,t){this.__d=!0,this.context=t,this.props=e,this.state=this.state||{}}var I={},A=[],T=[],O="function"==typeof Promise?Promise.resolve().then.bind(Promise.resolve()):setTimeout,j=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,P=[],E=[],R=0,U=!1,D=!1,V={};o(N.prototype,{setState:function(e,t){var n=this.state;this.__s||(this.__s=o({},n)),o(n,"function"==typeof e?e(n,this.props):e),t&&(this.__h=this.__h||[]).push(t),r(this)},forceUpdate:function(e){e&&(this.__h=this.__h||[]).push(e),L(this,2)},render:function(){}});var F={h:n,createElement:n,cloneElement:function(e,t){return n(e.nodeName,o(o({},e.attributes),t),arguments.length>2?[].slice.call(arguments,2):e.children)},Component:N,render:function(e,t,n){return v(n,e,{},!1,t,!1)},rerender:i,options:I};void 0!==t?t.exports=F:self.preact=F}()},{}]},{},[1]);
2+//# sourceMappingURL=quick-jump.min.js.map
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Dist.Internal.htmlnew file+174
@@ -0,0 +1,174 @@
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 GADTs #-}</span><span>
2+</span><a name="line-2"></a><span class="hs-pragma">{-# LANGUAGE AllowAmbiguousTypes #-}</span><span>
3+</span><a name="line-3"></a><span class="hs-pragma">{-# LANGUAGE TypeApplications #-}</span><span>
4+</span><a name="line-4"></a><span class="hs-pragma">{-# LANGUAGE KindSignatures #-}</span><span>
5+</span><a name="line-5"></a><span class="hs-pragma">{-# LANGUAGE ScopedTypeVariables #-}</span><span>
6+</span><a name="line-6"></a><span class="hs-pragma">{-# LANGUAGE FlexibleContexts #-}</span><span>
7+</span><a name="line-7"></a><span class="hs-pragma">{-# LANGUAGE DataKinds #-}</span><span>
8+</span><a name="line-8"></a><span class="hs-pragma">{-# LANGUAGE RankNTypes #-}</span><span>
9+</span><a name="line-9"></a><span>
10+</span><a name="line-10"></a><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">Dist.Internal</span><span>
11+</span><a name="line-11"></a><span> </span><span class="hs-special">(</span><span>
12+</span><a name="line-12"></a><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
13+</span><a name="line-13"></a><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span class="hs-special">,</span><span>
14+</span><a name="line-14"></a><span>
15+</span><a name="line-15"></a><span> </span><a href="Dist.Internal.html#fmapD"><span class="hs-identifier hs-var">fmapD</span></a><span class="hs-special">,</span><span>
16+</span><a name="line-16"></a><span> </span><a href="Dist.Internal.html#unitD"><span class="hs-identifier hs-var">unitD</span></a><span class="hs-special">,</span><span>
17+</span><a name="line-17"></a><span> </span><a href="Dist.Internal.html#multD"><span class="hs-identifier hs-var">multD</span></a><span class="hs-special">,</span><span>
18+</span><a name="line-18"></a><span> </span><a href="Dist.Internal.html#selectD"><span class="hs-identifier hs-var">selectD</span></a><span class="hs-special">,</span><span>
19+</span><a name="line-19"></a><span> </span><a href="Dist.Internal.html#returnD"><span class="hs-identifier hs-var">returnD</span></a><span class="hs-special">,</span><span>
20+</span><a name="line-20"></a><span> </span><a href="Dist.Internal.html#bindD"><span class="hs-identifier hs-var">bindD</span></a><span class="hs-special">,</span><span>
21+</span><a name="line-21"></a><span> </span><span class="hs-special">(</span><a href="Dist.Internal.html#%3F%3F"><span class="hs-operator hs-var">??</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
22+</span><a name="line-22"></a><span>
23+</span><a name="line-23"></a><span> </span><a href="Dist.Internal.html#choose"><span class="hs-identifier hs-var">choose</span></a><span class="hs-special">,</span><span>
24+</span><a name="line-24"></a><span> </span><a href="Dist.Internal.html#shape"><span class="hs-identifier hs-var">shape</span></a><span class="hs-special">,</span><span>
25+</span><a name="line-25"></a><span> </span><a href="Dist.Internal.html#linear"><span class="hs-identifier hs-var">linear</span></a><span class="hs-special">,</span><span>
26+</span><a name="line-26"></a><span> </span><a href="Dist.Internal.html#uniform"><span class="hs-identifier hs-var">uniform</span></a><span class="hs-special">,</span><span>
27+</span><a name="line-27"></a><span> </span><a href="Dist.Internal.html#negExp"><span class="hs-identifier hs-var">negExp</span></a><span class="hs-special">,</span><span>
28+</span><a name="line-28"></a><span> </span><a href="Dist.Internal.html#normal"><span class="hs-identifier hs-var">normal</span></a><span class="hs-special">,</span><span>
29+</span><a name="line-29"></a><span> </span><a href="Dist.Internal.html#toValues"><span class="hs-identifier hs-var">toValues</span></a><span class="hs-special">,</span><span>
30+</span><a name="line-30"></a><span> </span><a href="Dist.Internal.html#prettyDist"><span class="hs-identifier hs-var">prettyDist</span></a><span class="hs-special">,</span><span>
31+</span><a name="line-31"></a><span> </span><a href="Dist.Internal.html#prettyPrintDist"><span class="hs-identifier hs-var">prettyPrintDist</span></a><span>
32+</span><a name="line-32"></a><span> </span><span class="hs-special">)</span><span>
33+</span><a name="line-33"></a><span> </span><span class="hs-keyword">where</span><span>
34+</span><a name="line-34"></a><span>
35+</span><a name="line-35"></a><span class="hs-keyword">import</span><span> </span><a href="Matrix.Type.html"><span class="hs-identifier">Matrix.Type</span></a><span>
36+</span><a name="line-36"></a><span class="hs-keyword">import</span><span> </span><a href="Utils.html"><span class="hs-identifier">Utils</span></a><span>
37+</span><a name="line-37"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">GHC.TypeLits</span><span>
38+</span><a name="line-38"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.Proxy</span><span>
39+</span><a name="line-39"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.List</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">sortBy</span><span class="hs-special">)</span><span>
40+</span><a name="line-40"></a><span>
41+</span><a name="line-41"></a><span class="hs-comment">-- | Type synonym for probability value</span><span>
42+</span><a name="line-42"></a><span class="hs-keyword">type</span><span> </span><a name="Prob"><a href="Dist.Internal.html#Prob"><span class="hs-identifier">Prob</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-type">Double</span><span>
43+</span><a name="line-43"></a><span>
44+</span><a name="line-44"></a><span class="hs-comment">-- | Type synonym for column vector matrices. This represents a probability</span><span>
45+</span><a name="line-45"></a><span class="hs-comment">-- distribution.</span><span>
46+</span><a name="line-46"></a><span class="hs-keyword">newtype</span><span> </span><a name="Dist"><a href="Dist.Internal.html#Dist"><span class="hs-identifier">Dist</span></a></a><span> </span><a name="local-6989586621679068539"><a href="#local-6989586621679068539"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a name="D"><a href="Dist.Internal.html#D"><span class="hs-identifier">D</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679068539"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
47+</span><a name="line-47"></a><span>
48+</span><a name="line-48"></a><span class="hs-comment">-- | Functor instance</span><span>
49+</span><a name="line-49"></a><span class="hs-identifier">fmapD</span><span> </span><span class="hs-glyph">::</span><span>
50+</span><a name="line-50"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679068558"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
51+</span><a name="line-51"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679068559"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
52+</span><a name="line-52"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679068558"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
53+</span><a name="line-53"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679068559"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
54+</span><a name="line-54"></a><span> </span><span class="hs-identifier hs-type">Eq</span><span> </span><a href="#local-6989586621679068559"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
55+</span><a name="line-55"></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-6989586621679068558"><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>
56+</span><a name="line-56"></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-6989586621679068559"><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>
57+</span><a name="line-57"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</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-6989586621679068559"><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-6989586621679068558"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
58+</span><a name="line-58"></a><span> </span><span class="hs-special">)</span><span>
59+</span><a name="line-59"></a><span> </span><span class="hs-glyph">=&gt;</span><span>
60+</span><a name="line-60"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679068558"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679068559"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068558"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068559"><span class="hs-identifier hs-type">b</span></a><span>
61+</span><a name="line-61"></a><a name="fmapD"><a href="Dist.Internal.html#fmapD"><span class="hs-identifier">fmapD</span></a></a><span> </span><a name="local-6989586621679068560"><a href="#local-6989586621679068560"><span class="hs-identifier">f</span></a></a><span> </span><span class="hs-special">(</span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><a name="local-6989586621679068561"><a href="#local-6989586621679068561"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#fromF%27"><span class="hs-identifier hs-var">fromF'</span></a><span> </span><a href="#local-6989586621679068560"><span class="hs-identifier hs-var">f</span></a><span> </span><span class="hs-special">`</span><a href="Matrix.Type.html#comp"><span class="hs-identifier hs-var">comp</span></a><span class="hs-special">`</span><span> </span><a href="#local-6989586621679068561"><span class="hs-identifier hs-var">m</span></a><span class="hs-special">)</span><span>
62+</span><a name="line-62"></a><span>
63+</span><a name="line-63"></a><span class="hs-comment">-- | Applicative/Monoidal instance 'unit' function</span><span>
64+</span><a name="line-64"></a><span class="hs-identifier">unitD</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
65+</span><a name="line-65"></a><a name="unitD"><a href="Dist.Internal.html#unitD"><span class="hs-identifier">unitD</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#one"><span class="hs-identifier hs-var">one</span></a><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span>
66+</span><a name="line-66"></a><span>
67+</span><a name="line-67"></a><span class="hs-comment">-- | Applicative/Monoidal instance 'mult' function</span><span>
68+</span><a name="line-68"></a><span class="hs-identifier">multD</span><span> </span><span class="hs-glyph">::</span><span>
69+</span><a name="line-69"></a><span> </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><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-6989586621679068556"><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>
70+</span><a name="line-70"></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-6989586621679068557"><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>
71+</span><a name="line-71"></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-6989586621679068556"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679068557"><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>
72+</span><a name="line-72"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</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-6989586621679068556"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679068557"><span class="hs-identifier hs-type">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#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679068556"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
73+</span><a name="line-73"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</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-6989586621679068556"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679068557"><span class="hs-identifier hs-type">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#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679068557"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
74+</span><a name="line-74"></a><span> </span><span class="hs-identifier hs-type">Normalize</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679068556"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679068557"><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#Normalize"><span class="hs-identifier hs-type">Normalize</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-6989586621679068556"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">Normalize</span></a><span> </span><a href="#local-6989586621679068557"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
75+</span><a name="line-75"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068556"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068557"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679068556"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679068557"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
76+</span><a name="line-76"></a><a name="multD"><a href="Dist.Internal.html#multD"><span class="hs-identifier">multD</span></a></a><span> </span><span class="hs-special">(</span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><a name="local-6989586621679068562"><a href="#local-6989586621679068562"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><a name="local-6989586621679068563"><a href="#local-6989586621679068563"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#khatri"><span class="hs-identifier hs-var">khatri</span></a><span> </span><a href="#local-6989586621679068562"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679068563"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
77+</span><a name="line-77"></a><span>
78+</span><a name="line-78"></a><span class="hs-comment">-- | Selective instance function</span><span>
79+</span><a name="line-79"></a><span class="hs-identifier">selectD</span><span> </span><span class="hs-glyph">::</span><span>
80+</span><a name="line-80"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Normalize</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679068554"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679068555"><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-identifier hs-type">Either</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-6989586621679068554"><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-6989586621679068555"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
81+</span><a name="line-81"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</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-6989586621679068555"><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-6989586621679068555"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
82+</span><a name="line-82"></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-6989586621679068555"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
83+</span><a name="line-83"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679068554"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679068555"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><a href="#local-6989586621679068554"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679068555"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068555"><span class="hs-identifier hs-type">b</span></a><span>
84+</span><a name="line-84"></a><a name="selectD"><a href="Dist.Internal.html#selectD"><span class="hs-identifier">selectD</span></a></a><span> </span><span class="hs-special">(</span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><a name="local-6989586621679068564"><a href="#local-6989586621679068564"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><a name="local-6989586621679068565"><a href="#local-6989586621679068565"><span class="hs-identifier">m</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#junc"><span class="hs-identifier hs-var">junc</span></a><span> </span><a href="#local-6989586621679068565"><span class="hs-identifier hs-var">m</span></a><span> </span><a href="Matrix.Type.html#identity"><span class="hs-identifier hs-var">identity</span></a><span> </span><span class="hs-special">`</span><a href="Matrix.Type.html#comp"><span class="hs-identifier hs-var">comp</span></a><span class="hs-special">`</span><span> </span><a href="#local-6989586621679068564"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
85+</span><a name="line-85"></a><span>
86+</span><a name="line-86"></a><span>
87+</span><a name="line-87"></a><span class="hs-comment">-- | Monad instance 'return' function</span><span>
88+</span><a name="line-88"></a><span class="hs-identifier">returnD</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679068553"><a href="#local-6989586621679068553"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679068553"><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="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><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><a href="#local-6989586621679068553"><span class="hs-identifier hs-type">a</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-6989586621679068553"><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">=&gt;</span><span> </span><a href="#local-6989586621679068553"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068553"><span class="hs-identifier hs-type">a</span></a><span>
89+</span><a name="line-89"></a><a name="returnD"><a href="Dist.Internal.html#returnD"><span class="hs-identifier">returnD</span></a></a><span> </span><a name="local-6989586621679068566"><a href="#local-6989586621679068566"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#col"><span class="hs-identifier hs-var">col</span></a><span> </span><a href="#local-6989586621679068569"><span class="hs-identifier hs-var">l</span></a><span class="hs-special">)</span><span>
90+</span><a name="line-90"></a><span> </span><span class="hs-keyword">where</span><span>
91+</span><a name="line-91"></a><span> </span><a name="local-6989586621679068567"><a href="#local-6989586621679068567"><span class="hs-identifier">i</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-6989586621679068553"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
92+</span><a name="line-92"></a><span> </span><a name="local-6989586621679068568"><a href="#local-6989586621679068568"><span class="hs-identifier">x</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679068566"><span class="hs-identifier hs-var">a</span></a><span>
93+</span><a name="line-93"></a><span> </span><a name="local-6989586621679068569"><a href="#local-6989586621679068569"><span class="hs-identifier">l</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-6989586621679068568"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-special">[</span><span class="hs-number">0</span><span class="hs-special">,</span><span class="hs-number">0</span><span class="hs-glyph">..</span><span class="hs-special">]</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-special">[</span><span class="hs-number">1</span><span class="hs-special">]</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679068567"><span class="hs-identifier hs-var">i</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679068568"><span class="hs-identifier hs-var">x</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-special">[</span><span class="hs-number">0</span><span class="hs-special">,</span><span class="hs-number">0</span><span class="hs-glyph">..</span><span class="hs-special">]</span><span>
94+</span><a name="line-94"></a><span>
95+</span><a name="line-95"></a><span class="hs-comment">-- | Monad instance '(&gt;&gt;=)' function</span><span>
96+</span><a name="line-96"></a><span class="hs-identifier">bindD</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068551"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><a href="#local-6989586621679068551"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679068552"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068552"><span class="hs-identifier hs-type">b</span></a><span>
97+</span><a name="line-97"></a><a name="bindD"><a href="Dist.Internal.html#bindD"><span class="hs-identifier">bindD</span></a></a><span> </span><span class="hs-special">(</span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><a name="local-6989586621679068570"><a href="#local-6989586621679068570"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><a name="local-6989586621679068571"><a href="#local-6989586621679068571"><span class="hs-identifier">m</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679068571"><span class="hs-identifier hs-var">m</span></a><span> </span><span class="hs-special">`</span><a href="Matrix.Type.html#comp"><span class="hs-identifier hs-var">comp</span></a><span class="hs-special">`</span><span> </span><a href="#local-6989586621679068570"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
98+</span><a name="line-98"></a><span>
99+</span><a name="line-99"></a><span class="hs-comment">-- | Extract probabilities given an Event.</span><span>
100+</span><a name="line-100"></a><span class="hs-special">(</span><span class="hs-operator">??</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span>
101+</span><a name="line-101"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679068550"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
102+</span><a name="line-102"></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-6989586621679068550"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
103+</span><a name="line-103"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">FromLists</span></a><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><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><a href="#local-6989586621679068550"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
104+</span><a name="line-104"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679068550"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Bool</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068550"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span>
105+</span><a name="line-105"></a><span class="hs-special">(</span><a name="%3F%3F"><a href="Dist.Internal.html#%3F%3F"><span class="hs-operator">??</span></a></a><span class="hs-special">)</span><span> </span><a name="local-6989586621679068572"><a href="#local-6989586621679068572"><span class="hs-identifier">p</span></a></a><span> </span><a name="local-6989586621679068573"><a href="#local-6989586621679068573"><span class="hs-identifier">d</span></a></a><span> </span><span class="hs-glyph">=</span><span>
106+</span><a name="line-106"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679068574"><a href="#local-6989586621679068574"><span class="hs-identifier">l</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Dist.Internal.html#toValues"><span class="hs-identifier hs-var">toValues</span></a><span> </span><a href="#local-6989586621679068573"><span class="hs-identifier hs-var">d</span></a><span>
107+</span><a name="line-107"></a><span> </span><a name="local-6989586621679068575"><a href="#local-6989586621679068575"><span class="hs-identifier">x</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">filter</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679068572"><span class="hs-identifier hs-var">p</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">fst</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679068574"><span class="hs-identifier hs-var">l</span></a><span>
108+</span><a name="line-108"></a><span> </span><span class="hs-keyword">in</span><span> </span><span class="hs-identifier hs-var">sum</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">snd</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><a href="#local-6989586621679068575"><span class="hs-identifier hs-var">x</span></a><span>
109+</span><a name="line-109"></a><span>
110+</span><a name="line-110"></a><span class="hs-comment">-- Distribution Construction</span><span>
111+</span><a name="line-111"></a><span>
112+</span><a name="line-112"></a><span class="hs-comment">-- | Constructs a Bernoulli distribution</span><span>
113+</span><a name="line-113"></a><span class="hs-identifier">choose</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="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><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><a href="#local-6989586621679068549"><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">=&gt;</span><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068549"><span class="hs-identifier hs-type">a</span></a><span>
114+</span><a name="line-114"></a><a name="choose"><a href="Dist.Internal.html#choose"><span class="hs-identifier">choose</span></a></a><span> </span><a name="local-6989586621679068576"><a href="#local-6989586621679068576"><span class="hs-identifier">prob</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#col"><span class="hs-identifier hs-var">col</span></a><span> </span><span class="hs-special">[</span><a href="#local-6989586621679068576"><span class="hs-identifier hs-var">prob</span></a><span class="hs-special">,</span><span> </span><span class="hs-number">1</span><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679068576"><span class="hs-identifier hs-var">prob</span></a><span class="hs-special">]</span><span class="hs-special">)</span><span>
115+</span><a name="line-115"></a><span>
116+</span><a name="line-116"></a><span class="hs-comment">-- | Creates a distribution given a shape function</span><span>
117+</span><a name="line-117"></a><span class="hs-identifier">shape</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="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><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><a href="#local-6989586621679068548"><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">=&gt;</span><span> </span><span class="hs-special">(</span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679068548"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068548"><span class="hs-identifier hs-type">a</span></a><span>
118+</span><a name="line-118"></a><a name="shape"><a href="Dist.Internal.html#shape"><span class="hs-identifier">shape</span></a></a><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">error</span><span> </span><span class="hs-string">&quot;Probability.shape: empty list&quot;</span><span>
119+</span><a name="line-119"></a><span class="hs-identifier">shape</span><span> </span><a name="local-6989586621679068577"><a href="#local-6989586621679068577"><span class="hs-identifier">f</span></a></a><span> </span><a name="local-6989586621679068578"><a href="#local-6989586621679068578"><span class="hs-identifier">xs</span></a></a><span> </span><span class="hs-glyph">=</span><span>
120+</span><a name="line-120"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679068579"><a href="#local-6989586621679068579"><span class="hs-identifier">incr</span></a></a><span> </span><span class="hs-glyph">=</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">fromIntegral</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">length</span><span> </span><a href="#local-6989586621679068578"><span class="hs-identifier hs-var">xs</span></a><span> </span><span class="hs-glyph">-</span><span> </span><span class="hs-number">1</span><span class="hs-special">)</span><span>
121+</span><a name="line-121"></a><span> </span><a name="local-6989586621679068580"><a href="#local-6989586621679068580"><span class="hs-identifier">ps</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">map</span><span> </span><a href="#local-6989586621679068577"><span class="hs-identifier hs-var">f</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">iterate</span><span> </span><span class="hs-special">(</span><span class="hs-operator hs-var">+</span><a href="#local-6989586621679068579"><span class="hs-identifier hs-var">incr</span></a><span class="hs-special">)</span><span> </span><span class="hs-number">0</span><span class="hs-special">)</span><span>
122+</span><a name="line-122"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Dist.Internal.html#fromFreqs"><span class="hs-identifier hs-var">fromFreqs</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">zip</span><span> </span><a href="#local-6989586621679068578"><span class="hs-identifier hs-var">xs</span></a><span> </span><a href="#local-6989586621679068580"><span class="hs-identifier hs-var">ps</span></a><span class="hs-special">)</span><span>
123+</span><a name="line-123"></a><span>
124+</span><a name="line-124"></a><span class="hs-comment">-- | Constructs a Linear distribution</span><span>
125+</span><a name="line-125"></a><span class="hs-identifier">linear</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="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><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><a href="#local-6989586621679068547"><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">=&gt;</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679068547"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068547"><span class="hs-identifier hs-type">a</span></a><span>
126+</span><a name="line-126"></a><a name="linear"><a href="Dist.Internal.html#linear"><span class="hs-identifier">linear</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Dist.Internal.html#shape"><span class="hs-identifier hs-var">shape</span></a><span> </span><span class="hs-identifier hs-var">id</span><span>
127+</span><a name="line-127"></a><span>
128+</span><a name="line-128"></a><span class="hs-comment">-- | Constructs an Uniform distribution</span><span>
129+</span><a name="line-129"></a><span class="hs-identifier">uniform</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="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><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><a href="#local-6989586621679068546"><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">=&gt;</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679068546"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068546"><span class="hs-identifier hs-type">a</span></a><span>
130+</span><a name="line-130"></a><a name="uniform"><a href="Dist.Internal.html#uniform"><span class="hs-identifier">uniform</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Dist.Internal.html#shape"><span class="hs-identifier hs-var">shape</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>
131+</span><a name="line-131"></a><span>
132+</span><a name="line-132"></a><span class="hs-comment">-- | Constructs an Negative Exponential distribution</span><span>
133+</span><a name="line-133"></a><span class="hs-identifier">negExp</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="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><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><a href="#local-6989586621679068545"><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">=&gt;</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679068545"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068545"><span class="hs-identifier hs-type">a</span></a><span>
134+</span><a name="line-134"></a><a name="negExp"><a href="Dist.Internal.html#negExp"><span class="hs-identifier">negExp</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Dist.Internal.html#shape"><span class="hs-identifier hs-var">shape</span></a><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><a name="local-6989586621679068581"><a href="#local-6989586621679068581"><span class="hs-identifier">x</span></a></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">exp</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">-</span><a href="#local-6989586621679068581"><span class="hs-identifier hs-var">x</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
135+</span><a name="line-135"></a><span>
136+</span><a name="line-136"></a><span class="hs-comment">-- | Constructs an Normal distribution</span><span>
137+</span><a name="line-137"></a><span class="hs-identifier">normal</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="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><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><a href="#local-6989586621679068544"><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">=&gt;</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679068544"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068544"><span class="hs-identifier hs-type">a</span></a><span>
138+</span><a name="line-138"></a><a name="normal"><a href="Dist.Internal.html#normal"><span class="hs-identifier">normal</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Dist.Internal.html#shape"><span class="hs-identifier hs-var">shape</span></a><span> </span><span class="hs-special">(</span><a href="Dist.Internal.html#normalCurve"><span class="hs-identifier hs-var">normalCurve</span></a><span> </span><span class="hs-number">0.5</span><span> </span><span class="hs-number">0.5</span><span class="hs-special">)</span><span>
139+</span><a name="line-139"></a><span>
140+</span><a name="line-140"></a><span class="hs-comment">-- | Transforms a 'Dist' into a list of pairs.</span><span>
141+</span><a name="line-141"></a><span class="hs-identifier">toValues</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679068543"><a href="#local-6989586621679068543"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679068543"><span class="hs-identifier hs-type">a</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-6989586621679068543"><span class="hs-identifier hs-type">a</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="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><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><a href="#local-6989586621679068543"><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">=&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068543"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="hs-special">(</span><a href="#local-6989586621679068543"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span class="hs-special">)</span><span class="hs-special">]</span><span>
142+</span><a name="line-142"></a><a name="toValues"><a href="Dist.Internal.html#toValues"><span class="hs-identifier">toValues</span></a></a><span> </span><span class="hs-special">(</span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><a name="local-6989586621679068582"><a href="#local-6989586621679068582"><span class="hs-identifier">d</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
143+</span><a name="line-143"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679068583"><a href="#local-6989586621679068583"><span class="hs-identifier">rows</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-6989586621679068543"><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>
144+</span><a name="line-144"></a><span> </span><a name="local-6989586621679068584"><a href="#local-6989586621679068584"><span class="hs-identifier">probs</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#toList"><span class="hs-identifier hs-var">toList</span></a><span> </span><a href="#local-6989586621679068582"><span class="hs-identifier hs-var">d</span></a><span>
145+</span><a name="line-145"></a><span> </span><a name="local-6989586621679068585"><a href="#local-6989586621679068585"><span class="hs-identifier">res</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">zip</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-identifier hs-var">toEnum</span><span> </span><span class="hs-special">[</span><span class="hs-number">0</span><span class="hs-glyph">..</span><a href="#local-6989586621679068583"><span class="hs-identifier hs-var">rows</span></a><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679068584"><span class="hs-identifier hs-var">probs</span></a><span>
146+</span><a name="line-146"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="#local-6989586621679068585"><span class="hs-identifier hs-var">res</span></a><span>
147+</span><a name="line-147"></a><span>
148+</span><a name="line-148"></a><span class="hs-comment">-- | Pretty a distribution</span><span>
149+</span><a name="line-149"></a><span class="hs-identifier">prettyDist</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679068542"><a href="#local-6989586621679068542"><span class="hs-identifier">a</span></a></a><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Show</span><span> </span><a href="#local-6989586621679068542"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679068542"><span class="hs-identifier hs-type">a</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-6989586621679068542"><span class="hs-identifier hs-type">a</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="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><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><a href="#local-6989586621679068542"><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">=&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068542"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">String</span><span>
150+</span><a name="line-150"></a><a name="prettyDist"><a href="Dist.Internal.html#prettyDist"><span class="hs-identifier">prettyDist</span></a></a><span> </span><a name="local-6989586621679068586"><a href="#local-6989586621679068586"><span class="hs-identifier">d</span></a></a><span> </span><span class="hs-glyph">=</span><span>
151+</span><a name="line-151"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679068592"><a href="#local-6989586621679068592"><span class="hs-identifier">values</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">sortBy</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-special">(</span><a name="local-6989586621679068594"><a href="#local-6989586621679068594"><span class="hs-identifier">a</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679068595"><a href="#local-6989586621679068595"><span class="hs-identifier">p1</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a name="local-6989586621679068596"><a href="#local-6989586621679068596"><span class="hs-identifier">b</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679068597"><a href="#local-6989586621679068597"><span class="hs-identifier">p2</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">compare</span><span> </span><a href="#local-6989586621679068597"><span class="hs-identifier hs-var">p2</span></a><span> </span><a href="#local-6989586621679068595"><span class="hs-identifier hs-var">p1</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Dist.Internal.html#toValues"><span class="hs-identifier hs-var">toValues</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679068542"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679068586"><span class="hs-identifier hs-var">d</span></a><span class="hs-special">)</span><span>
152+</span><a name="line-152"></a><span> </span><a name="local-6989586621679068593"><a href="#local-6989586621679068593"><span class="hs-identifier">w</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-special">(</span><span class="hs-identifier hs-var">map</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">length</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">show</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><span class="hs-identifier hs-var">fst</span><span class="hs-special">)</span><span> </span><a href="#local-6989586621679068592"><span class="hs-identifier hs-var">values</span></a><span class="hs-special">)</span><span>
153+</span><a name="line-153"></a><span> </span><span class="hs-keyword">in</span><span> </span><span class="hs-identifier hs-var">concatMap</span><span>
154+</span><a name="line-154"></a><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-special">(</span><a name="local-6989586621679068598"><a href="#local-6989586621679068598"><span class="hs-identifier">x</span></a></a><span class="hs-special">,</span><a name="local-6989586621679068599"><a href="#local-6989586621679068599"><span class="hs-identifier">p</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679068588"><span class="hs-identifier hs-var">showR</span></a><span> </span><a href="#local-6989586621679068593"><span class="hs-identifier hs-var">w</span></a><span> </span><a href="#local-6989586621679068598"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-char">' '</span><span class="hs-glyph">:</span><span> </span><a href="#local-6989586621679068587"><span class="hs-identifier hs-var">showProb</span></a><span> </span><a href="#local-6989586621679068599"><span class="hs-identifier hs-var">p</span></a><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-string">&quot;\n&quot;</span><span class="hs-special">)</span><span>
155+</span><a name="line-155"></a><span> </span><a href="#local-6989586621679068592"><span class="hs-identifier hs-var">values</span></a><span>
156+</span><a name="line-156"></a><span> </span><span class="hs-keyword">where</span><span>
157+</span><a name="line-157"></a><span> </span><a name="local-6989586621679068587"><a href="#local-6989586621679068587"><span class="hs-identifier">showProb</span></a></a><span> </span><a name="local-6989586621679068589"><a href="#local-6989586621679068589"><span class="hs-identifier">p</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">show</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679068589"><span class="hs-identifier hs-var">p</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><span class="hs-number">100</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-string">&quot;%&quot;</span><span>
158+</span><a name="line-158"></a><span> </span><a name="local-6989586621679068588"><a href="#local-6989586621679068588"><span class="hs-identifier">showR</span></a></a><span> </span><a name="local-6989586621679068590"><a href="#local-6989586621679068590"><span class="hs-identifier">n</span></a></a><span> </span><a name="local-6989586621679068591"><a href="#local-6989586621679068591"><span class="hs-identifier">x</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">show</span><span> </span><a href="#local-6989586621679068591"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-string">&quot; &quot;</span><span>
159+</span><a name="line-159"></a><span>
160+</span><a name="line-160"></a><span class="hs-comment">-- | Pretty Print a distribution</span><span>
161+</span><a name="line-161"></a><span class="hs-identifier">prettyPrintDist</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679068541"><a href="#local-6989586621679068541"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Show</span><span> </span><a href="#local-6989586621679068541"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679068541"><span class="hs-identifier hs-type">a</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-6989586621679068541"><span class="hs-identifier hs-type">a</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="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><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><a href="#local-6989586621679068541"><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">=&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068541"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
162+</span><a name="line-162"></a><a name="prettyPrintDist"><a href="Dist.Internal.html#prettyPrintDist"><span class="hs-identifier">prettyPrintDist</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="Dist.Internal.html#prettyDist"><span class="hs-identifier hs-var">prettyDist</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679068541"><span class="hs-identifier hs-type">a</span></a><span>
163+</span><a name="line-163"></a><span>
164+</span><a name="line-164"></a><span class="hs-comment">-- Auxiliary functions</span><span>
165+</span><a name="line-165"></a><span>
166+</span><a name="line-166"></a><span class="hs-identifier">fromFreqs</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="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><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><a href="#local-6989586621679068540"><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">=&gt;</span><span> </span><span class="hs-special">[</span><span class="hs-special">(</span><a href="#local-6989586621679068540"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span class="hs-special">)</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</span></a><span> </span><a href="#local-6989586621679068540"><span class="hs-identifier hs-type">a</span></a><span>
167+</span><a name="line-167"></a><a name="fromFreqs"><a href="Dist.Internal.html#fromFreqs"><span class="hs-identifier">fromFreqs</span></a></a><span> </span><a name="local-6989586621679068600"><a href="#local-6989586621679068600"><span class="hs-identifier">xs</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Dist.Internal.html#D"><span class="hs-identifier hs-var">D</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#col"><span class="hs-identifier hs-var">col</span></a><span> </span><span class="hs-special">(</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-6989586621679068602"><a href="#local-6989586621679068602"><span class="hs-identifier">x</span></a></a><span class="hs-special">,</span><a name="local-6989586621679068603"><a href="#local-6989586621679068603"><span class="hs-identifier">p</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679068603"><span class="hs-identifier hs-var">p</span></a><span class="hs-operator hs-var">/</span><a href="#local-6989586621679068601"><span class="hs-identifier hs-var">q</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679068600"><span class="hs-identifier hs-var">xs</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
168+</span><a name="line-168"></a><span> </span><span class="hs-keyword">where</span><span> </span><a name="local-6989586621679068601"><a href="#local-6989586621679068601"><span class="hs-identifier">q</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">sum</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">snd</span><span> </span><a href="#local-6989586621679068600"><span class="hs-identifier hs-var">xs</span></a><span>
169+</span><a name="line-169"></a><span>
170+</span><a name="line-170"></a><span class="hs-identifier">normalCurve</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span>
171+</span><a name="line-171"></a><a name="normalCurve"><a href="Dist.Internal.html#normalCurve"><span class="hs-identifier">normalCurve</span></a></a><span> </span><a name="local-6989586621679068604"><a href="#local-6989586621679068604"><span class="hs-identifier">mean</span></a></a><span> </span><a name="local-6989586621679068605"><a href="#local-6989586621679068605"><span class="hs-identifier">dev</span></a></a><span> </span><a name="local-6989586621679068606"><a href="#local-6989586621679068606"><span class="hs-identifier">x</span></a></a><span> </span><span class="hs-glyph">=</span><span>
172+</span><a name="line-172"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679068607"><a href="#local-6989586621679068607"><span class="hs-identifier">u</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679068606"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679068604"><span class="hs-identifier hs-var">mean</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">/</span><span> </span><a href="#local-6989586621679068605"><span class="hs-identifier hs-var">dev</span></a><span>
173+</span><a name="line-173"></a><span> </span><span class="hs-keyword">in</span><span> </span><span class="hs-identifier hs-var">exp</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">-</span><span class="hs-number">1</span><span class="hs-operator hs-var">/</span><span class="hs-number">2</span><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="#local-6989586621679068607"><span class="hs-identifier hs-var">u</span></a><span class="hs-operator hs-var">^</span><span class="hs-special">(</span><span class="hs-number">2</span><span class="hs-glyph">::</span><span class="hs-identifier hs-type">Int</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var">/</span><span> </span><span class="hs-identifier hs-var">sqrt</span><span> </span><span class="hs-special">(</span><span class="hs-number">2</span><span> </span><span class="hs-operator hs-var">*</span><span> </span><span class="hs-identifier hs-var">pi</span><span class="hs-special">)</span><span>
174+</span><a name="line-174"></a></pre></body></html>
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Dist.htmlnew file+70
@@ -0,0 +1,70 @@
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-comment">-----------------------------------------------------------------------------</span><span>
2+</span><a name="line-2"></a><span class="hs-comment">-- |</span><span>
3+</span><a name="line-3"></a><span class="hs-comment">-- Module : Dist</span><span>
4+</span><a name="line-4"></a><span class="hs-comment">-- Copyright : (c) Armando Santos 2019-2020</span><span>
5+</span><a name="line-5"></a><span class="hs-comment">-- Maintainer : armandoifsantos@gmail.com</span><span>
6+</span><a name="line-6"></a><span class="hs-comment">-- Stability : experimental</span><span>
7+</span><a name="line-7"></a><span class="hs-comment">--</span><span>
8+</span><a name="line-8"></a><span class="hs-comment">-- __LAoP__ is a library for algebraic (inductive) construction and manipulation of matrices</span><span>
9+</span><a name="line-9"></a><span class="hs-comment">-- in Haskell. See &lt;https://github.com/bolt12/master-thesis my Msc Thesis&gt; for the</span><span>
10+</span><a name="line-10"></a><span class="hs-comment">-- motivation behind the library, the underlying theory, and implementation details.</span><span>
11+</span><a name="line-11"></a><span class="hs-comment">--</span><span>
12+</span><a name="line-12"></a><span class="hs-comment">-- This module exports a type synonym 'Dist'</span><span>
13+</span><a name="line-13"></a><span class="hs-comment">-- that represents a stochastic distribution </span><span>
14+</span><a name="line-14"></a><span class="hs-comment">-- matrix and several distribution construction</span><span>
15+</span><a name="line-15"></a><span class="hs-comment">-- functions.</span><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>
19+</span><a name="line-19"></a><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">Dist</span><span>
20+</span><a name="line-20"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-comment">-- | If the sum of the rows of a column matrix </span><span>
21+</span><a name="line-21"></a><span> </span><span class="hs-comment">-- is equal to 1 then this stochastic matrix</span><span>
22+</span><a name="line-22"></a><span> </span><span class="hs-comment">-- can be seen as a probability distribution.</span><span>
23+</span><a name="line-23"></a><span> </span><span class="hs-comment">--</span><span>
24+</span><a name="line-24"></a><span> </span><span class="hs-comment">--</span><span>
25+</span><a name="line-25"></a><span> </span><span class="hs-comment">-- This module is still experimental but it's</span><span>
26+</span><a name="line-26"></a><span> </span><span class="hs-comment">-- already possible to model probabilistic programming</span><span>
27+</span><a name="line-27"></a><span> </span><span class="hs-comment">-- problems with it. Import 'Matrix.Nat' or 'Matrix.Type'</span><span>
28+</span><a name="line-28"></a><span> </span><span class="hs-comment">-- to access LAoP matrix combinators and then all you have</span><span>
29+</span><a name="line-29"></a><span> </span><span class="hs-comment">-- to do is to define your sample space, either by creating a new data</span><span>
30+</span><a name="line-30"></a><span> </span><span class="hs-comment">-- type or by abstracting it out via 'Natural'.</span><span>
31+</span><a name="line-31"></a><span> </span><span class="hs-comment">--</span><span>
32+</span><a name="line-32"></a><span> </span><span class="hs-comment">-- Write manipulation functions and promote them to matrices via</span><span>
33+</span><a name="line-33"></a><span> </span><span class="hs-comment">-- 'fromF' or 'fromF'' and you're good to go!</span><span>
34+</span><a name="line-34"></a><span>
35+</span><a name="line-35"></a><span> </span><span class="hs-comment">-- * 'Dist' and 'Prob' type synonyms</span><span>
36+</span><a name="line-36"></a><span> </span><a href="Dist.Internal.html#Dist"><span class="hs-identifier hs-type">Dist</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>
37+</span><a name="line-37"></a><span> </span><a href="Dist.Internal.html#Prob"><span class="hs-identifier hs-type">Prob</span></a><span class="hs-special">,</span><span>
38+</span><a name="line-38"></a><span>
39+</span><a name="line-39"></a><span> </span><span class="hs-comment">-- * Functor instance equivalent functions</span><span>
40+</span><a name="line-40"></a><span> </span><a href="Dist.Internal.html#fmapD"><span class="hs-identifier hs-var">fmapD</span></a><span class="hs-special">,</span><span>
41+</span><a name="line-41"></a><span>
42+</span><a name="line-42"></a><span> </span><span class="hs-comment">-- * Applicative equivalent functions</span><span>
43+</span><a name="line-43"></a><span> </span><a href="Dist.Internal.html#unitD"><span class="hs-identifier hs-var">unitD</span></a><span class="hs-special">,</span><span>
44+</span><a name="line-44"></a><span> </span><a href="Dist.Internal.html#multD"><span class="hs-identifier hs-var">multD</span></a><span class="hs-special">,</span><span>
45+</span><a name="line-45"></a><span>
46+</span><a name="line-46"></a><span> </span><span class="hs-comment">-- * Selective equivalent functions</span><span>
47+</span><a name="line-47"></a><span> </span><a href="Dist.Internal.html#selectD"><span class="hs-identifier hs-var">selectD</span></a><span class="hs-special">,</span><span>
48+</span><a name="line-48"></a><span>
49+</span><a name="line-49"></a><span> </span><span class="hs-comment">-- * Monad equivalent functions</span><span>
50+</span><a name="line-50"></a><span> </span><a href="Dist.Internal.html#returnD"><span class="hs-identifier hs-var">returnD</span></a><span class="hs-special">,</span><span>
51+</span><a name="line-51"></a><span> </span><a href="Dist.Internal.html#bindD"><span class="hs-identifier hs-var">bindD</span></a><span class="hs-special">,</span><span>
52+</span><a name="line-52"></a><span>
53+</span><a name="line-53"></a><span> </span><span class="hs-comment">-- * Distribution construction functions</span><span>
54+</span><a name="line-54"></a><span> </span><a href="Dist.Internal.html#choose"><span class="hs-identifier hs-var">choose</span></a><span class="hs-special">,</span><span>
55+</span><a name="line-55"></a><span> </span><a href="Dist.Internal.html#shape"><span class="hs-identifier hs-var">shape</span></a><span class="hs-special">,</span><span>
56+</span><a name="line-56"></a><span> </span><a href="Dist.Internal.html#linear"><span class="hs-identifier hs-var">linear</span></a><span class="hs-special">,</span><span>
57+</span><a name="line-57"></a><span> </span><a href="Dist.Internal.html#uniform"><span class="hs-identifier hs-var">uniform</span></a><span class="hs-special">,</span><span>
58+</span><a name="line-58"></a><span> </span><a href="Dist.Internal.html#negExp"><span class="hs-identifier hs-var">negExp</span></a><span class="hs-special">,</span><span>
59+</span><a name="line-59"></a><span> </span><a href="Dist.Internal.html#normal"><span class="hs-identifier hs-var">normal</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">-- * Converto to list of pairs</span><span>
62+</span><a name="line-62"></a><span> </span><a href="Dist.Internal.html#toValues"><span class="hs-identifier hs-var">toValues</span></a><span class="hs-special">,</span><span>
63+</span><a name="line-63"></a><span> </span><span class="hs-comment">-- * Pretty print distribution</span><span>
64+</span><a name="line-64"></a><span> </span><a href="Dist.Internal.html#prettyDist"><span class="hs-identifier hs-var">prettyDist</span></a><span class="hs-special">,</span><span>
65+</span><a name="line-65"></a><span> </span><a href="Dist.Internal.html#prettyPrintDist"><span class="hs-identifier hs-var">prettyPrintDist</span></a><span>
66+</span><a name="line-66"></a><span> </span><span class="hs-special">)</span><span>
67+</span><a name="line-67"></a><span class="hs-keyword">where</span><span>
68+</span><a name="line-68"></a><span>
69+</span><a name="line-69"></a><span class="hs-keyword">import</span><span> </span><a href="Dist.Internal.html"><span class="hs-identifier">Dist.Internal</span></a><span>
70+</span><a name="line-70"></a></pre></body></html>
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Matrix.Internal.htmlnew file+903
@@ -0,0 +1,903 @@
1+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-pragma">{-# LANGUAGE AllowAmbiguousTypes #-}</span><span>
2+</span><a name="line-2"></a><span class="hs-pragma">{-# LANGUAGE DataKinds #-}</span><span>
3+</span><a name="line-3"></a><span class="hs-pragma">{-# LANGUAGE FlexibleContexts #-}</span><span>
4+</span><a name="line-4"></a><span class="hs-pragma">{-# LANGUAGE FlexibleInstances #-}</span><span>
5+</span><a name="line-5"></a><span class="hs-pragma">{-# LANGUAGE GADTs #-}</span><span>
6+</span><a name="line-6"></a><span class="hs-pragma">{-# LANGUAGE InstanceSigs #-}</span><span>
7+</span><a name="line-7"></a><span class="hs-pragma">{-# LANGUAGE MultiParamTypeClasses #-}</span><span>
8+</span><a name="line-8"></a><span class="hs-pragma">{-# LANGUAGE NoStarIsType #-}</span><span>
9+</span><a name="line-9"></a><span class="hs-pragma">{-# LANGUAGE ScopedTypeVariables #-}</span><span>
10+</span><a name="line-10"></a><span class="hs-pragma">{-# LANGUAGE StandaloneDeriving #-}</span><span>
11+</span><a name="line-11"></a><span class="hs-pragma">{-# LANGUAGE TypeApplications #-}</span><span>
12+</span><a name="line-12"></a><span class="hs-pragma">{-# LANGUAGE TypeFamilies #-}</span><span>
13+</span><a name="line-13"></a><span class="hs-pragma">{-# LANGUAGE TypeOperators #-}</span><span>
14+</span><a name="line-14"></a><span class="hs-pragma">{-# LANGUAGE UndecidableInstances #-}</span><span>
15+</span><a name="line-15"></a><span>
16+</span><a name="line-16"></a><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
17+</span><a name="line-17"></a><span class="hs-comment">-- |</span><span>
18+</span><a name="line-18"></a><span class="hs-comment">-- Module : Matrix.Internal</span><span>
19+</span><a name="line-19"></a><span class="hs-comment">-- Copyright : (c) Armando Santos 2019-2020</span><span>
20+</span><a name="line-20"></a><span class="hs-comment">-- Maintainer : armandoifsantos@gmail.com</span><span>
21+</span><a name="line-21"></a><span class="hs-comment">-- Stability : experimental</span><span>
22+</span><a name="line-22"></a><span class="hs-comment">--</span><span>
23+</span><a name="line-23"></a><span class="hs-comment">-- The LAoP discipline generalises relations and functions treating them as</span><span>
24+</span><a name="line-24"></a><span class="hs-comment">-- Boolean matrices and in turn consider these as arrows.</span><span>
25+</span><a name="line-25"></a><span class="hs-comment">--</span><span>
26+</span><a name="line-26"></a><span class="hs-comment">-- __LAoP__ is a library for algebraic (inductive) construction and manipulation of matrices</span><span>
27+</span><a name="line-27"></a><span class="hs-comment">-- in Haskell. See &lt;https://github.com/bolt12/master-thesis my Msc Thesis&gt; 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 &quot;abiding&quot;</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">&gt;&lt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">=&gt;</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">-&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">&amp;&amp;</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">&amp;&amp;</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">=&gt;</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">=&gt;</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&amp;&amp;</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">&lt;=</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">&lt;=</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">&lt;=</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">&amp;&amp;</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;Wrong dimensions&quot;</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">&quot;Wrong dimensions&quot;</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">=&gt;</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">&quot;Wrong dimensions&quot;</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">=&gt;</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">&quot;Wrong dimensions&quot;</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">=&gt;</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">&quot;Wrong dimensions&quot;</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">=&gt;</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">&quot;Wrong dimensions&quot;</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">=&gt;</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">&gt;</span><span> </span><span class="hs-number">0</span><span> </span><span class="hs-operator hs-var">&amp;&amp;</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">&quot;Not all rows have the same length&quot;</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">=&gt;</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">-&gt;</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">-&gt;</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">&lt;-</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">&lt;-</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">-&gt;</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">=&gt;</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">-&gt;</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">=&gt;</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">-&gt;</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">=&gt;</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">-&gt;</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">-&gt;</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">&lt;$&gt;</span><span> </span><a href="#local-6989586621679038886"><span class="hs-identifier hs-var">elementsA</span></a><span> </span><span class="hs-operator hs-var">&lt;*&gt;</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">-&gt;</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">=&gt;</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">-&gt;</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">-&gt;</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">&lt;$&gt;</span><span> </span><a href="#local-6989586621679038932"><span class="hs-identifier hs-var">elementsA</span></a><span> </span><span class="hs-operator hs-var">&lt;*&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">=&gt;</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">=&gt;</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">=&gt;</span><span> </span><a href="#local-6989586621679038665"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">-&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">-&gt;</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">-&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">-&gt;</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">=&gt;</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">-&gt;</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">=&gt;</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">-&gt;</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">-&gt;</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">=&gt;</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">&gt;=</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">&amp;&amp;</span><span> </span><a href="#local-6989586621679038967"><span class="hs-identifier hs-var">y</span></a><span> </span><span class="hs-operator hs-var">&lt;=</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">=&gt;</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 ==&gt; |</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">=&gt;</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">-&gt;</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">-&gt;</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">&gt;&lt;</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">&gt;&lt;</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">=&gt;</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">-&gt;</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">-&gt;</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">&gt;&lt;</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 &quot;abiding&quot; 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">-&gt;</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 &quot;abiding&quot; 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">-&gt;</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">-&gt;</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">=&gt;</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">-&gt;</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">-&gt;</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">=&gt;</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">-&gt;</span><span> </span><span class="hs-identifier hs-type">Bool</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</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">-&gt;</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">-&gt;</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">=&gt;</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">-&gt;</span><span> </span><span class="hs-identifier hs-type">Bool</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</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">=&gt;</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">-&gt;</span><span> </span><span class="hs-identifier hs-type">Bool</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</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">=&gt;</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">-&gt;</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">-&gt;</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">&quot;&quot;</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">&quot;&#9474; &quot;</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">&quot; &#9474;\n&quot;</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">&quot;&#9474; &quot;</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">&quot; &#9474;\n&quot;</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">&quot;&#9474; &quot;</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">&quot; &#9474;\n&quot;</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">=&gt;</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">-&gt;</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">&quot;&#9484; &quot;</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">&quot; &#9488;\n&quot;</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">&quot;&#9492; &quot;</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">&quot; &#9496;&quot;</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">&quot;&quot;</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">=&gt;</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">-&gt;</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">=&gt;</span><span> </span><a href="#local-6989586621679038588"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;&amp;</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">-&gt;</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">-&gt;</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">&lt;</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">-&gt;</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">-&gt;</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">&amp;&amp;</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">=&gt;</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">-&gt;</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">-&gt;</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">&lt;$&gt;</span><span> </span><a href="#local-6989586621679039272"><span class="hs-identifier hs-var">elementsA</span></a><span> </span><span class="hs-operator hs-var">&lt;*&gt;</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">-&gt;</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">=&gt;</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">-&gt;</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">-&gt;</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">&lt;$&gt;</span><span> </span><a href="#local-6989586621679039289"><span class="hs-identifier hs-var">elementsA</span></a><span> </span><span class="hs-operator hs-var">&lt;*&gt;</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">-&gt;</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>
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Matrix.Nat.htmlnew file+484
@@ -0,0 +1,484 @@
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 DerivingVia #-}</span><span>
4+</span><a name="line-4"></a><span class="hs-pragma">{-# LANGUAGE FlexibleContexts #-}</span><span>
5+</span><a name="line-5"></a><span class="hs-pragma">{-# LANGUAGE FlexibleInstances #-}</span><span>
6+</span><a name="line-6"></a><span class="hs-pragma">{-# LANGUAGE GADTs #-}</span><span>
7+</span><a name="line-7"></a><span class="hs-pragma">{-# LANGUAGE KindSignatures #-}</span><span>
8+</span><a name="line-8"></a><span class="hs-pragma">{-# LANGUAGE MultiParamTypeClasses #-}</span><span>
9+</span><a name="line-9"></a><span class="hs-pragma">{-# LANGUAGE NoStarIsType #-}</span><span>
10+</span><a name="line-10"></a><span class="hs-pragma">{-# LANGUAGE RankNTypes #-}</span><span>
11+</span><a name="line-11"></a><span class="hs-pragma">{-# LANGUAGE ScopedTypeVariables #-}</span><span>
12+</span><a name="line-12"></a><span class="hs-pragma">{-# LANGUAGE TypeApplications #-}</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.Nat</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 &lt;https://github.com/bolt12/master-thesis my Msc Thesis&gt; 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 a newtype wrapper around 'Matrix.Type.Matrix' that</span><span>
31+</span><a name="line-31"></a><span class="hs-comment">-- uses type level naturals instead of standard data types for the matrices</span><span>
32+</span><a name="line-32"></a><span class="hs-comment">-- dimensions.</span><span>
33+</span><a name="line-33"></a><span class="hs-comment">--</span><span>
34+</span><a name="line-34"></a><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
35+</span><a name="line-35"></a><span>
36+</span><a name="line-36"></a><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">Matrix.Nat</span><span>
37+</span><a name="line-37"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-comment">-- | LAoP (Linear Algebra of Programming) Inductive Matrix definition.</span><span>
38+</span><a name="line-38"></a><span> </span><span class="hs-comment">--</span><span>
39+</span><a name="line-39"></a><span> </span><span class="hs-comment">-- LAoP generalises relations and functions treating them as</span><span>
40+</span><a name="line-40"></a><span> </span><span class="hs-comment">-- Boolean matrices and in turn consider these as arrows.</span><span>
41+</span><a name="line-41"></a><span> </span><span class="hs-comment">-- This library offers many of the combinators mentioned in the work of</span><span>
42+</span><a name="line-42"></a><span> </span><span class="hs-comment">-- Macedo (2012) and Oliveira (2012).</span><span>
43+</span><a name="line-43"></a><span> </span><span class="hs-comment">--</span><span>
44+</span><a name="line-44"></a><span> </span><span class="hs-comment">-- This definition is a wrapper around 'Matrix.Type' but</span><span>
45+</span><a name="line-45"></a><span> </span><span class="hs-comment">-- dimensions are type level Naturals. Type inference might not</span><span>
46+</span><a name="line-46"></a><span> </span><span class="hs-comment">-- be as desired.</span><span>
47+</span><a name="line-47"></a><span> </span><span class="hs-comment">--</span><span>
48+</span><a name="line-48"></a><span> </span><span class="hs-comment">-- There exists two type families that make it easier to write</span><span>
49+</span><a name="line-49"></a><span> </span><span class="hs-comment">-- matrix dimensions: 'FromNat' and 'Count'. This approach</span><span>
50+</span><a name="line-50"></a><span> </span><span class="hs-comment">-- leads to a very straightforward implementation </span><span>
51+</span><a name="line-51"></a><span> </span><span class="hs-comment">-- of LAoP combinators. </span><span>
52+</span><a name="line-52"></a><span>
53+</span><a name="line-53"></a><span> </span><span class="hs-comment">-- * Type safe matrix representation</span><span>
54+</span><a name="line-54"></a><span> </span><a href="Matrix.Nat.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>
55+</span><a name="line-55"></a><span>
56+</span><a name="line-56"></a><span> </span><span class="hs-comment">-- * Primitives</span><span>
57+</span><a name="line-57"></a><span> </span><a href="Matrix.Nat.html#empty"><span class="hs-identifier hs-var">empty</span></a><span class="hs-special">,</span><span>
58+</span><a name="line-58"></a><span> </span><a href="Matrix.Nat.html#one"><span class="hs-identifier hs-var">one</span></a><span class="hs-special">,</span><span>
59+</span><a name="line-59"></a><span> </span><a href="Matrix.Nat.html#junc"><span class="hs-identifier hs-var">junc</span></a><span class="hs-special">,</span><span>
60+</span><a name="line-60"></a><span> </span><a href="Matrix.Nat.html#split"><span class="hs-identifier hs-var">split</span></a><span class="hs-special">,</span><span>
61+</span><a name="line-61"></a><span>
62+</span><a name="line-62"></a><span> </span><span class="hs-comment">-- * Auxiliary type families</span><span>
63+</span><a name="line-63"></a><span> </span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span class="hs-special">,</span><span>
64+</span><a name="line-64"></a><span> </span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">I.Count</span></a><span class="hs-special">,</span><span>
65+</span><a name="line-65"></a><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span class="hs-special">,</span><span>
66+</span><a name="line-66"></a><span>
67+</span><a name="line-67"></a><span> </span><span class="hs-comment">-- * Matrix construction and conversion</span><span>
68+</span><a name="line-68"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span class="hs-special">,</span><span>
69+</span><a name="line-69"></a><span> </span><a href="Matrix.Nat.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span class="hs-special">,</span><span>
70+</span><a name="line-70"></a><span> </span><a href="Matrix.Nat.html#toLists"><span class="hs-identifier hs-var">toLists</span></a><span class="hs-special">,</span><span>
71+</span><a name="line-71"></a><span> </span><a href="Matrix.Nat.html#toList"><span class="hs-identifier hs-var">toList</span></a><span class="hs-special">,</span><span>
72+</span><a name="line-72"></a><span> </span><a href="Matrix.Nat.html#matrixBuilder"><span class="hs-identifier hs-var">matrixBuilder</span></a><span class="hs-special">,</span><span>
73+</span><a name="line-73"></a><span> </span><a href="Matrix.Nat.html#row"><span class="hs-identifier hs-var">row</span></a><span class="hs-special">,</span><span>
74+</span><a name="line-74"></a><span> </span><a href="Matrix.Nat.html#col"><span class="hs-identifier hs-var">col</span></a><span class="hs-special">,</span><span>
75+</span><a name="line-75"></a><span> </span><a href="Matrix.Nat.html#zeros"><span class="hs-identifier hs-var">zeros</span></a><span class="hs-special">,</span><span>
76+</span><a name="line-76"></a><span> </span><a href="Matrix.Nat.html#ones"><span class="hs-identifier hs-var">ones</span></a><span class="hs-special">,</span><span>
77+</span><a name="line-77"></a><span> </span><a href="Matrix.Nat.html#bang"><span class="hs-identifier hs-var">bang</span></a><span class="hs-special">,</span><span>
78+</span><a name="line-78"></a><span> </span><a href="Matrix.Nat.html#constant"><span class="hs-identifier hs-var">constant</span></a><span class="hs-special">,</span><span>
79+</span><a name="line-79"></a><span>
80+</span><a name="line-80"></a><span> </span><span class="hs-comment">-- * Misc</span><span>
81+</span><a name="line-81"></a><span> </span><span class="hs-comment">-- ** Get dimensions</span><span>
82+</span><a name="line-82"></a><span> </span><a href="Matrix.Nat.html#columns"><span class="hs-identifier hs-var">columns</span></a><span class="hs-special">,</span><span>
83+</span><a name="line-83"></a><span> </span><a href="Matrix.Nat.html#rows"><span class="hs-identifier hs-var">rows</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">-- ** Matrix Transposition</span><span>
86+</span><a name="line-86"></a><span> </span><a href="Matrix.Nat.html#tr"><span class="hs-identifier hs-var">tr</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">-- ** Selective operator</span><span>
89+</span><a name="line-89"></a><span> </span><a href="Matrix.Nat.html#select"><span class="hs-identifier hs-var">select</span></a><span class="hs-special">,</span><span>
90+</span><a name="line-90"></a><span>
91+</span><a name="line-91"></a><span> </span><span class="hs-comment">-- ** McCarthy's Conditional</span><span>
92+</span><a name="line-92"></a><span> </span><a href="Matrix.Nat.html#cond"><span class="hs-identifier hs-var">cond</span></a><span class="hs-special">,</span><span>
93+</span><a name="line-93"></a><span>
94+</span><a name="line-94"></a><span> </span><span class="hs-comment">-- ** Matrix &quot;abiding&quot;</span><span>
95+</span><a name="line-95"></a><span> </span><a href="Matrix.Nat.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span class="hs-special">,</span><span>
96+</span><a name="line-96"></a><span> </span><a href="Matrix.Nat.html#abideSJ"><span class="hs-identifier hs-var">abideSJ</span></a><span class="hs-special">,</span><span>
97+</span><a name="line-97"></a><span>
98+</span><a name="line-98"></a><span> </span><span class="hs-comment">-- * Biproduct approach</span><span>
99+</span><a name="line-99"></a><span> </span><span class="hs-comment">-- ** Split</span><span>
100+</span><a name="line-100"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#%3D%3D%3D"><span class="hs-operator hs-var">===</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
101+</span><a name="line-101"></a><span> </span><span class="hs-comment">-- *** Projections</span><span>
102+</span><a name="line-102"></a><span> </span><a href="Matrix.Nat.html#p1"><span class="hs-identifier hs-var">p1</span></a><span class="hs-special">,</span><span>
103+</span><a name="line-103"></a><span> </span><a href="Matrix.Nat.html#p2"><span class="hs-identifier hs-var">p2</span></a><span class="hs-special">,</span><span>
104+</span><a name="line-104"></a><span> </span><span class="hs-comment">-- ** Junc</span><span>
105+</span><a name="line-105"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#%7C%7C%7C"><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> </span><span class="hs-comment">-- *** Injections</span><span>
107+</span><a name="line-107"></a><span> </span><a href="Matrix.Nat.html#i1"><span class="hs-identifier hs-var">i1</span></a><span class="hs-special">,</span><span>
108+</span><a name="line-108"></a><span> </span><a href="Matrix.Nat.html#i2"><span class="hs-identifier hs-var">i2</span></a><span class="hs-special">,</span><span>
109+</span><a name="line-109"></a><span> </span><span class="hs-comment">-- ** Bifunctors</span><span>
110+</span><a name="line-110"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#-%7C-"><span class="hs-operator hs-var">-|-</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
111+</span><a name="line-111"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#%3E%3C"><span class="hs-operator hs-var">&gt;&lt;</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
112+</span><a name="line-112"></a><span>
113+</span><a name="line-113"></a><span> </span><span class="hs-comment">-- ** Applicative matrix combinators</span><span>
114+</span><a name="line-114"></a><span>
115+</span><a name="line-115"></a><span> </span><span class="hs-comment">-- | Note that given the restrictions imposed it is not possible to</span><span>
116+</span><a name="line-116"></a><span> </span><span class="hs-comment">-- implement the standard type classes present in standard Haskell.</span><span>
117+</span><a name="line-117"></a><span> </span><span class="hs-comment">-- *** Matrix pairing projections</span><span>
118+</span><a name="line-118"></a><span> </span><a href="Matrix.Nat.html#kp1"><span class="hs-identifier hs-var">kp1</span></a><span class="hs-special">,</span><span>
119+</span><a name="line-119"></a><span> </span><a href="Matrix.Nat.html#kp2"><span class="hs-identifier hs-var">kp2</span></a><span class="hs-special">,</span><span>
120+</span><a name="line-120"></a><span>
121+</span><a name="line-121"></a><span> </span><span class="hs-comment">-- *** Matrix pairing</span><span>
122+</span><a name="line-122"></a><span> </span><a href="Matrix.Nat.html#khatri"><span class="hs-identifier hs-var">khatri</span></a><span class="hs-special">,</span><span>
123+</span><a name="line-123"></a><span>
124+</span><a name="line-124"></a><span> </span><span class="hs-comment">-- * Matrix composition and lifting</span><span>
125+</span><a name="line-125"></a><span>
126+</span><a name="line-126"></a><span> </span><span class="hs-comment">-- ** Arrow matrix combinators</span><span>
127+</span><a name="line-127"></a><span>
128+</span><a name="line-128"></a><span> </span><span class="hs-comment">-- | Note that given the restrictions imposed it is not possible to</span><span>
129+</span><a name="line-129"></a><span> </span><span class="hs-comment">-- implement the standard type classes present in standard Haskell.</span><span>
130+</span><a name="line-130"></a><span> </span><a href="Matrix.Nat.html#identity"><span class="hs-identifier hs-var">identity</span></a><span class="hs-special">,</span><span>
131+</span><a name="line-131"></a><span> </span><a href="Matrix.Nat.html#comp"><span class="hs-identifier hs-var">comp</span></a><span class="hs-special">,</span><span>
132+</span><a name="line-132"></a><span> </span><a href="Matrix.Nat.html#fromF"><span class="hs-identifier hs-var">fromF</span></a><span class="hs-special">,</span><span>
133+</span><a name="line-133"></a><span> </span><a href="Matrix.Nat.html#fromF%27"><span class="hs-identifier hs-var">fromF'</span></a><span class="hs-special">,</span><span>
134+</span><a name="line-134"></a><span>
135+</span><a name="line-135"></a><span> </span><span class="hs-comment">-- * Matrix printing</span><span>
136+</span><a name="line-136"></a><span> </span><a href="Matrix.Nat.html#pretty"><span class="hs-identifier hs-var">pretty</span></a><span class="hs-special">,</span><span>
137+</span><a name="line-137"></a><span> </span><a href="Matrix.Nat.html#prettyPrint"><span class="hs-identifier hs-var">prettyPrint</span></a><span>
138+</span><a name="line-138"></a><span> </span><span class="hs-special">)</span><span>
139+</span><a name="line-139"></a><span class="hs-keyword">where</span><span>
140+</span><a name="line-140"></a><span>
141+</span><a name="line-141"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.Proxy</span><span>
142+</span><a name="line-142"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">GHC.TypeLits</span><span>
143+</span><a name="line-143"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Control.DeepSeq</span><span>
144+</span><a name="line-144"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="hs-identifier">Control.Category</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">C</span><span>
145+</span><a name="line-145"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><a href="Matrix.Internal.html"><span class="hs-identifier">Matrix.Internal</span></a><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">I</span><span>
146+</span><a name="line-146"></a><span>
147+</span><a name="line-147"></a><span class="hs-keyword">newtype</span><span> </span><a name="Matrix"><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier">Matrix</span></a></a><span> </span><a name="local-6989586621679063540"><a href="#local-6989586621679063540"><span class="hs-identifier">e</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679063541"><a href="#local-6989586621679063541"><span class="hs-identifier">cols</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-special">(</span><a name="local-6989586621679063542"><a href="#local-6989586621679063542"><span class="hs-identifier">rows</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><a name="M"><a href="Matrix.Nat.html#M"><span class="hs-identifier">M</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">I.Matrix</span></a><span> </span><a href="#local-6989586621679063540"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063541"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063542"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
148+</span><a name="line-148"></a><span> </span><span class="hs-keyword">deriving</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Show</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Num</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Eq</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Ord</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">NFData</span><span class="hs-special">)</span><span> </span><span class="hs-keyword">via</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">I.Matrix</span></a><span> </span><a href="#local-6989586621679063540"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063541"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063542"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
149+</span><a name="line-149"></a><span>
150+</span><a name="line-150"></a><span class="hs-comment">-- | It isn't possible to implement the 'id' function so it's</span><span>
151+</span><a name="line-151"></a><span class="hs-comment">-- implementation is 'undefined'. However 'comp' can be and this partial</span><span>
152+</span><a name="line-152"></a><span class="hs-comment">-- class implementation exists just to make the code more readable.</span><span>
153+</span><a name="line-153"></a><span class="hs-comment">--</span><span>
154+</span><a name="line-154"></a><span class="hs-comment">-- Please use 'identity' instead.</span><span>
155+</span><a name="line-155"></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-6989586621679063543"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-identifier hs-type">C.Category</span><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063543"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
156+</span><a name="line-156"></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>
157+</span><a name="line-157"></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.Nat.html#comp"><span class="hs-identifier hs-var">comp</span></a><span>
158+</span><a name="line-158"></a><span>
159+</span><a name="line-159"></a><span class="hs-comment">-- Primitives</span><span>
160+</span><a name="line-160"></a><span>
161+</span><a name="line-161"></a><span class="hs-identifier">empty</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063670"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-number">0</span><span> </span><span class="hs-number">0</span><span>
162+</span><a name="line-162"></a><a name="empty"><a href="Matrix.Nat.html#empty"><span class="hs-identifier">empty</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">I.Empty</span></a><span>
163+</span><a name="line-163"></a><span>
164+</span><a name="line-164"></a><span class="hs-identifier">one</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="#local-6989586621679063669"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063669"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-number">1</span><span> </span><span class="hs-number">1</span><span>
165+</span><a name="line-165"></a><a name="one"><a href="Matrix.Nat.html#one"><span class="hs-identifier">one</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">I.One</span></a><span>
166+</span><a name="line-166"></a><span>
167+</span><a name="line-167"></a><span class="hs-identifier">junc</span><span> </span><span class="hs-glyph">::</span><span>
168+</span><a name="line-168"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><a href="#local-6989586621679063664"><span class="hs-identifier hs-type">cols3</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><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063665"><span class="hs-identifier hs-type">cols1</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063666"><span class="hs-identifier hs-type">cols2</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
169+</span><a name="line-169"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063667"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063665"><span class="hs-identifier hs-type">cols1</span></a><span> </span><a href="#local-6989586621679063668"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
170+</span><a name="line-170"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063667"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063666"><span class="hs-identifier hs-type">cols2</span></a><span> </span><a href="#local-6989586621679063668"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
171+</span><a name="line-171"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063667"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063664"><span class="hs-identifier hs-type">cols3</span></a><span> </span><a href="#local-6989586621679063668"><span class="hs-identifier hs-type">rows</span></a><span>
172+</span><a name="line-172"></a><a name="junc"><a href="Matrix.Nat.html#junc"><span class="hs-identifier">junc</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063671"><a href="#local-6989586621679063671"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063672"><a href="#local-6989586621679063672"><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.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">I.Junc</span></a><span> </span><a href="#local-6989586621679063671"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679063672"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
173+</span><a name="line-173"></a><span>
174+</span><a name="line-174"></a><span class="hs-keyword">infixl</span><span> </span><span class="hs-number">3</span><span> </span><a href="Matrix.Nat.html#%7C%7C%7C"><span class="hs-operator hs-var">|||</span></a><span>
175+</span><a name="line-175"></a><span class="hs-special">(</span><span class="hs-operator">|||</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span>
176+</span><a name="line-176"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><a href="#local-6989586621679063659"><span class="hs-identifier hs-type">cols3</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><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063660"><span class="hs-identifier hs-type">cols1</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063661"><span class="hs-identifier hs-type">cols2</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
177+</span><a name="line-177"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063662"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063660"><span class="hs-identifier hs-type">cols1</span></a><span> </span><a href="#local-6989586621679063663"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
178+</span><a name="line-178"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063662"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063661"><span class="hs-identifier hs-type">cols2</span></a><span> </span><a href="#local-6989586621679063663"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
179+</span><a name="line-179"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063662"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063659"><span class="hs-identifier hs-type">cols3</span></a><span> </span><a href="#local-6989586621679063663"><span class="hs-identifier hs-type">rows</span></a><span>
180+</span><a name="line-180"></a><span class="hs-special">(</span><a name="%7C%7C%7C"><a href="Matrix.Nat.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.Nat.html#junc"><span class="hs-identifier hs-var">junc</span></a><span>
181+</span><a name="line-181"></a><span>
182+</span><a name="line-182"></a><span class="hs-identifier">split</span><span> </span><span class="hs-glyph">::</span><span>
183+</span><a name="line-183"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><a href="#local-6989586621679063654"><span class="hs-identifier hs-type">rows3</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><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063655"><span class="hs-identifier hs-type">rows1</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063656"><span class="hs-identifier hs-type">rows2</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
184+</span><a name="line-184"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063657"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063658"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063655"><span class="hs-identifier hs-type">rows1</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
185+</span><a name="line-185"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063657"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063658"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063656"><span class="hs-identifier hs-type">rows2</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
186+</span><a name="line-186"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063657"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063658"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063654"><span class="hs-identifier hs-type">rows3</span></a><span>
187+</span><a name="line-187"></a><a name="split"><a href="Matrix.Nat.html#split"><span class="hs-identifier">split</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063673"><a href="#local-6989586621679063673"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063674"><a href="#local-6989586621679063674"><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.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">I.Split</span></a><span> </span><a href="#local-6989586621679063673"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679063674"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
188+</span><a name="line-188"></a><span>
189+</span><a name="line-189"></a><span class="hs-keyword">infixl</span><span> </span><span class="hs-number">2</span><span> </span><a href="Matrix.Nat.html#%3D%3D%3D"><span class="hs-operator hs-var">===</span></a><span>
190+</span><a name="line-190"></a><span class="hs-special">(</span><span class="hs-operator">===</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span>
191+</span><a name="line-191"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><a href="#local-6989586621679063649"><span class="hs-identifier hs-type">rows3</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><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063650"><span class="hs-identifier hs-type">rows1</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063651"><span class="hs-identifier hs-type">rows2</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
192+</span><a name="line-192"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063652"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063653"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063650"><span class="hs-identifier hs-type">rows1</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
193+</span><a name="line-193"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063652"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063653"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063651"><span class="hs-identifier hs-type">rows2</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
194+</span><a name="line-194"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063652"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063653"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063649"><span class="hs-identifier hs-type">rows3</span></a><span>
195+</span><a name="line-195"></a><span class="hs-special">(</span><a name="%3D%3D%3D"><a href="Matrix.Nat.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.Nat.html#split"><span class="hs-identifier hs-var">split</span></a><span>
196+</span><a name="line-196"></a><span>
197+</span><a name="line-197"></a><span class="hs-comment">-- Construction</span><span>
198+</span><a name="line-198"></a><span>
199+</span><a name="line-199"></a><span class="hs-identifier">fromLists</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">I.FromLists</span></a><span> </span><a href="#local-6989586621679063646"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063647"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063648"><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">=&gt;</span><span> </span><span class="hs-special">[</span><span class="hs-special">[</span><a href="#local-6989586621679063646"><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">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063646"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063647"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063648"><span class="hs-identifier hs-type">rows</span></a><span>
200+</span><a name="line-200"></a><a name="fromLists"><a href="Matrix.Nat.html#fromLists"><span class="hs-identifier">fromLists</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</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">I.fromLists</span></a><span>
201+</span><a name="line-201"></a><span>
202+</span><a name="line-202"></a><span class="hs-identifier">matrixBuilder</span><span> </span><span class="hs-glyph">::</span><span>
203+</span><a name="line-203"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063643"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063644"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063645"><span class="hs-identifier hs-type">rows</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063644"><span class="hs-identifier hs-type">cols</span></a><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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063645"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
204+</span><a name="line-204"></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">-&gt;</span><span> </span><a href="#local-6989586621679063643"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span>
205+</span><a name="line-205"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063643"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063644"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063645"><span class="hs-identifier hs-type">rows</span></a><span>
206+</span><a name="line-206"></a><a name="matrixBuilder"><a href="Matrix.Nat.html#matrixBuilder"><span class="hs-identifier">matrixBuilder</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#matrixBuilder"><span class="hs-identifier hs-var">I.matrixBuilder</span></a><span>
207+</span><a name="line-207"></a><span>
208+</span><a name="line-208"></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">I.FromLists</span></a><span> </span><a href="#local-6989586621679063641"><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><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063642"><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">=&gt;</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679063641"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063641"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-number">1</span><span> </span><a href="#local-6989586621679063642"><span class="hs-identifier hs-type">rows</span></a><span>
209+</span><a name="line-209"></a><a name="col"><a href="Matrix.Nat.html#col"><span class="hs-identifier">col</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#col"><span class="hs-identifier hs-var">I.col</span></a><span>
210+</span><a name="line-210"></a><span>
211+</span><a name="line-211"></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">I.FromLists</span></a><span> </span><a href="#local-6989586621679063639"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063640"><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 class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679063639"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063639"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063640"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-number">1</span><span>
212+</span><a name="line-212"></a><a name="row"><a href="Matrix.Nat.html#row"><span class="hs-identifier">row</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#row"><span class="hs-identifier hs-var">I.row</span></a><span>
213+</span><a name="line-213"></a><span>
214+</span><a name="line-214"></a><span class="hs-identifier">fromF</span><span> </span><span class="hs-glyph">::</span><span>
215+</span><a name="line-215"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679063634"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
216+</span><a name="line-216"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679063635"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
217+</span><a name="line-217"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679063634"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
218+</span><a name="line-218"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679063635"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
219+</span><a name="line-219"></a><span> </span><span class="hs-identifier hs-type">Eq</span><span> </span><a href="#local-6989586621679063635"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
220+</span><a name="line-220"></a><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063636"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
221+</span><a name="line-221"></a><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><a href="#local-6989586621679063636"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
222+</span><a name="line-222"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063637"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
223+</span><a name="line-223"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063638"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
224+</span><a name="line-224"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063636"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063638"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063637"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span>
225+</span><a name="line-225"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
226+</span><a name="line-226"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679063634"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679063635"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span>
227+</span><a name="line-227"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063636"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063637"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063638"><span class="hs-identifier hs-type">rows</span></a><span>
228+</span><a name="line-228"></a><a name="fromF"><a href="Matrix.Nat.html#fromF"><span class="hs-identifier">fromF</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#fromF"><span class="hs-identifier hs-var">I.fromF</span></a><span>
229+</span><a name="line-229"></a><span>
230+</span><a name="line-230"></a><span class="hs-identifier">fromF'</span><span> </span><span class="hs-glyph">::</span><span>
231+</span><a name="line-231"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679063631"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
232+</span><a name="line-232"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679063632"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
233+</span><a name="line-233"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679063631"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
234+</span><a name="line-234"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679063632"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
235+</span><a name="line-235"></a><span> </span><span class="hs-identifier hs-type">Eq</span><span> </span><a href="#local-6989586621679063632"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
236+</span><a name="line-236"></a><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063633"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
237+</span><a name="line-237"></a><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><a href="#local-6989586621679063633"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
238+</span><a name="line-238"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679063631"><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>
239+</span><a name="line-239"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679063632"><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>
240+</span><a name="line-240"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063633"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679063632"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679063631"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
241+</span><a name="line-241"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
242+</span><a name="line-242"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679063631"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679063632"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span>
243+</span><a name="line-243"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063633"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">I.Count</span></a><span> </span><a href="#local-6989586621679063631"><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">I.Count</span></a><span> </span><a href="#local-6989586621679063632"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
244+</span><a name="line-244"></a><a name="fromF%27"><a href="Matrix.Nat.html#fromF%27"><span class="hs-identifier">fromF'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#fromF%27"><span class="hs-identifier hs-var">I.fromF'</span></a><span>
245+</span><a name="line-245"></a><span>
246+</span><a name="line-246"></a><span class="hs-comment">-- Conversion</span><span>
247+</span><a name="line-247"></a><span>
248+</span><a name="line-248"></a><span class="hs-identifier">toLists</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063628"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063629"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063630"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="hs-special">[</span><a href="#local-6989586621679063628"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span class="hs-special">]</span><span>
249+</span><a name="line-249"></a><a name="toLists"><a href="Matrix.Nat.html#toLists"><span class="hs-identifier">toLists</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063675"><a href="#local-6989586621679063675"><span class="hs-identifier">m</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">I.toLists</span></a><span> </span><a href="#local-6989586621679063675"><span class="hs-identifier hs-var">m</span></a><span>
250+</span><a name="line-250"></a><span>
251+</span><a name="line-251"></a><span class="hs-identifier">toList</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063625"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063626"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063627"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679063625"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span>
252+</span><a name="line-252"></a><a name="toList"><a href="Matrix.Nat.html#toList"><span class="hs-identifier">toList</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063676"><a href="#local-6989586621679063676"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#toList"><span class="hs-identifier hs-var">I.toList</span></a><span> </span><a href="#local-6989586621679063676"><span class="hs-identifier hs-var">m</span></a><span>
253+</span><a name="line-253"></a><span>
254+</span><a name="line-254"></a><span class="hs-comment">-- Zeros Matrix</span><span>
255+</span><a name="line-255"></a><span>
256+</span><a name="line-256"></a><span class="hs-identifier">zeros</span><span> </span><span class="hs-glyph">::</span><span>
257+</span><a name="line-257"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063622"><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">I.FromLists</span></a><span> </span><a href="#local-6989586621679063622"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063623"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063624"><span class="hs-identifier hs-type">rows</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063623"><span class="hs-identifier hs-type">cols</span></a><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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063624"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
258+</span><a name="line-258"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063622"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063623"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063624"><span class="hs-identifier hs-type">rows</span></a><span>
259+</span><a name="line-259"></a><a name="zeros"><a href="Matrix.Nat.html#zeros"><span class="hs-identifier">zeros</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#zeros"><span class="hs-identifier hs-var">I.zeros</span></a><span>
260+</span><a name="line-260"></a><span>
261+</span><a name="line-261"></a><span class="hs-comment">-- Ones Matrix</span><span>
262+</span><a name="line-262"></a><span>
263+</span><a name="line-263"></a><span class="hs-identifier">ones</span><span> </span><span class="hs-glyph">::</span><span>
264+</span><a name="line-264"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063619"><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">I.FromLists</span></a><span> </span><a href="#local-6989586621679063619"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063620"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063621"><span class="hs-identifier hs-type">rows</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063620"><span class="hs-identifier hs-type">cols</span></a><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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063621"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
265+</span><a name="line-265"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063619"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063620"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063621"><span class="hs-identifier hs-type">rows</span></a><span>
266+</span><a name="line-266"></a><a name="ones"><a href="Matrix.Nat.html#ones"><span class="hs-identifier">ones</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#ones"><span class="hs-identifier hs-var">I.ones</span></a><span>
267+</span><a name="line-267"></a><span>
268+</span><a name="line-268"></a><span class="hs-comment">-- Const Matrix</span><span>
269+</span><a name="line-269"></a><span>
270+</span><a name="line-270"></a><span class="hs-identifier">constant</span><span> </span><span class="hs-glyph">::</span><span>
271+</span><a name="line-271"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063616"><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">I.FromLists</span></a><span> </span><a href="#local-6989586621679063616"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063617"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063618"><span class="hs-identifier hs-type">rows</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063617"><span class="hs-identifier hs-type">cols</span></a><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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063618"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
272+</span><a name="line-272"></a><span> </span><a href="#local-6989586621679063616"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
273+</span><a name="line-273"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063616"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063617"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063618"><span class="hs-identifier hs-type">rows</span></a><span>
274+</span><a name="line-274"></a><a name="constant"><a href="Matrix.Nat.html#constant"><span class="hs-identifier">constant</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#constant"><span class="hs-identifier hs-var">I.constant</span></a><span>
275+</span><a name="line-275"></a><span>
276+</span><a name="line-276"></a><span class="hs-comment">-- Bang Matrix</span><span>
277+</span><a name="line-277"></a><span>
278+</span><a name="line-278"></a><span class="hs-identifier">bang</span><span> </span><span class="hs-glyph">::</span><span>
279+</span><a name="line-279"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679063614"><a href="#local-6989586621679063614"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679063615"><a href="#local-6989586621679063615"><span class="hs-identifier">cols</span></a></a><span class="hs-operator">.</span><span>
280+</span><a name="line-280"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063614"><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-6989586621679063614"><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">I.FromLists</span></a><span> </span><a href="#local-6989586621679063614"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063615"><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 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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063615"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
281+</span><a name="line-281"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063614"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063615"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-number">1</span><span>
282+</span><a name="line-282"></a><a name="bang"><a href="Matrix.Nat.html#bang"><span class="hs-identifier">bang</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#bang"><span class="hs-identifier hs-var">I.bang</span></a><span>
283+</span><a name="line-283"></a><span>
284+</span><a name="line-284"></a><span class="hs-comment">-- Identity Matrix</span><span>
285+</span><a name="line-285"></a><span>
286+</span><a name="line-286"></a><span class="hs-identifier">identity</span><span> </span><span class="hs-glyph">::</span><span>
287+</span><a name="line-287"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063612"><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">I.FromLists</span></a><span> </span><a href="#local-6989586621679063612"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063613"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063613"><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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063613"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
288+</span><a name="line-288"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063612"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063613"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063613"><span class="hs-identifier hs-type">cols</span></a><span>
289+</span><a name="line-289"></a><a name="identity"><a href="Matrix.Nat.html#identity"><span class="hs-identifier">identity</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#identity"><span class="hs-identifier hs-var">I.identity</span></a><span>
290+</span><a name="line-290"></a><span>
291+</span><a name="line-291"></a><span class="hs-comment">-- Matrix composition (MMM)</span><span>
292+</span><a name="line-292"></a><span>
293+</span><a name="line-293"></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-6989586621679063608"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063608"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063609"><span class="hs-identifier hs-type">cr</span></a><span> </span><a href="#local-6989586621679063610"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063608"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063611"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063609"><span class="hs-identifier hs-type">cr</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063608"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063611"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063610"><span class="hs-identifier hs-type">rows</span></a><span>
294+</span><a name="line-294"></a><a name="comp"><a href="Matrix.Nat.html#comp"><span class="hs-identifier">comp</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063677"><a href="#local-6989586621679063677"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063678"><a href="#local-6989586621679063678"><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.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#comp"><span class="hs-identifier hs-var">I.comp</span></a><span> </span><a href="#local-6989586621679063677"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679063678"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
295+</span><a name="line-295"></a><span>
296+</span><a name="line-296"></a><span class="hs-identifier">p1</span><span> </span><span class="hs-glyph">::</span><span>
297+</span><a name="line-297"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063605"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
298+</span><a name="line-298"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063606"><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>
299+</span><a name="line-299"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063607"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
300+</span><a name="line-300"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063605"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063606"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063607"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
301+</span><a name="line-301"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063605"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063607"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063607"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
302+</span><a name="line-302"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">+</span><span> </span><a href="#local-6989586621679063606"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><span class="hs-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063607"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063606"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span>
303+</span><a name="line-303"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
304+</span><a name="line-304"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063605"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">+</span><span> </span><a href="#local-6989586621679063606"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679063607"><span class="hs-identifier hs-type">m</span></a><span>
305+</span><a name="line-305"></a><a name="p1"><a href="Matrix.Nat.html#p1"><span class="hs-identifier">p1</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#p1"><span class="hs-identifier hs-var">I.p1</span></a><span>
306+</span><a name="line-306"></a><span>
307+</span><a name="line-307"></a><span class="hs-identifier">p2</span><span> </span><span class="hs-glyph">::</span><span>
308+</span><a name="line-308"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063602"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
309+</span><a name="line-309"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063603"><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>
310+</span><a name="line-310"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063604"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
311+</span><a name="line-311"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063602"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063604"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063603"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
312+</span><a name="line-312"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063602"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063603"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063603"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
313+</span><a name="line-313"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">+</span><span> </span><a href="#local-6989586621679063603"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><span class="hs-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063604"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063603"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span>
314+</span><a name="line-314"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
315+</span><a name="line-315"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063602"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">+</span><span> </span><a href="#local-6989586621679063603"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679063603"><span class="hs-identifier hs-type">n</span></a><span>
316+</span><a name="line-316"></a><a name="p2"><a href="Matrix.Nat.html#p2"><span class="hs-identifier">p2</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#p2"><span class="hs-identifier hs-var">I.p2</span></a><span>
317+</span><a name="line-317"></a><span>
318+</span><a name="line-318"></a><span class="hs-comment">-- Injections</span><span>
319+</span><a name="line-319"></a><span>
320+</span><a name="line-320"></a><span class="hs-identifier">i1</span><span> </span><span class="hs-glyph">::</span><span>
321+</span><a name="line-321"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063599"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
322+</span><a name="line-322"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063600"><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>
323+</span><a name="line-323"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063601"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
324+</span><a name="line-324"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063599"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063600"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063601"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
325+</span><a name="line-325"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063599"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063601"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063601"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
326+</span><a name="line-326"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">rows</span><span> </span><span class="hs-operator hs-type">+</span><span> </span><a href="#local-6989586621679063600"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><span class="hs-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063601"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063600"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span>
327+</span><a name="line-327"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
328+</span><a name="line-328"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063599"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063601"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">rows</span><span> </span><span class="hs-operator hs-type">+</span><span> </span><a href="#local-6989586621679063600"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span>
329+</span><a name="line-329"></a><a name="i1"><a href="Matrix.Nat.html#i1"><span class="hs-identifier">i1</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="Matrix.Nat.html#p1"><span class="hs-identifier hs-var">p1</span></a><span>
330+</span><a name="line-330"></a><span>
331+</span><a name="line-331"></a><span class="hs-identifier">i2</span><span> </span><span class="hs-glyph">::</span><span>
332+</span><a name="line-332"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063596"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
333+</span><a name="line-333"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063597"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
334+</span><a name="line-334"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063598"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
335+</span><a name="line-335"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063596"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063598"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063597"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
336+</span><a name="line-336"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063596"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063597"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063597"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
337+</span><a name="line-337"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">+</span><span> </span><a href="#local-6989586621679063597"><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-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063598"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063597"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span>
338+</span><a name="line-338"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
339+</span><a name="line-339"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063596"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063597"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">+</span><span> </span><a href="#local-6989586621679063597"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span>
340+</span><a name="line-340"></a><a name="i2"><a href="Matrix.Nat.html#i2"><span class="hs-identifier">i2</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="Matrix.Nat.html#p2"><span class="hs-identifier hs-var">p2</span></a><span>
341+</span><a name="line-341"></a><span>
342+</span><a name="line-342"></a><span class="hs-comment">-- Dimensions</span><span>
343+</span><a name="line-343"></a><span>
344+</span><a name="line-344"></a><span class="hs-identifier">rows</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063593"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063594"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063595"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063593"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Int</span><span>
345+</span><a name="line-345"></a><a name="rows"><a href="Matrix.Nat.html#rows"><span class="hs-identifier">rows</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063679"><a href="#local-6989586621679063679"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#rows"><span class="hs-identifier hs-var">I.rows</span></a><span> </span><a href="#local-6989586621679063679"><span class="hs-identifier hs-var">m</span></a><span>
346+</span><a name="line-346"></a><span>
347+</span><a name="line-347"></a><span class="hs-identifier">columns</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063590"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063591"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063590"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063592"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Int</span><span>
348+</span><a name="line-348"></a><a name="columns"><a href="Matrix.Nat.html#columns"><span class="hs-identifier">columns</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063680"><a href="#local-6989586621679063680"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#columns"><span class="hs-identifier hs-var">I.columns</span></a><span> </span><a href="#local-6989586621679063680"><span class="hs-identifier hs-var">m</span></a><span>
349+</span><a name="line-349"></a><span>
350+</span><a name="line-350"></a><span class="hs-comment">-- Coproduct Bifunctor</span><span>
351+</span><a name="line-351"></a><span>
352+</span><a name="line-352"></a><span class="hs-keyword">infixl</span><span> </span><span class="hs-number">5</span><span> </span><a href="Matrix.Nat.html#-%7C-"><span class="hs-operator hs-var">-|-</span></a><span>
353+</span><a name="line-353"></a><span>
354+</span><a name="line-354"></a><span class="hs-special">(</span><span class="hs-operator">-|-</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span>
355+</span><a name="line-355"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063585"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
356+</span><a name="line-356"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063586"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
357+</span><a name="line-357"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063587"><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>
358+</span><a name="line-358"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063585"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063587"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063587"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
359+</span><a name="line-359"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063585"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063586"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063587"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
360+</span><a name="line-360"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063585"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063587"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063586"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
361+</span><a name="line-361"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063585"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063586"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063586"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
362+</span><a name="line-362"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">n</span><span> </span><span class="hs-operator hs-type">+</span><span> </span><a href="#local-6989586621679063589"><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-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063588"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063589"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
363+</span><a name="line-363"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">k</span><span> </span><span class="hs-operator hs-type">+</span><span> </span><a href="#local-6989586621679063586"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><span class="hs-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063587"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063586"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span>
364+</span><a name="line-364"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
365+</span><a name="line-365"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063585"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063588"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679063587"><span class="hs-identifier hs-type">k</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
366+</span><a name="line-366"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063585"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063589"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679063586"><span class="hs-identifier hs-type">j</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
367+</span><a name="line-367"></a><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063585"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">n</span><span> </span><span class="hs-operator hs-type">+</span><span> </span><a href="#local-6989586621679063589"><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">k</span><span> </span><span class="hs-operator hs-type">+</span><span> </span><a href="#local-6989586621679063586"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span>
368+</span><a name="line-368"></a><span class="hs-special">(</span><a name="-%7C-"><a href="Matrix.Nat.html#-%7C-"><span class="hs-operator">-|-</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063681"><a href="#local-6989586621679063681"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063682"><a href="#local-6989586621679063682"><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.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><a href="Matrix.Internal.html#-%7C-"><span class="hs-operator hs-var">I.-|-</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679063681"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679063682"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
369+</span><a name="line-369"></a><span>
370+</span><a name="line-370"></a><span class="hs-comment">-- Khatri Rao Product and projections</span><span>
371+</span><a name="line-371"></a><span>
372+</span><a name="line-372"></a><span class="hs-identifier">kp1</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-6989586621679063582"><a href="#local-6989586621679063582"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679063583"><a href="#local-6989586621679063583"><span class="hs-identifier">m</span></a></a><span> </span><a name="local-6989586621679063584"><a href="#local-6989586621679063584"><span class="hs-identifier">k</span></a></a><span> </span><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">Num</span><span> </span><a href="#local-6989586621679063582"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
375+</span><a name="line-375"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063583"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
376+</span><a name="line-376"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063584"><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>
377+</span><a name="line-377"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063584"><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 class="hs-special">,</span><span>
378+</span><a name="line-378"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063582"><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">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063584"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063583"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
379+</span><a name="line-379"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063584"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">I.Count</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063583"><span class="hs-identifier hs-type">m</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063584"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
380+</span><a name="line-380"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063582"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063584"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679063583"><span class="hs-identifier hs-type">m</span></a><span>
381+</span><a name="line-381"></a><a name="kp1"><a href="Matrix.Nat.html#kp1"><span class="hs-identifier">kp1</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#kp1"><span class="hs-identifier hs-var">I.kp1</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063582"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063583"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063584"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
382+</span><a name="line-382"></a><span>
383+</span><a name="line-383"></a><span class="hs-identifier">kp2</span><span> </span><span class="hs-glyph">::</span><span>
384+</span><a name="line-384"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679063579"><a href="#local-6989586621679063579"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679063580"><a href="#local-6989586621679063580"><span class="hs-identifier">m</span></a></a><span> </span><a name="local-6989586621679063581"><a href="#local-6989586621679063581"><span class="hs-identifier">k</span></a></a><span class="hs-operator">.</span><span>
385+</span><a name="line-385"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063579"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
386+</span><a name="line-386"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063581"><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>
387+</span><a name="line-387"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063579"><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">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063581"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063581"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
388+</span><a name="line-388"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063580"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
389+</span><a name="line-389"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063581"><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 class="hs-special">,</span><span>
390+</span><a name="line-390"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063581"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">I.Count</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063580"><span class="hs-identifier hs-type">m</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063581"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
391+</span><a name="line-391"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063579"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063581"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679063581"><span class="hs-identifier hs-type">k</span></a><span>
392+</span><a name="line-392"></a><a name="kp2"><a href="Matrix.Nat.html#kp2"><span class="hs-identifier">kp2</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#kp2"><span class="hs-identifier hs-var">I.kp2</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063579"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063580"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063581"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
393+</span><a name="line-393"></a><span>
394+</span><a name="line-394"></a><span class="hs-identifier">khatri</span><span> </span><span class="hs-glyph">::</span><span>
395+</span><a name="line-395"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679063575"><a href="#local-6989586621679063575"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679063576"><a href="#local-6989586621679063576"><span class="hs-identifier">cols</span></a></a><span> </span><a name="local-6989586621679063577"><a href="#local-6989586621679063577"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679063578"><a href="#local-6989586621679063578"><span class="hs-identifier">b</span></a></a><span class="hs-operator">.</span><span>
396+</span><a name="line-396"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063575"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
397+</span><a name="line-397"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063577"><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>
398+</span><a name="line-398"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063578"><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>
399+</span><a name="line-399"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">a</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063578"><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>
400+</span><a name="line-400"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063575"><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">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">a</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063578"><span class="hs-identifier hs-type">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#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063577"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
401+</span><a name="line-401"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063575"><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">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">a</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063578"><span class="hs-identifier hs-type">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#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063578"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
402+</span><a name="line-402"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">a</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063578"><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#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">I.Count</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063577"><span class="hs-identifier hs-type">a</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063578"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
403+</span><a name="line-403"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063575"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063576"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063577"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063575"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063576"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063578"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063575"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063576"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">a</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063578"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
404+</span><a name="line-404"></a><a name="khatri"><a href="Matrix.Nat.html#khatri"><span class="hs-identifier">khatri</span></a></a><span> </span><a name="local-6989586621679063683"><a href="#local-6989586621679063683"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679063684"><a href="#local-6989586621679063684"><span class="hs-identifier">b</span></a></a><span> </span><span class="hs-glyph">=</span><span>
405+</span><a name="line-405"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679063685"><a href="#local-6989586621679063685"><span class="hs-identifier">kp1'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#kp1"><span class="hs-identifier hs-var">kp1</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063575"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063577"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063578"><span class="hs-identifier hs-type">b</span></a><span>
406+</span><a name="line-406"></a><span> </span><a name="local-6989586621679063686"><a href="#local-6989586621679063686"><span class="hs-identifier">kp2'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#kp2"><span class="hs-identifier hs-var">kp2</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063575"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063577"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063578"><span class="hs-identifier hs-type">b</span></a><span>
407+</span><a name="line-407"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Nat.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="#local-6989586621679063685"><span class="hs-identifier hs-var">kp1'</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679063683"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="Matrix.Nat.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="#local-6989586621679063686"><span class="hs-identifier hs-var">kp2'</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679063684"><span class="hs-identifier hs-var">b</span></a><span>
408+</span><a name="line-408"></a><span>
409+</span><a name="line-409"></a><span class="hs-comment">-- Product Bifunctor (Kronecker)</span><span>
410+</span><a name="line-410"></a><span>
411+</span><a name="line-411"></a><span class="hs-keyword">infixl</span><span> </span><span class="hs-number">4</span><span> </span><a href="Matrix.Nat.html#%3E%3C"><span class="hs-operator hs-var">&gt;&lt;</span></a><span>
412+</span><a name="line-412"></a><span>
413+</span><a name="line-413"></a><span class="hs-special">(</span><span class="hs-operator">&gt;&lt;</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span>
414+</span><a name="line-414"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679063570"><a href="#local-6989586621679063570"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679063571"><a href="#local-6989586621679063571"><span class="hs-identifier">m</span></a></a><span> </span><a name="local-6989586621679063572"><a href="#local-6989586621679063572"><span class="hs-identifier">p</span></a></a><span> </span><a name="local-6989586621679063573"><a href="#local-6989586621679063573"><span class="hs-identifier">n</span></a></a><span> </span><a name="local-6989586621679063574"><a href="#local-6989586621679063574"><span class="hs-identifier">q</span></a></a><span class="hs-operator">.</span><span>
415+</span><a name="line-415"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063570"><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">KnownNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063571"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063573"><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>
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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063572"><span class="hs-identifier hs-type">p</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><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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063574"><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>
420+</span><a name="line-420"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063573"><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>
421+</span><a name="line-421"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">p</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063574"><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>
422+</span><a name="line-422"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063570"><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">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063573"><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#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063571"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
423+</span><a name="line-423"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063570"><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">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063573"><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#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063573"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
424+</span><a name="line-424"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063570"><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">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">p</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063574"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063572"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
425+</span><a name="line-425"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063570"><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">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">p</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063574"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063574"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
426+</span><a name="line-426"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063573"><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#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">I.Count</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063571"><span class="hs-identifier hs-type">m</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063573"><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>
427+</span><a name="line-427"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">p</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063574"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">I.Count</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063572"><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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063574"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
428+</span><a name="line-428"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063570"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063571"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679063572"><span class="hs-identifier hs-type">p</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063570"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063573"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679063574"><span class="hs-identifier hs-type">q</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063570"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">m</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063573"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">p</span><span> </span><span class="hs-operator hs-type">*</span><span> </span><a href="#local-6989586621679063574"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span>
429+</span><a name="line-429"></a><span class="hs-special">(</span><a name="%3E%3C"><a href="Matrix.Nat.html#%3E%3C"><span class="hs-operator">&gt;&lt;</span></a></a><span class="hs-special">)</span><span> </span><a name="local-6989586621679063687"><a href="#local-6989586621679063687"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679063688"><a href="#local-6989586621679063688"><span class="hs-identifier">b</span></a></a><span> </span><span class="hs-glyph">=</span><span>
430+</span><a name="line-430"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679063689"><a href="#local-6989586621679063689"><span class="hs-identifier">kp1'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#kp1"><span class="hs-identifier hs-var">kp1</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063570"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063571"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063573"><span class="hs-identifier hs-type">n</span></a><span>
431+</span><a name="line-431"></a><span> </span><a name="local-6989586621679063690"><a href="#local-6989586621679063690"><span class="hs-identifier">kp2'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#kp2"><span class="hs-identifier hs-var">kp2</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063570"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063571"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679063573"><span class="hs-identifier hs-type">n</span></a><span>
432+</span><a name="line-432"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Nat.html#khatri"><span class="hs-identifier hs-var">khatri</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><a href="#local-6989586621679063687"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679063689"><span class="hs-identifier hs-var">kp1'</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><a href="#local-6989586621679063688"><span class="hs-identifier hs-var">b</span></a><span> </span><a href="#local-6989586621679063690"><span class="hs-identifier hs-var">kp2'</span></a><span class="hs-special">)</span><span>
433+</span><a name="line-433"></a><span>
434+</span><a name="line-434"></a><span class="hs-comment">-- Matrix abide Junc Split</span><span>
435+</span><a name="line-435"></a><span>
436+</span><a name="line-436"></a><span class="hs-identifier">abideJS</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063567"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063568"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063569"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063567"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063568"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063569"><span class="hs-identifier hs-type">rows</span></a><span>
437+</span><a name="line-437"></a><a name="abideJS"><a href="Matrix.Nat.html#abideJS"><span class="hs-identifier">abideJS</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063691"><a href="#local-6989586621679063691"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">I.abideJS</span></a><span> </span><a href="#local-6989586621679063691"><span class="hs-identifier hs-var">m</span></a><span class="hs-special">)</span><span>
438+</span><a name="line-438"></a><span>
439+</span><a name="line-439"></a><span class="hs-comment">-- Matrix abide Split Junc</span><span>
440+</span><a name="line-440"></a><span>
441+</span><a name="line-441"></a><span class="hs-identifier">abideSJ</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063564"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063565"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063566"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063564"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063565"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063566"><span class="hs-identifier hs-type">rows</span></a><span>
442+</span><a name="line-442"></a><a name="abideSJ"><a href="Matrix.Nat.html#abideSJ"><span class="hs-identifier">abideSJ</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063692"><a href="#local-6989586621679063692"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideSJ"><span class="hs-identifier hs-var">I.abideSJ</span></a><span> </span><a href="#local-6989586621679063692"><span class="hs-identifier hs-var">m</span></a><span class="hs-special">)</span><span>
443+</span><a name="line-443"></a><span>
444+</span><a name="line-444"></a><span class="hs-comment">-- Matrix transposition</span><span>
445+</span><a name="line-445"></a><span>
446+</span><a name="line-446"></a><span class="hs-identifier">tr</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063561"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063562"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063563"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063561"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063563"><span class="hs-identifier hs-type">rows</span></a><span> </span><a href="#local-6989586621679063562"><span class="hs-identifier hs-type">cols</span></a><span>
447+</span><a name="line-447"></a><a name="tr"><a href="Matrix.Nat.html#tr"><span class="hs-identifier">tr</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063693"><a href="#local-6989586621679063693"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">I.tr</span></a><span> </span><a href="#local-6989586621679063693"><span class="hs-identifier hs-var">m</span></a><span class="hs-special">)</span><span>
448+</span><a name="line-448"></a><span>
449+</span><a name="line-449"></a><span class="hs-comment">-- Selective 'select' operator</span><span>
450+</span><a name="line-450"></a><span class="hs-identifier">select</span><span> </span><span class="hs-glyph">::</span><span>
451+</span><a name="line-451"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063554"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
452+</span><a name="line-452"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063554"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063555"><span class="hs-identifier hs-type">rows1</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063555"><span class="hs-identifier hs-type">rows1</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
453+</span><a name="line-453"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063555"><span class="hs-identifier hs-type">rows1</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
454+</span><a name="line-454"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><a href="#local-6989586621679063556"><span class="hs-identifier hs-type">rows2</span></a><span> </span><span class="hs-glyph">~</span><span> </span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063555"><span class="hs-identifier hs-type">rows1</span></a><span class="hs-special">,</span><span>
455+</span><a name="line-455"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><a href="#local-6989586621679063557"><span class="hs-identifier hs-type">cols1</span></a><span> </span><span class="hs-glyph">~</span><span> </span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063558"><span class="hs-identifier hs-type">cols2</span></a><span class="hs-special">,</span><span>
456+</span><a name="line-456"></a><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><a href="#local-6989586621679063559"><span class="hs-identifier hs-type">rows3</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><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063560"><span class="hs-identifier hs-type">cols3</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063555"><span class="hs-identifier hs-type">rows1</span></a><span class="hs-special">)</span><span>
457+</span><a name="line-457"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063554"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063557"><span class="hs-identifier hs-type">cols1</span></a><span> </span><a href="#local-6989586621679063559"><span class="hs-identifier hs-type">rows3</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063554"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063560"><span class="hs-identifier hs-type">cols3</span></a><span> </span><a href="#local-6989586621679063555"><span class="hs-identifier hs-type">rows1</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063554"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063558"><span class="hs-identifier hs-type">cols2</span></a><span> </span><a href="#local-6989586621679063556"><span class="hs-identifier hs-type">rows2</span></a><span>
458+</span><a name="line-458"></a><a name="select"><a href="Matrix.Nat.html#select"><span class="hs-identifier">select</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063694"><a href="#local-6989586621679063694"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063695"><a href="#local-6989586621679063695"><span class="hs-identifier">y</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#select"><span class="hs-identifier hs-var">I.select</span></a><span> </span><a href="#local-6989586621679063694"><span class="hs-identifier hs-var">m</span></a><span> </span><a href="#local-6989586621679063695"><span class="hs-identifier hs-var">y</span></a><span class="hs-special">)</span><span>
459+</span><a name="line-459"></a><span>
460+</span><a name="line-460"></a><span class="hs-comment">-- McCarthy's Conditional</span><span>
461+</span><a name="line-461"></a><span>
462+</span><a name="line-462"></a><span class="hs-identifier">cond</span><span> </span><span class="hs-glyph">::</span><span>
463+</span><a name="line-463"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">I.FromNat</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063550"><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#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063550"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">,</span><span>
464+</span><a name="line-464"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063550"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
465+</span><a name="line-465"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063551"><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><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063550"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
466+</span><a name="line-466"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063551"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063550"><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 class="hs-special">,</span><span>
467+</span><a name="line-467"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679063551"><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">I.FromNat</span></a><span> </span><a href="#local-6989586621679063550"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063550"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
468+</span><a name="line-468"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679063552"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
469+</span><a name="line-469"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679063552"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
470+</span><a name="line-470"></a><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679063551"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
471+</span><a name="line-471"></a><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><a href="#local-6989586621679063551"><span class="hs-identifier hs-type">e</span></a><span>
472+</span><a name="line-472"></a><span> </span><span class="hs-special">)</span><span>
473+</span><a name="line-473"></a><span> </span><span class="hs-glyph">=&gt;</span><span>
474+</span><a name="line-474"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679063552"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Bool</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063551"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063550"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063553"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063551"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063550"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063553"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063551"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063550"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063553"><span class="hs-identifier hs-type">rows</span></a><span>
475+</span><a name="line-475"></a><a name="cond"><a href="Matrix.Nat.html#cond"><span class="hs-identifier">cond</span></a></a><span> </span><a name="local-6989586621679063696"><a href="#local-6989586621679063696"><span class="hs-identifier">p</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063697"><a href="#local-6989586621679063697"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063698"><a href="#local-6989586621679063698"><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.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#cond"><span class="hs-identifier hs-var">I.cond</span></a><span> </span><a href="#local-6989586621679063696"><span class="hs-identifier hs-var">p</span></a><span> </span><a href="#local-6989586621679063697"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679063698"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
476+</span><a name="line-476"></a><span>
477+</span><a name="line-477"></a><span class="hs-comment">-- Pretty print</span><span>
478+</span><a name="line-478"></a><span>
479+</span><a name="line-479"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063547"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><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-6989586621679063548"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063548"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063547"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063549"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">String</span><span>
480+</span><a name="line-480"></a><a name="pretty"><a href="Matrix.Nat.html#pretty"><span class="hs-identifier">pretty</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063699"><a href="#local-6989586621679063699"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#pretty"><span class="hs-identifier hs-var">I.pretty</span></a><span> </span><a href="#local-6989586621679063699"><span class="hs-identifier hs-var">m</span></a><span>
481+</span><a name="line-481"></a><span>
482+</span><a name="line-482"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span> </span><a href="#local-6989586621679063544"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><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-6989586621679063545"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Nat.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679063545"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679063544"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679063546"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
483+</span><a name="line-483"></a><a name="prettyPrint"><a href="Matrix.Nat.html#prettyPrint"><span class="hs-identifier">prettyPrint</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Nat.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679063700"><a href="#local-6989586621679063700"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#prettyPrint"><span class="hs-identifier hs-var">I.prettyPrint</span></a><span> </span><a href="#local-6989586621679063700"><span class="hs-identifier hs-var">m</span></a><span>
484+</span><a name="line-484"></a></pre></body></html>
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Matrix.Type.htmlnew file+648
@@ -0,0 +1,648 @@
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 DerivingVia #-}</span><span>
4+</span><a name="line-4"></a><span class="hs-pragma">{-# LANGUAGE FlexibleContexts #-}</span><span>
5+</span><a name="line-5"></a><span class="hs-pragma">{-# LANGUAGE FlexibleInstances #-}</span><span>
6+</span><a name="line-6"></a><span class="hs-pragma">{-# LANGUAGE GADTs #-}</span><span>
7+</span><a name="line-7"></a><span class="hs-pragma">{-# LANGUAGE KindSignatures #-}</span><span>
8+</span><a name="line-8"></a><span class="hs-pragma">{-# LANGUAGE MultiParamTypeClasses #-}</span><span>
9+</span><a name="line-9"></a><span class="hs-pragma">{-# LANGUAGE NoStarIsType #-}</span><span>
10+</span><a name="line-10"></a><span class="hs-pragma">{-# LANGUAGE RankNTypes #-}</span><span>
11+</span><a name="line-11"></a><span class="hs-pragma">{-# LANGUAGE ScopedTypeVariables #-}</span><span>
12+</span><a name="line-12"></a><span class="hs-pragma">{-# LANGUAGE TypeApplications #-}</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.Type</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 &lt;https://github.com/bolt12/master-thesis my Msc Thesis&gt; 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 a newtype wrapper around 'Matrix.Type.Matrix' that</span><span>
31+</span><a name="line-31"></a><span class="hs-comment">-- uses arbitrary types instead of canonical data types for the matrices</span><span>
32+</span><a name="line-32"></a><span class="hs-comment">-- dimensions.</span><span>
33+</span><a name="line-33"></a><span class="hs-comment">--</span><span>
34+</span><a name="line-34"></a><span class="hs-comment">-- __NOTE__: If the types in the dimensions are custom they must need to</span><span>
35+</span><a name="line-35"></a><span class="hs-comment">-- implement a 'Generic' instance.</span><span>
36+</span><a name="line-36"></a><span class="hs-comment">--</span><span>
37+</span><a name="line-37"></a><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
38+</span><a name="line-38"></a><span>
39+</span><a name="line-39"></a><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">Matrix.Type</span><span>
40+</span><a name="line-40"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-comment">-- | LAoP (Linear Algebra of Programming) Inductive Matrix definition.</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">-- LAoP generalises relations and functions treating them as</span><span>
43+</span><a name="line-43"></a><span> </span><span class="hs-comment">-- Boolean matrices and in turn consider these as arrows.</span><span>
44+</span><a name="line-44"></a><span> </span><span class="hs-comment">-- This library offers many of the combinators mentioned in the work of</span><span>
45+</span><a name="line-45"></a><span> </span><span class="hs-comment">-- Macedo (2012) and Oliveira (2012).</span><span>
46+</span><a name="line-46"></a><span> </span><span class="hs-comment">--</span><span>
47+</span><a name="line-47"></a><span> </span><span class="hs-comment">-- This definition is a wrapper around 'Matrix.Type' but</span><span>
48+</span><a name="line-48"></a><span> </span><span class="hs-comment">-- dimensions are arbitrary data types. Type inference might not</span><span>
49+</span><a name="line-49"></a><span> </span><span class="hs-comment">-- be as desired.</span><span>
50+</span><a name="line-50"></a><span>
51+</span><a name="line-51"></a><span> </span><span class="hs-comment">-- __NOTE__: If the types in the dimensions are custom they must need to</span><span>
52+</span><a name="line-52"></a><span> </span><span class="hs-comment">-- implement a 'Generic' instance.</span><span>
53+</span><a name="line-53"></a><span> </span><span class="hs-comment">--</span><span>
54+</span><a name="line-54"></a><span>
55+</span><a name="line-55"></a><span> </span><span class="hs-comment">-- * Type safe matrix representation</span><span>
56+</span><a name="line-56"></a><span> </span><a href="Matrix.Type.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>
57+</span><a name="line-57"></a><span>
58+</span><a name="line-58"></a><span> </span><span class="hs-comment">-- * Type aliases</span><span>
59+</span><a name="line-59"></a><span> </span><a href="Matrix.Type.html#Zero"><span class="hs-identifier hs-type">Zero</span></a><span class="hs-special">,</span><span>
60+</span><a name="line-60"></a><span> </span><a href="Matrix.Type.html#One"><span class="hs-identifier hs-type">One</span></a><span class="hs-special">,</span><span>
61+</span><a name="line-61"></a><span>
62+</span><a name="line-62"></a><span> </span><span class="hs-comment">-- * Primitives</span><span>
63+</span><a name="line-63"></a><span> </span><a href="Matrix.Type.html#empty"><span class="hs-identifier hs-var">empty</span></a><span class="hs-special">,</span><span>
64+</span><a name="line-64"></a><span> </span><a href="Matrix.Type.html#one"><span class="hs-identifier hs-var">one</span></a><span class="hs-special">,</span><span>
65+</span><a name="line-65"></a><span> </span><a href="Matrix.Type.html#junc"><span class="hs-identifier hs-var">junc</span></a><span class="hs-special">,</span><span>
66+</span><a name="line-66"></a><span> </span><a href="Matrix.Type.html#split"><span class="hs-identifier hs-var">split</span></a><span class="hs-special">,</span><span>
67+</span><a name="line-67"></a><span>
68+</span><a name="line-68"></a><span> </span><span class="hs-comment">-- * Auxiliary type families</span><span>
69+</span><a name="line-69"></a><span> </span><a href="Matrix.Internal.html#FromNat"><span class="hs-identifier hs-type">I.FromNat</span></a><span class="hs-special">,</span><span>
70+</span><a name="line-70"></a><span> </span><a href="Matrix.Internal.html#Count"><span class="hs-identifier hs-type">I.Count</span></a><span class="hs-special">,</span><span>
71+</span><a name="line-71"></a><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span class="hs-special">,</span><span>
72+</span><a name="line-72"></a><span>
73+</span><a name="line-73"></a><span> </span><span class="hs-comment">-- * Matrix construction and conversion</span><span>
74+</span><a name="line-74"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span class="hs-special">,</span><span>
75+</span><a name="line-75"></a><span> </span><a href="Matrix.Type.html#fromLists"><span class="hs-identifier hs-var">fromLists</span></a><span class="hs-special">,</span><span>
76+</span><a name="line-76"></a><span> </span><a href="Matrix.Type.html#toLists"><span class="hs-identifier hs-var">toLists</span></a><span class="hs-special">,</span><span>
77+</span><a name="line-77"></a><span> </span><a href="Matrix.Type.html#toList"><span class="hs-identifier hs-var">toList</span></a><span class="hs-special">,</span><span>
78+</span><a name="line-78"></a><span> </span><a href="Matrix.Type.html#matrixBuilder"><span class="hs-identifier hs-var">matrixBuilder</span></a><span class="hs-special">,</span><span>
79+</span><a name="line-79"></a><span> </span><a href="Matrix.Type.html#row"><span class="hs-identifier hs-var">row</span></a><span class="hs-special">,</span><span>
80+</span><a name="line-80"></a><span> </span><a href="Matrix.Type.html#col"><span class="hs-identifier hs-var">col</span></a><span class="hs-special">,</span><span>
81+</span><a name="line-81"></a><span> </span><a href="Matrix.Type.html#zeros"><span class="hs-identifier hs-var">zeros</span></a><span class="hs-special">,</span><span>
82+</span><a name="line-82"></a><span> </span><a href="Matrix.Type.html#ones"><span class="hs-identifier hs-var">ones</span></a><span class="hs-special">,</span><span>
83+</span><a name="line-83"></a><span> </span><a href="Matrix.Type.html#bang"><span class="hs-identifier hs-var">bang</span></a><span class="hs-special">,</span><span>
84+</span><a name="line-84"></a><span> </span><a href="Matrix.Type.html#constant"><span class="hs-identifier hs-var">constant</span></a><span class="hs-special">,</span><span>
85+</span><a name="line-85"></a><span>
86+</span><a name="line-86"></a><span> </span><span class="hs-comment">-- * Functor instance equivalent function</span><span>
87+</span><a name="line-87"></a><span> </span><a href="Matrix.Type.html#fmapM"><span class="hs-identifier hs-var">fmapM</span></a><span class="hs-special">,</span><span>
88+</span><a name="line-88"></a><span>
89+</span><a name="line-89"></a><span> </span><span class="hs-comment">-- * Applicative/Monoidal instance equivalent functions</span><span>
90+</span><a name="line-90"></a><span> </span><a href="Matrix.Type.html#unitM"><span class="hs-identifier hs-var">unitM</span></a><span class="hs-special">,</span><span>
91+</span><a name="line-91"></a><span> </span><a href="Matrix.Type.html#multM"><span class="hs-identifier hs-var">multM</span></a><span class="hs-special">,</span><span>
92+</span><a name="line-92"></a><span>
93+</span><a name="line-93"></a><span> </span><span class="hs-comment">-- * Selective equivalent instance function</span><span>
94+</span><a name="line-94"></a><span> </span><a href="Matrix.Type.html#selectM"><span class="hs-identifier hs-var">selectM</span></a><span class="hs-special">,</span><span>
95+</span><a name="line-95"></a><span>
96+</span><a name="line-96"></a><span> </span><span class="hs-comment">-- * Monad equivalent instance function</span><span>
97+</span><a name="line-97"></a><span> </span><a href="Matrix.Type.html#returnM"><span class="hs-identifier hs-var">returnM</span></a><span class="hs-special">,</span><span>
98+</span><a name="line-98"></a><span> </span><a href="Matrix.Type.html#bindM"><span class="hs-identifier hs-var">bindM</span></a><span class="hs-special">,</span><span>
99+</span><a name="line-99"></a><span>
100+</span><a name="line-100"></a><span> </span><span class="hs-comment">-- * Misc</span><span>
101+</span><a name="line-101"></a><span> </span><span class="hs-comment">-- ** Get dimensions</span><span>
102+</span><a name="line-102"></a><span> </span><a href="Matrix.Type.html#columns"><span class="hs-identifier hs-var">columns</span></a><span class="hs-special">,</span><span>
103+</span><a name="line-103"></a><span> </span><a href="Matrix.Type.html#rows"><span class="hs-identifier hs-var">rows</span></a><span class="hs-special">,</span><span>
104+</span><a name="line-104"></a><span>
105+</span><a name="line-105"></a><span> </span><span class="hs-comment">-- ** Matrix Transposition</span><span>
106+</span><a name="line-106"></a><span> </span><a href="Matrix.Type.html#tr"><span class="hs-identifier hs-var">tr</span></a><span class="hs-special">,</span><span>
107+</span><a name="line-107"></a><span>
108+</span><a name="line-108"></a><span> </span><span class="hs-comment">-- ** McCarthy's Conditional</span><span>
109+</span><a name="line-109"></a><span> </span><a href="Matrix.Type.html#cond"><span class="hs-identifier hs-var">cond</span></a><span class="hs-special">,</span><span>
110+</span><a name="line-110"></a><span>
111+</span><a name="line-111"></a><span> </span><span class="hs-comment">-- ** Matrix &quot;abiding&quot;</span><span>
112+</span><a name="line-112"></a><span> </span><a href="Matrix.Type.html#abideJS"><span class="hs-identifier hs-var">abideJS</span></a><span class="hs-special">,</span><span>
113+</span><a name="line-113"></a><span> </span><a href="Matrix.Type.html#abideSJ"><span class="hs-identifier hs-var">abideSJ</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">-- * Biproduct approach</span><span>
116+</span><a name="line-116"></a><span> </span><span class="hs-comment">-- ** Split</span><span>
117+</span><a name="line-117"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#%3D%3D%3D"><span class="hs-operator hs-var">===</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
118+</span><a name="line-118"></a><span> </span><span class="hs-comment">-- *** Projections</span><span>
119+</span><a name="line-119"></a><span> </span><a href="Matrix.Type.html#p1"><span class="hs-identifier hs-var">p1</span></a><span class="hs-special">,</span><span>
120+</span><a name="line-120"></a><span> </span><a href="Matrix.Type.html#p2"><span class="hs-identifier hs-var">p2</span></a><span class="hs-special">,</span><span>
121+</span><a name="line-121"></a><span> </span><span class="hs-comment">-- ** Junc</span><span>
122+</span><a name="line-122"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#%7C%7C%7C"><span class="hs-operator hs-var">|||</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
123+</span><a name="line-123"></a><span> </span><span class="hs-comment">-- *** Injections</span><span>
124+</span><a name="line-124"></a><span> </span><a href="Matrix.Type.html#i1"><span class="hs-identifier hs-var">i1</span></a><span class="hs-special">,</span><span>
125+</span><a name="line-125"></a><span> </span><a href="Matrix.Type.html#i2"><span class="hs-identifier hs-var">i2</span></a><span class="hs-special">,</span><span>
126+</span><a name="line-126"></a><span> </span><span class="hs-comment">-- ** Bifunctors</span><span>
127+</span><a name="line-127"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#-%7C-"><span class="hs-operator hs-var">-|-</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
128+</span><a name="line-128"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#%3E%3C"><span class="hs-operator hs-var">&gt;&lt;</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
129+</span><a name="line-129"></a><span>
130+</span><a name="line-130"></a><span> </span><span class="hs-comment">-- ** Applicative matrix combinators</span><span>
131+</span><a name="line-131"></a><span>
132+</span><a name="line-132"></a><span> </span><span class="hs-comment">-- | Note that given the restrictions imposed it is not possible to</span><span>
133+</span><a name="line-133"></a><span> </span><span class="hs-comment">-- implement the standard type classes present in standard Haskell.</span><span>
134+</span><a name="line-134"></a><span> </span><span class="hs-comment">-- *** Matrix pairing projections</span><span>
135+</span><a name="line-135"></a><span> </span><a href="Matrix.Type.html#kp1"><span class="hs-identifier hs-var">kp1</span></a><span class="hs-special">,</span><span>
136+</span><a name="line-136"></a><span> </span><a href="Matrix.Type.html#kp2"><span class="hs-identifier hs-var">kp2</span></a><span class="hs-special">,</span><span>
137+</span><a name="line-137"></a><span>
138+</span><a name="line-138"></a><span> </span><span class="hs-comment">-- *** Matrix pairing</span><span>
139+</span><a name="line-139"></a><span> </span><a href="Matrix.Type.html#khatri"><span class="hs-identifier hs-var">khatri</span></a><span class="hs-special">,</span><span>
140+</span><a name="line-140"></a><span>
141+</span><a name="line-141"></a><span> </span><span class="hs-comment">-- * Matrix composition and lifting</span><span>
142+</span><a name="line-142"></a><span>
143+</span><a name="line-143"></a><span> </span><span class="hs-comment">-- ** Arrow matrix combinators</span><span>
144+</span><a name="line-144"></a><span>
145+</span><a name="line-145"></a><span> </span><span class="hs-comment">-- | Note that given the restrictions imposed it is not possible to</span><span>
146+</span><a name="line-146"></a><span> </span><span class="hs-comment">-- implement the standard type classes present in standard Haskell.</span><span>
147+</span><a name="line-147"></a><span> </span><a href="Matrix.Type.html#identity"><span class="hs-identifier hs-var">identity</span></a><span class="hs-special">,</span><span>
148+</span><a name="line-148"></a><span> </span><a href="Matrix.Type.html#comp"><span class="hs-identifier hs-var">comp</span></a><span class="hs-special">,</span><span>
149+</span><a name="line-149"></a><span> </span><a href="Matrix.Type.html#fromF"><span class="hs-identifier hs-var">fromF</span></a><span class="hs-special">,</span><span>
150+</span><a name="line-150"></a><span> </span><a href="Matrix.Type.html#fromF%27"><span class="hs-identifier hs-var">fromF'</span></a><span class="hs-special">,</span><span>
151+</span><a name="line-151"></a><span>
152+</span><a name="line-152"></a><span> </span><span class="hs-comment">-- * Matrix printing</span><span>
153+</span><a name="line-153"></a><span> </span><a href="Matrix.Type.html#pretty"><span class="hs-identifier hs-var">pretty</span></a><span class="hs-special">,</span><span>
154+</span><a name="line-154"></a><span> </span><a href="Matrix.Type.html#prettyPrint"><span class="hs-identifier hs-var">prettyPrint</span></a><span>
155+</span><a name="line-155"></a><span> </span><span class="hs-special">)</span><span>
156+</span><a name="line-156"></a><span class="hs-keyword">where</span><span>
157+</span><a name="line-157"></a><span>
158+</span><a name="line-158"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.Void</span><span>
159+</span><a name="line-159"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.Proxy</span><span>
160+</span><a name="line-160"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.Kind</span><span>
161+</span><a name="line-161"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">GHC.TypeLits</span><span>
162+</span><a name="line-162"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Control.DeepSeq</span><span>
163+</span><a name="line-163"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="hs-identifier">Control.Category</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">C</span><span>
164+</span><a name="line-164"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><a href="Matrix.Internal.html"><span class="hs-identifier">Matrix.Internal</span></a><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">I</span><span>
165+</span><a name="line-165"></a><span>
166+</span><a name="line-166"></a><span class="hs-keyword">newtype</span><span> </span><a name="Matrix"><a href="Matrix.Type.html#Matrix"><span class="hs-identifier">Matrix</span></a></a><span> </span><a name="local-6989586621679046459"><a href="#local-6989586621679046459"><span class="hs-identifier">e</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679046460"><a href="#local-6989586621679046460"><span class="hs-identifier">cols</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-special">(</span><a name="local-6989586621679046461"><a href="#local-6989586621679046461"><span class="hs-identifier">rows</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><a name="M"><a href="Matrix.Type.html#M"><span class="hs-identifier">M</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">I.Matrix</span></a><span> </span><a href="#local-6989586621679046459"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046460"><span class="hs-identifier hs-type">cols</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046461"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
167+</span><a name="line-167"></a><span> </span><span class="hs-keyword">deriving</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Show</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Num</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Eq</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Ord</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">NFData</span><span class="hs-special">)</span><span> </span><span class="hs-keyword">via</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Matrix"><span class="hs-identifier hs-type">I.Matrix</span></a><span> </span><a href="#local-6989586621679046459"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046460"><span class="hs-identifier hs-type">cols</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046461"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
168+</span><a name="line-168"></a><span>
169+</span><a name="line-169"></a><span class="hs-comment">-- | It isn't possible to implement the 'id' function so it's</span><span>
170+</span><a name="line-170"></a><span class="hs-comment">-- implementation is 'undefined'. However 'comp' can be and this partial</span><span>
171+</span><a name="line-171"></a><span class="hs-comment">-- class implementation exists just to make the code more readable.</span><span>
172+</span><a name="line-172"></a><span class="hs-comment">--</span><span>
173+</span><a name="line-173"></a><span class="hs-comment">-- Please use 'identity' instead.</span><span>
174+</span><a name="line-174"></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-6989586621679046462"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-identifier hs-type">C.Category</span><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046462"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
175+</span><a name="line-175"></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>
176+</span><a name="line-176"></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.Type.html#comp"><span class="hs-identifier hs-var">comp</span></a><span>
177+</span><a name="line-177"></a><span>
178+</span><a name="line-178"></a><span class="hs-comment">-- | Zero type alias</span><span>
179+</span><a name="line-179"></a><span class="hs-keyword">type</span><span> </span><a name="Zero"><a href="Matrix.Type.html#Zero"><span class="hs-identifier">Zero</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-type">Void</span><span>
180+</span><a name="line-180"></a><span>
181+</span><a name="line-181"></a><span class="hs-comment">-- | One type alias</span><span>
182+</span><a name="line-182"></a><span class="hs-keyword">type</span><span> </span><a name="One"><a href="Matrix.Type.html#One"><span class="hs-identifier">One</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
183+</span><a name="line-183"></a><span>
184+</span><a name="line-184"></a><span class="hs-comment">-- Primitives</span><span>
185+</span><a name="line-185"></a><span>
186+</span><a name="line-186"></a><span class="hs-comment">-- | Empty matrix constructor</span><span>
187+</span><a name="line-187"></a><span class="hs-identifier">empty</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046596"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="Matrix.Type.html#Zero"><span class="hs-identifier hs-type">Zero</span></a><span> </span><a href="Matrix.Type.html#Zero"><span class="hs-identifier hs-type">Zero</span></a><span>
188+</span><a name="line-188"></a><a name="empty"><a href="Matrix.Type.html#empty"><span class="hs-identifier">empty</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#Empty"><span class="hs-identifier hs-var">I.Empty</span></a><span>
189+</span><a name="line-189"></a><span>
190+</span><a name="line-190"></a><span class="hs-comment">-- | Unit matrix constructor</span><span>
191+</span><a name="line-191"></a><span class="hs-identifier">one</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="#local-6989586621679046595"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046595"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="Matrix.Type.html#One"><span class="hs-identifier hs-type">One</span></a><span> </span><a href="Matrix.Type.html#One"><span class="hs-identifier hs-type">One</span></a><span>
192+</span><a name="line-192"></a><a name="one"><a href="Matrix.Type.html#one"><span class="hs-identifier">one</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#One"><span class="hs-identifier hs-var">I.One</span></a><span>
193+</span><a name="line-193"></a><span>
194+</span><a name="line-194"></a><span class="hs-comment">-- | Matrix 'Junc' constructor</span><span>
195+</span><a name="line-195"></a><span class="hs-identifier">junc</span><span> </span><span class="hs-glyph">::</span><span>
196+</span><a name="line-196"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679046591"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046592"><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-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046591"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046592"><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">=&gt;</span><span>
197+</span><a name="line-197"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046593"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046591"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046594"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
198+</span><a name="line-198"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046593"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046592"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679046594"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
199+</span><a name="line-199"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046593"><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-6989586621679046591"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046592"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679046594"><span class="hs-identifier hs-type">rows</span></a><span>
200+</span><a name="line-200"></a><a name="junc"><a href="Matrix.Type.html#junc"><span class="hs-identifier">junc</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046597"><a href="#local-6989586621679046597"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046598"><a href="#local-6989586621679046598"><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.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Junc"><span class="hs-identifier hs-var">I.Junc</span></a><span> </span><a href="#local-6989586621679046597"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679046598"><span class="hs-identifier hs-var">b</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-keyword">infixl</span><span> </span><span class="hs-number">3</span><span> </span><a href="Matrix.Type.html#%7C%7C%7C"><span class="hs-operator hs-var">|||</span></a><span>
203+</span><a name="line-203"></a><span class="hs-comment">-- | Matrix 'Junc' constructor</span><span>
204+</span><a name="line-204"></a><span class="hs-special">(</span><span class="hs-operator">|||</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span>
205+</span><a name="line-205"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679046587"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046588"><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-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046587"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046588"><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">=&gt;</span><span>
206+</span><a name="line-206"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046589"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046587"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046590"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
207+</span><a name="line-207"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046589"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046588"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679046590"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
208+</span><a name="line-208"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046589"><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-6989586621679046587"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046588"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679046590"><span class="hs-identifier hs-type">rows</span></a><span>
209+</span><a name="line-209"></a><span class="hs-special">(</span><a name="%7C%7C%7C"><a href="Matrix.Type.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.Type.html#junc"><span class="hs-identifier hs-var">junc</span></a><span>
210+</span><a name="line-210"></a><span>
211+</span><a name="line-211"></a><span class="hs-comment">-- | Matrix 'Split' constructor</span><span>
212+</span><a name="line-212"></a><span class="hs-identifier">split</span><span> </span><span class="hs-glyph">::</span><span>
213+</span><a name="line-213"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679046583"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046584"><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-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046583"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046584"><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">=&gt;</span><span>
214+</span><a name="line-214"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046585"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046586"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046583"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
215+</span><a name="line-215"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046585"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046586"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046584"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
216+</span><a name="line-216"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046585"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046586"><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-6989586621679046583"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046584"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
217+</span><a name="line-217"></a><a name="split"><a href="Matrix.Type.html#split"><span class="hs-identifier">split</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046599"><a href="#local-6989586621679046599"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046600"><a href="#local-6989586621679046600"><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.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Split"><span class="hs-identifier hs-var">I.Split</span></a><span> </span><a href="#local-6989586621679046599"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679046600"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
218+</span><a name="line-218"></a><span>
219+</span><a name="line-219"></a><span class="hs-keyword">infixl</span><span> </span><span class="hs-number">2</span><span> </span><a href="Matrix.Type.html#%3D%3D%3D"><span class="hs-operator hs-var">===</span></a><span>
220+</span><a name="line-220"></a><span class="hs-comment">-- | Matrix 'Split' constructor</span><span>
221+</span><a name="line-221"></a><span class="hs-special">(</span><span class="hs-operator">===</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span>
222+</span><a name="line-222"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679046579"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046580"><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-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046579"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046580"><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">=&gt;</span><span>
223+</span><a name="line-223"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046581"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046582"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046579"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
224+</span><a name="line-224"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046581"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046582"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046580"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
225+</span><a name="line-225"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046581"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046582"><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-6989586621679046579"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046580"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
226+</span><a name="line-226"></a><span class="hs-special">(</span><a name="%3D%3D%3D"><a href="Matrix.Type.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.Type.html#split"><span class="hs-identifier hs-var">split</span></a><span>
227+</span><a name="line-227"></a><span>
228+</span><a name="line-228"></a><span class="hs-comment">-- Functor hierarchy</span><span>
229+</span><a name="line-229"></a><span>
230+</span><a name="line-230"></a><span class="hs-comment">-- | Functor instance equivalent function</span><span>
231+</span><a name="line-231"></a><span class="hs-identifier">fmapM</span><span> </span><span class="hs-glyph">::</span><span>
232+</span><a name="line-232"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679046575"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
233+</span><a name="line-233"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679046576"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
234+</span><a name="line-234"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679046575"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
235+</span><a name="line-235"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679046576"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
236+</span><a name="line-236"></a><span> </span><span class="hs-identifier hs-type">Eq</span><span> </span><a href="#local-6989586621679046576"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
237+</span><a name="line-237"></a><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046577"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
238+</span><a name="line-238"></a><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><a href="#local-6989586621679046577"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
239+</span><a name="line-239"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046575"><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>
240+</span><a name="line-240"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046576"><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>
241+</span><a name="line-241"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046577"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046576"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046575"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
242+</span><a name="line-242"></a><span> </span><span class="hs-special">)</span><span>
243+</span><a name="line-243"></a><span> </span><span class="hs-glyph">=&gt;</span><span>
244+</span><a name="line-244"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046575"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679046576"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046577"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046578"><span class="hs-identifier hs-type">c</span></a><span> </span><a href="#local-6989586621679046575"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046577"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046578"><span class="hs-identifier hs-type">c</span></a><span> </span><a href="#local-6989586621679046576"><span class="hs-identifier hs-type">b</span></a><span>
245+</span><a name="line-245"></a><a name="fmapM"><a href="Matrix.Type.html#fmapM"><span class="hs-identifier">fmapM</span></a></a><span> </span><a name="local-6989586621679046601"><a href="#local-6989586621679046601"><span class="hs-identifier">f</span></a></a><span> </span><a name="local-6989586621679046602"><a href="#local-6989586621679046602"><span class="hs-identifier">m</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#fromF%27"><span class="hs-identifier hs-var">fromF'</span></a><span> </span><a href="#local-6989586621679046601"><span class="hs-identifier hs-var">f</span></a><span> </span><span class="hs-special">`</span><a href="Matrix.Type.html#comp"><span class="hs-identifier hs-var">comp</span></a><span class="hs-special">`</span><span> </span><a href="#local-6989586621679046602"><span class="hs-identifier hs-var">m</span></a><span>
246+</span><a name="line-246"></a><span>
247+</span><a name="line-247"></a><span class="hs-comment">-- | Applicative instance equivalent 'unit' function,</span><span>
248+</span><a name="line-248"></a><span class="hs-identifier">unitM</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-6989586621679046574"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046574"><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>
249+</span><a name="line-249"></a><a name="unitM"><a href="Matrix.Type.html#unitM"><span class="hs-identifier">unitM</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#one"><span class="hs-identifier hs-var">one</span></a><span> </span><span class="hs-number">1</span><span>
250+</span><a name="line-250"></a><span>
251+</span><a name="line-251"></a><span class="hs-comment">-- | Applicative instance equivalent 'unit' function,</span><span>
252+</span><a name="line-252"></a><span class="hs-identifier">multM</span><span> </span><span class="hs-glyph">::</span><span>
253+</span><a name="line-253"></a><span> </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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046570"><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>
254+</span><a name="line-254"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046571"><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>
255+</span><a name="line-255"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046570"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046571"><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>
256+</span><a name="line-256"></a><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046572"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
257+</span><a name="line-257"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046572"><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">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046570"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046571"><span class="hs-identifier hs-type">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#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046570"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
258+</span><a name="line-258"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046572"><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">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046570"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046571"><span class="hs-identifier hs-type">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#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046571"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
259+</span><a name="line-259"></a><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046570"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046571"><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#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046570"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046571"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
260+</span><a name="line-260"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046572"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046573"><span class="hs-identifier hs-type">c</span></a><span> </span><a href="#local-6989586621679046570"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046572"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046573"><span class="hs-identifier hs-type">c</span></a><span> </span><a href="#local-6989586621679046571"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046572"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046573"><span class="hs-identifier hs-type">c</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046570"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046571"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
261+</span><a name="line-261"></a><a name="multM"><a href="Matrix.Type.html#multM"><span class="hs-identifier">multM</span></a></a><span> </span><a name="local-6989586621679046603"><a href="#local-6989586621679046603"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679046604"><a href="#local-6989586621679046604"><span class="hs-identifier">b</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#khatri"><span class="hs-identifier hs-var">khatri</span></a><span> </span><a href="#local-6989586621679046603"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679046604"><span class="hs-identifier hs-var">b</span></a><span>
262+</span><a name="line-262"></a><span>
263+</span><a name="line-263"></a><span>
264+</span><a name="line-264"></a><span class="hs-comment">-- | Monad instance equivalent 'return' function,</span><span>
265+</span><a name="line-265"></a><span class="hs-identifier">returnM</span><span> </span><span class="hs-glyph">::</span><span>
266+</span><a name="line-266"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679046568"><a href="#local-6989586621679046568"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679046569"><a href="#local-6989586621679046569"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-operator">.</span><span>
267+</span><a name="line-267"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046568"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
268+</span><a name="line-268"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679046568"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
269+</span><a name="line-269"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679046569"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
270+</span><a name="line-270"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046568"><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><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046569"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
271+</span><a name="line-271"></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">I.Count</span></a><span> </span><a href="#local-6989586621679046569"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
272+</span><a name="line-272"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="#local-6989586621679046569"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046568"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="Matrix.Type.html#One"><span class="hs-identifier hs-type">One</span></a><span> </span><a href="#local-6989586621679046569"><span class="hs-identifier hs-type">a</span></a><span>
273+</span><a name="line-273"></a><a name="returnM"><a href="Matrix.Type.html#returnM"><span class="hs-identifier">returnM</span></a></a><span> </span><a name="local-6989586621679046605"><a href="#local-6989586621679046605"><span class="hs-identifier">a</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#col"><span class="hs-identifier hs-var">col</span></a><span> </span><a href="#local-6989586621679046608"><span class="hs-identifier hs-var">l</span></a><span>
274+</span><a name="line-274"></a><span> </span><span class="hs-keyword">where</span><span>
275+</span><a name="line-275"></a><span> </span><a name="local-6989586621679046606"><a href="#local-6989586621679046606"><span class="hs-identifier">i</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">I.Count</span></a><span> </span><a href="#local-6989586621679046569"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
276+</span><a name="line-276"></a><span> </span><a name="local-6989586621679046607"><a href="#local-6989586621679046607"><span class="hs-identifier">x</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679046605"><span class="hs-identifier hs-var">a</span></a><span>
277+</span><a name="line-277"></a><span> </span><a name="local-6989586621679046608"><a href="#local-6989586621679046608"><span class="hs-identifier">l</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-6989586621679046607"><span class="hs-identifier hs-var">x</span></a><span> </span><span class="hs-special">[</span><span class="hs-number">0</span><span class="hs-special">,</span><span class="hs-number">0</span><span class="hs-glyph">..</span><span class="hs-special">]</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-special">[</span><span class="hs-number">1</span><span class="hs-special">]</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-identifier hs-var">take</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046606"><span class="hs-identifier hs-var">i</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679046607"><span class="hs-identifier hs-var">x</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-special">[</span><span class="hs-number">0</span><span class="hs-special">,</span><span class="hs-number">0</span><span class="hs-glyph">..</span><span class="hs-special">]</span><span>
278+</span><a name="line-278"></a><span>
279+</span><a name="line-279"></a><span class="hs-comment">-- | Monad instance equivalent '(&gt;&gt;=)' function,</span><span>
280+</span><a name="line-280"></a><span class="hs-identifier">bindM</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-6989586621679046564"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046564"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046565"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046566"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046564"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046566"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679046567"><span class="hs-identifier hs-type">c</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046564"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046565"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046567"><span class="hs-identifier hs-type">c</span></a><span>
281+</span><a name="line-281"></a><a name="bindM"><a href="Matrix.Type.html#bindM"><span class="hs-identifier">bindM</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">flip</span><span> </span><a href="Matrix.Type.html#comp"><span class="hs-identifier hs-var">comp</span></a><span>
282+</span><a name="line-282"></a><span>
283+</span><a name="line-283"></a><span class="hs-comment">-- Construction</span><span>
284+</span><a name="line-284"></a><span>
285+</span><a name="line-285"></a><span class="hs-comment">-- | Build a matrix out of a list of list of elements. Throws a runtime</span><span>
286+</span><a name="line-286"></a><span class="hs-comment">-- error if the dimensions do not match.</span><span>
287+</span><a name="line-287"></a><span class="hs-identifier">fromLists</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">I.FromLists</span></a><span> </span><a href="#local-6989586621679046561"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046562"><span class="hs-identifier hs-type">cols</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046563"><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">=&gt;</span><span> </span><span class="hs-special">[</span><span class="hs-special">[</span><a href="#local-6989586621679046561"><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">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046561"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046562"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046563"><span class="hs-identifier hs-type">rows</span></a><span>
288+</span><a name="line-288"></a><a name="fromLists"><a href="Matrix.Type.html#fromLists"><span class="hs-identifier">fromLists</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</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">I.fromLists</span></a><span>
289+</span><a name="line-289"></a><span>
290+</span><a name="line-290"></a><span class="hs-comment">-- | Matrix builder function. Constructs a matrix provided with</span><span>
291+</span><a name="line-291"></a><span class="hs-comment">-- a construction function.</span><span>
292+</span><a name="line-292"></a><span class="hs-identifier">matrixBuilder</span><span> </span><span class="hs-glyph">::</span><span>
293+</span><a name="line-293"></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046558"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046559"><span class="hs-identifier hs-type">cols</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046560"><span class="hs-identifier hs-type">rows</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046559"><span class="hs-identifier hs-type">cols</span></a><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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046560"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
294+</span><a name="line-294"></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">-&gt;</span><span> </span><a href="#local-6989586621679046558"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span>
295+</span><a name="line-295"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046558"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046559"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046560"><span class="hs-identifier hs-type">rows</span></a><span>
296+</span><a name="line-296"></a><a name="matrixBuilder"><a href="Matrix.Type.html#matrixBuilder"><span class="hs-identifier">matrixBuilder</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#matrixBuilder"><span class="hs-identifier hs-var">I.matrixBuilder</span></a><span>
297+</span><a name="line-297"></a><span>
298+</span><a name="line-298"></a><span class="hs-comment">-- | Constructs a column vector matrix</span><span>
299+</span><a name="line-299"></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">I.FromLists</span></a><span> </span><a href="#local-6989586621679046556"><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><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046557"><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">=&gt;</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679046556"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046556"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="Matrix.Type.html#One"><span class="hs-identifier hs-type">One</span></a><span> </span><a href="#local-6989586621679046557"><span class="hs-identifier hs-type">rows</span></a><span>
300+</span><a name="line-300"></a><a name="col"><a href="Matrix.Type.html#col"><span class="hs-identifier">col</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#col"><span class="hs-identifier hs-var">I.col</span></a><span>
301+</span><a name="line-301"></a><span>
302+</span><a name="line-302"></a><span class="hs-comment">-- | Constructs a row vector matrix</span><span>
303+</span><a name="line-303"></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">I.FromLists</span></a><span> </span><a href="#local-6989586621679046554"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046555"><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 class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679046554"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046554"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046555"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="Matrix.Type.html#One"><span class="hs-identifier hs-type">One</span></a><span>
304+</span><a name="line-304"></a><a name="row"><a href="Matrix.Type.html#row"><span class="hs-identifier">row</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#row"><span class="hs-identifier hs-var">I.row</span></a><span>
305+</span><a name="line-305"></a><span>
306+</span><a name="line-306"></a><span class="hs-comment">-- | Lifts functions to matrices with arbitrary dimensions.</span><span>
307+</span><a name="line-307"></a><span class="hs-comment">--</span><span>
308+</span><a name="line-308"></a><span class="hs-comment">-- NOTE: Be careful to not ask for a matrix bigger than the cardinality of</span><span>
309+</span><a name="line-309"></a><span class="hs-comment">-- types @a@ or @b@ allows.</span><span>
310+</span><a name="line-310"></a><span class="hs-identifier">fromF</span><span> </span><span class="hs-glyph">::</span><span>
311+</span><a name="line-311"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679046549"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
312+</span><a name="line-312"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679046550"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
313+</span><a name="line-313"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679046549"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
314+</span><a name="line-314"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679046550"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
315+</span><a name="line-315"></a><span> </span><span class="hs-identifier hs-type">Eq</span><span> </span><a href="#local-6989586621679046550"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
316+</span><a name="line-316"></a><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046551"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
317+</span><a name="line-317"></a><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><a href="#local-6989586621679046551"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
318+</span><a name="line-318"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046552"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
319+</span><a name="line-319"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046553"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
320+</span><a name="line-320"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046551"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046553"><span class="hs-identifier hs-type">rows</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046552"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span>
321+</span><a name="line-321"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
322+</span><a name="line-322"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046549"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679046550"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span>
323+</span><a name="line-323"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046551"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046552"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046553"><span class="hs-identifier hs-type">rows</span></a><span>
324+</span><a name="line-324"></a><a name="fromF"><a href="Matrix.Type.html#fromF"><span class="hs-identifier">fromF</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#fromF"><span class="hs-identifier hs-var">I.fromF</span></a><span>
325+</span><a name="line-325"></a><span>
326+</span><a name="line-326"></a><span class="hs-comment">-- | Lifts functions to matrices with dimensions matching @a@ and @b@</span><span>
327+</span><a name="line-327"></a><span class="hs-comment">-- cardinality's.</span><span>
328+</span><a name="line-328"></a><span class="hs-identifier">fromF'</span><span> </span><span class="hs-glyph">::</span><span>
329+</span><a name="line-329"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679046546"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
330+</span><a name="line-330"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679046547"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
331+</span><a name="line-331"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679046546"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
332+</span><a name="line-332"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679046547"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
333+</span><a name="line-333"></a><span> </span><span class="hs-identifier hs-type">Eq</span><span> </span><a href="#local-6989586621679046547"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
334+</span><a name="line-334"></a><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046548"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
335+</span><a name="line-335"></a><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><a href="#local-6989586621679046548"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
336+</span><a name="line-336"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046546"><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>
337+</span><a name="line-337"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046547"><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>
338+</span><a name="line-338"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046548"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046547"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046546"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
339+</span><a name="line-339"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
340+</span><a name="line-340"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046546"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679046547"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span>
341+</span><a name="line-341"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046548"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046546"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046547"><span class="hs-identifier hs-type">b</span></a><span>
342+</span><a name="line-342"></a><a name="fromF%27"><a href="Matrix.Type.html#fromF%27"><span class="hs-identifier">fromF'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#fromF%27"><span class="hs-identifier hs-var">I.fromF'</span></a><span>
343+</span><a name="line-343"></a><span>
344+</span><a name="line-344"></a><span class="hs-comment">-- Conversion</span><span>
345+</span><a name="line-345"></a><span>
346+</span><a name="line-346"></a><span class="hs-comment">-- | Converts a matrix to a list of lists of elements.</span><span>
347+</span><a name="line-347"></a><span class="hs-identifier">toLists</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046543"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046544"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046545"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="hs-special">[</span><a href="#local-6989586621679046543"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span class="hs-special">]</span><span>
348+</span><a name="line-348"></a><a name="toLists"><a href="Matrix.Type.html#toLists"><span class="hs-identifier">toLists</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046609"><a href="#local-6989586621679046609"><span class="hs-identifier">m</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">I.toLists</span></a><span> </span><a href="#local-6989586621679046609"><span class="hs-identifier hs-var">m</span></a><span>
349+</span><a name="line-349"></a><span>
350+</span><a name="line-350"></a><span class="hs-comment">-- | Converts a matrix to a list of elements.</span><span>
351+</span><a name="line-351"></a><span class="hs-identifier">toList</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046540"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046541"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046542"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679046540"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">]</span><span>
352+</span><a name="line-352"></a><a name="toList"><a href="Matrix.Type.html#toList"><span class="hs-identifier">toList</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046610"><a href="#local-6989586621679046610"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#toList"><span class="hs-identifier hs-var">I.toList</span></a><span> </span><a href="#local-6989586621679046610"><span class="hs-identifier hs-var">m</span></a><span>
353+</span><a name="line-353"></a><span>
354+</span><a name="line-354"></a><span class="hs-comment">-- Zeros Matrix</span><span>
355+</span><a name="line-355"></a><span>
356+</span><a name="line-356"></a><span class="hs-comment">-- | The zero matrix. A matrix wholly filled with zeros.</span><span>
357+</span><a name="line-357"></a><span class="hs-identifier">zeros</span><span> </span><span class="hs-glyph">::</span><span>
358+</span><a name="line-358"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046537"><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">I.FromLists</span></a><span> </span><a href="#local-6989586621679046537"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046538"><span class="hs-identifier hs-type">cols</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046539"><span class="hs-identifier hs-type">rows</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046538"><span class="hs-identifier hs-type">cols</span></a><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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046539"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
359+</span><a name="line-359"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046537"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046538"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046539"><span class="hs-identifier hs-type">rows</span></a><span>
360+</span><a name="line-360"></a><a name="zeros"><a href="Matrix.Type.html#zeros"><span class="hs-identifier">zeros</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#zeros"><span class="hs-identifier hs-var">I.zeros</span></a><span>
361+</span><a name="line-361"></a><span>
362+</span><a name="line-362"></a><span class="hs-comment">-- Ones Matrix</span><span>
363+</span><a name="line-363"></a><span>
364+</span><a name="line-364"></a><span class="hs-comment">-- | The ones matrix. A matrix wholly filled with ones.</span><span>
365+</span><a name="line-365"></a><span class="hs-comment">--</span><span>
366+</span><a name="line-366"></a><span class="hs-comment">-- Also known as T (Top) matrix.</span><span>
367+</span><a name="line-367"></a><span class="hs-identifier">ones</span><span> </span><span class="hs-glyph">::</span><span>
368+</span><a name="line-368"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046534"><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">I.FromLists</span></a><span> </span><a href="#local-6989586621679046534"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046535"><span class="hs-identifier hs-type">cols</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046536"><span class="hs-identifier hs-type">rows</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046535"><span class="hs-identifier hs-type">cols</span></a><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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046536"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
369+</span><a name="line-369"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046534"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046535"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046536"><span class="hs-identifier hs-type">rows</span></a><span>
370+</span><a name="line-370"></a><a name="ones"><a href="Matrix.Type.html#ones"><span class="hs-identifier">ones</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#ones"><span class="hs-identifier hs-var">I.ones</span></a><span>
371+</span><a name="line-371"></a><span>
372+</span><a name="line-372"></a><span class="hs-comment">-- Const Matrix</span><span>
373+</span><a name="line-373"></a><span>
374+</span><a name="line-374"></a><span class="hs-comment">-- | The constant matrix constructor. A matrix wholly filled with a given</span><span>
375+</span><a name="line-375"></a><span class="hs-comment">-- value.</span><span>
376+</span><a name="line-376"></a><span class="hs-identifier">constant</span><span> </span><span class="hs-glyph">::</span><span>
377+</span><a name="line-377"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046531"><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">I.FromLists</span></a><span> </span><a href="#local-6989586621679046531"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046532"><span class="hs-identifier hs-type">cols</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046533"><span class="hs-identifier hs-type">rows</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046532"><span class="hs-identifier hs-type">cols</span></a><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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046533"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
378+</span><a name="line-378"></a><span> </span><a href="#local-6989586621679046531"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
379+</span><a name="line-379"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046531"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046532"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046533"><span class="hs-identifier hs-type">rows</span></a><span>
380+</span><a name="line-380"></a><a name="constant"><a href="Matrix.Type.html#constant"><span class="hs-identifier">constant</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Matrix.Internal.html#constant"><span class="hs-identifier hs-var">I.constant</span></a><span>
381+</span><a name="line-381"></a><span>
382+</span><a name="line-382"></a><span class="hs-comment">-- Bang Matrix</span><span>
383+</span><a name="line-383"></a><span>
384+</span><a name="line-384"></a><span class="hs-comment">-- | The T (Top) row vector matrix.</span><span>
385+</span><a name="line-385"></a><span class="hs-identifier">bang</span><span> </span><span class="hs-glyph">::</span><span>
386+</span><a name="line-386"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679046529"><a href="#local-6989586621679046529"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679046530"><a href="#local-6989586621679046530"><span class="hs-identifier">cols</span></a></a><span class="hs-operator">.</span><span>
387+</span><a name="line-387"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046529"><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-6989586621679046529"><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">I.FromLists</span></a><span> </span><a href="#local-6989586621679046529"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046530"><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 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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046530"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
388+</span><a name="line-388"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046529"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046530"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="Matrix.Type.html#One"><span class="hs-identifier hs-type">One</span></a><span>
389+</span><a name="line-389"></a><a name="bang"><a href="Matrix.Type.html#bang"><span class="hs-identifier">bang</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#bang"><span class="hs-identifier hs-var">I.bang</span></a><span>
390+</span><a name="line-390"></a><span>
391+</span><a name="line-391"></a><span class="hs-comment">-- Identity Matrix</span><span>
392+</span><a name="line-392"></a><span>
393+</span><a name="line-393"></a><span class="hs-comment">-- | Identity matrix</span><span>
394+</span><a name="line-394"></a><span class="hs-identifier">identity</span><span> </span><span class="hs-glyph">::</span><span>
395+</span><a name="line-395"></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046527"><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">I.FromLists</span></a><span> </span><a href="#local-6989586621679046527"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046528"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046528"><span class="hs-identifier hs-type">a</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046528"><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> </span><span class="hs-glyph">=&gt;</span><span>
396+</span><a name="line-396"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046527"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046528"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046528"><span class="hs-identifier hs-type">a</span></a><span>
397+</span><a name="line-397"></a><a name="identity"><a href="Matrix.Type.html#identity"><span class="hs-identifier">identity</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#identity"><span class="hs-identifier hs-var">I.identity</span></a><span>
398+</span><a name="line-398"></a><span>
399+</span><a name="line-399"></a><span class="hs-comment">-- Matrix composition (MMM)</span><span>
400+</span><a name="line-400"></a><span>
401+</span><a name="line-401"></a><span class="hs-comment">-- | Matrix composition. Equivalent to matrix-matrix multiplication.</span><span>
402+</span><a name="line-402"></a><span class="hs-comment">--</span><span>
403+</span><a name="line-403"></a><span class="hs-comment">-- This definition takes advantage of divide-and-conquer and fusion laws</span><span>
404+</span><a name="line-404"></a><span class="hs-comment">-- from LAoP.</span><span>
405+</span><a name="line-405"></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-6989586621679046523"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046523"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046524"><span class="hs-identifier hs-type">cr</span></a><span> </span><a href="#local-6989586621679046525"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046523"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046526"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046524"><span class="hs-identifier hs-type">cr</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046523"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046526"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046525"><span class="hs-identifier hs-type">rows</span></a><span>
406+</span><a name="line-406"></a><a name="comp"><a href="Matrix.Type.html#comp"><span class="hs-identifier">comp</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046611"><a href="#local-6989586621679046611"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046612"><a href="#local-6989586621679046612"><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.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#comp"><span class="hs-identifier hs-var">I.comp</span></a><span> </span><a href="#local-6989586621679046611"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679046612"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
407+</span><a name="line-407"></a><span>
408+</span><a name="line-408"></a><span class="hs-comment">-- | Biproduct first component projection</span><span>
409+</span><a name="line-409"></a><span class="hs-identifier">p1</span><span> </span><span class="hs-glyph">::</span><span>
410+</span><a name="line-410"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046520"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
411+</span><a name="line-411"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046521"><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>
412+</span><a name="line-412"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046522"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
413+</span><a name="line-413"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046520"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046521"><span class="hs-identifier hs-type">n</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046522"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
414+</span><a name="line-414"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046520"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046522"><span class="hs-identifier hs-type">m</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046522"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
415+</span><a name="line-415"></a><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679046522"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679046521"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><span class="hs-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046522"><span class="hs-identifier hs-type">m</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046521"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span>
416+</span><a name="line-416"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
417+</span><a name="line-417"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046520"><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-6989586621679046522"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679046521"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679046522"><span class="hs-identifier hs-type">m</span></a><span>
418+</span><a name="line-418"></a><a name="p1"><a href="Matrix.Type.html#p1"><span class="hs-identifier">p1</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#p1"><span class="hs-identifier hs-var">I.p1</span></a><span>
419+</span><a name="line-419"></a><span>
420+</span><a name="line-420"></a><span class="hs-comment">-- | Biproduct second component projection</span><span>
421+</span><a name="line-421"></a><span class="hs-identifier">p2</span><span> </span><span class="hs-glyph">::</span><span>
422+</span><a name="line-422"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046517"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
423+</span><a name="line-423"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046518"><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>
424+</span><a name="line-424"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046519"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
425+</span><a name="line-425"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046517"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046519"><span class="hs-identifier hs-type">m</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046518"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
426+</span><a name="line-426"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046517"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046518"><span class="hs-identifier hs-type">n</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046518"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
427+</span><a name="line-427"></a><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679046519"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679046518"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><span class="hs-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046519"><span class="hs-identifier hs-type">m</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046518"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span>
428+</span><a name="line-428"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
429+</span><a name="line-429"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046517"><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-6989586621679046519"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679046518"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679046518"><span class="hs-identifier hs-type">n</span></a><span>
430+</span><a name="line-430"></a><a name="p2"><a href="Matrix.Type.html#p2"><span class="hs-identifier">p2</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a href="Matrix.Internal.html#p2"><span class="hs-identifier hs-var">I.p2</span></a><span>
431+</span><a name="line-431"></a><span>
432+</span><a name="line-432"></a><span class="hs-comment">-- Injections</span><span>
433+</span><a name="line-433"></a><span>
434+</span><a name="line-434"></a><span class="hs-comment">-- | Biproduct first component injection</span><span>
435+</span><a name="line-435"></a><span class="hs-identifier">i1</span><span> </span><span class="hs-glyph">::</span><span>
436+</span><a name="line-436"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046514"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
437+</span><a name="line-437"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046515"><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>
438+</span><a name="line-438"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046516"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
439+</span><a name="line-439"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046514"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046515"><span class="hs-identifier hs-type">n</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046516"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
440+</span><a name="line-440"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046514"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046516"><span class="hs-identifier hs-type">m</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046516"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
441+</span><a name="line-441"></a><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679046516"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679046515"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><span class="hs-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046516"><span class="hs-identifier hs-type">m</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046515"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span>
442+</span><a name="line-442"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
443+</span><a name="line-443"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046514"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046516"><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-6989586621679046516"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679046515"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span>
444+</span><a name="line-444"></a><a name="i1"><a href="Matrix.Type.html#i1"><span class="hs-identifier">i1</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="Matrix.Type.html#p1"><span class="hs-identifier hs-var">p1</span></a><span>
445+</span><a name="line-445"></a><span>
446+</span><a name="line-446"></a><span class="hs-comment">-- | Biproduct second component injection</span><span>
447+</span><a name="line-447"></a><span class="hs-identifier">i2</span><span> </span><span class="hs-glyph">::</span><span>
448+</span><a name="line-448"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046511"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
449+</span><a name="line-449"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046512"><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>
450+</span><a name="line-450"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046513"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
451+</span><a name="line-451"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046511"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046513"><span class="hs-identifier hs-type">m</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046512"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
452+</span><a name="line-452"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046511"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046512"><span class="hs-identifier hs-type">n</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046512"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
453+</span><a name="line-453"></a><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679046513"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679046512"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><span class="hs-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046513"><span class="hs-identifier hs-type">m</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046512"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span>
454+</span><a name="line-454"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
455+</span><a name="line-455"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046511"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046512"><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-6989586621679046513"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679046512"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span>
456+</span><a name="line-456"></a><a name="i2"><a href="Matrix.Type.html#i2"><span class="hs-identifier">i2</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="Matrix.Type.html#p2"><span class="hs-identifier hs-var">p2</span></a><span>
457+</span><a name="line-457"></a><span>
458+</span><a name="line-458"></a><span class="hs-comment">-- Dimensions</span><span>
459+</span><a name="line-459"></a><span>
460+</span><a name="line-460"></a><span class="hs-comment">-- | Obtain the number of rows.</span><span>
461+</span><a name="line-461"></a><span class="hs-comment">--</span><span>
462+</span><a name="line-462"></a><span class="hs-comment">-- NOTE: The 'KnownNat' constaint is needed in order to obtain the</span><span>
463+</span><a name="line-463"></a><span class="hs-comment">-- dimensions in constant time.</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">-- TODO: A 'rows' function that does not need the 'KnownNat' constraint in</span><span>
466+</span><a name="line-466"></a><span class="hs-comment">-- exchange for performance.</span><span>
467+</span><a name="line-467"></a><span class="hs-identifier">rows</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046508"><span class="hs-identifier hs-type">rows</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046509"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046510"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046508"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Int</span><span>
468+</span><a name="line-468"></a><a name="rows"><a href="Matrix.Type.html#rows"><span class="hs-identifier">rows</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046613"><a href="#local-6989586621679046613"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#rows"><span class="hs-identifier hs-var">I.rows</span></a><span> </span><a href="#local-6989586621679046613"><span class="hs-identifier hs-var">m</span></a><span>
469+</span><a name="line-469"></a><span>
470+</span><a name="line-470"></a><span class="hs-comment">-- | Obtain the number of columns.</span><span>
471+</span><a name="line-471"></a><span class="hs-comment">-- </span><span>
472+</span><a name="line-472"></a><span class="hs-comment">-- NOTE: The 'KnownNat' constaint is needed in order to obtain the</span><span>
473+</span><a name="line-473"></a><span class="hs-comment">-- dimensions in constant time.</span><span>
474+</span><a name="line-474"></a><span class="hs-comment">--</span><span>
475+</span><a name="line-475"></a><span class="hs-comment">-- TODO: A 'columns' function that does not need the 'KnownNat' constraint in</span><span>
476+</span><a name="line-476"></a><span class="hs-comment">-- exchange for performance.</span><span>
477+</span><a name="line-477"></a><span class="hs-identifier">columns</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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046505"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046506"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046505"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046507"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Int</span><span>
478+</span><a name="line-478"></a><a name="columns"><a href="Matrix.Type.html#columns"><span class="hs-identifier">columns</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046614"><a href="#local-6989586621679046614"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#columns"><span class="hs-identifier hs-var">I.columns</span></a><span> </span><a href="#local-6989586621679046614"><span class="hs-identifier hs-var">m</span></a><span>
479+</span><a name="line-479"></a><span>
480+</span><a name="line-480"></a><span class="hs-comment">-- Coproduct Bifunctor</span><span>
481+</span><a name="line-481"></a><span>
482+</span><a name="line-482"></a><span class="hs-keyword">infixl</span><span> </span><span class="hs-number">5</span><span> </span><a href="Matrix.Type.html#-%7C-"><span class="hs-operator hs-var">-|-</span></a><span>
483+</span><a name="line-483"></a><span>
484+</span><a name="line-484"></a><span class="hs-comment">-- | Matrix coproduct functor also known as matrix direct sum.</span><span>
485+</span><a name="line-485"></a><span class="hs-special">(</span><span class="hs-operator">-|-</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span>
486+</span><a name="line-486"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046500"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
487+</span><a name="line-487"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046501"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
488+</span><a name="line-488"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046502"><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>
489+</span><a name="line-489"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046500"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046502"><span class="hs-identifier hs-type">k</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046502"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
490+</span><a name="line-490"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046500"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046501"><span class="hs-identifier hs-type">j</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046502"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
491+</span><a name="line-491"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046500"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046502"><span class="hs-identifier hs-type">k</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046501"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
492+</span><a name="line-492"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046500"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046501"><span class="hs-identifier hs-type">j</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046501"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
493+</span><a name="line-493"></a><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679046503"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679046504"><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-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046503"><span class="hs-identifier hs-type">n</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046504"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
494+</span><a name="line-494"></a><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679046502"><span class="hs-identifier hs-type">k</span></a><span> </span><a href="#local-6989586621679046501"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><span class="hs-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046502"><span class="hs-identifier hs-type">k</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046501"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span>
495+</span><a name="line-495"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
496+</span><a name="line-496"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046500"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046503"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679046502"><span class="hs-identifier hs-type">k</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
497+</span><a name="line-497"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046500"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046504"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679046501"><span class="hs-identifier hs-type">j</span></a><span> </span><span class="hs-glyph">-&gt;</span><span>
498+</span><a name="line-498"></a><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046500"><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-6989586621679046503"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679046504"><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-6989586621679046502"><span class="hs-identifier hs-type">k</span></a><span> </span><a href="#local-6989586621679046501"><span class="hs-identifier hs-type">j</span></a><span class="hs-special">)</span><span>
499+</span><a name="line-499"></a><span class="hs-special">(</span><a name="-%7C-"><a href="Matrix.Type.html#-%7C-"><span class="hs-operator">-|-</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046615"><a href="#local-6989586621679046615"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046616"><a href="#local-6989586621679046616"><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.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><a href="Matrix.Internal.html#-%7C-"><span class="hs-operator hs-var">I.-|-</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679046615"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679046616"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
500+</span><a name="line-500"></a><span>
501+</span><a name="line-501"></a><span class="hs-comment">-- Khatri Rao Product and projections</span><span>
502+</span><a name="line-502"></a><span>
503+</span><a name="line-503"></a><span class="hs-comment">-- | Khatri Rao product first component projection matrix.</span><span>
504+</span><a name="line-504"></a><span class="hs-identifier">kp1</span><span> </span><span class="hs-glyph">::</span><span>
505+</span><a name="line-505"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679046497"><a href="#local-6989586621679046497"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679046498"><a href="#local-6989586621679046498"><span class="hs-identifier">m</span></a></a><span> </span><a name="local-6989586621679046499"><a href="#local-6989586621679046499"><span class="hs-identifier">k</span></a></a><span> </span><span class="hs-operator">.</span><span>
506+</span><a name="line-506"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046497"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
507+</span><a name="line-507"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046498"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
508+</span><a name="line-508"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046499"><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>
509+</span><a name="line-509"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046498"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046499"><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 class="hs-special">,</span><span>
510+</span><a name="line-510"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046497"><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">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046498"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046499"><span class="hs-identifier hs-type">k</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046498"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
511+</span><a name="line-511"></a><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046498"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046499"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046498"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046499"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span>
512+</span><a name="line-512"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046497"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046498"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046499"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679046498"><span class="hs-identifier hs-type">m</span></a><span>
513+</span><a name="line-513"></a><a name="kp1"><a href="Matrix.Type.html#kp1"><span class="hs-identifier">kp1</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#kp1"><span class="hs-identifier hs-var">I.kp1</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046497"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046498"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046499"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
514+</span><a name="line-514"></a><span>
515+</span><a name="line-515"></a><span class="hs-comment">-- | Khatri Rao product second component projection matrix.</span><span>
516+</span><a name="line-516"></a><span class="hs-identifier">kp2</span><span> </span><span class="hs-glyph">::</span><span>
517+</span><a name="line-517"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679046494"><a href="#local-6989586621679046494"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679046495"><a href="#local-6989586621679046495"><span class="hs-identifier">m</span></a></a><span> </span><a name="local-6989586621679046496"><a href="#local-6989586621679046496"><span class="hs-identifier">k</span></a></a><span class="hs-operator">.</span><span>
518+</span><a name="line-518"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046494"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
519+</span><a name="line-519"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046496"><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>
520+</span><a name="line-520"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046495"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
521+</span><a name="line-521"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046495"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046496"><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 class="hs-special">,</span><span>
522+</span><a name="line-522"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046494"><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">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046495"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046496"><span class="hs-identifier hs-type">k</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046496"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
523+</span><a name="line-523"></a><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046495"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046496"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046495"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046496"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span>
524+</span><a name="line-524"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046494"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046495"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046496"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679046496"><span class="hs-identifier hs-type">k</span></a><span>
525+</span><a name="line-525"></a><a name="kp2"><a href="Matrix.Type.html#kp2"><span class="hs-identifier">kp2</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#kp2"><span class="hs-identifier hs-var">I.kp2</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046494"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046495"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">@</span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046496"><span class="hs-identifier hs-type">k</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
526+</span><a name="line-526"></a><span>
527+</span><a name="line-527"></a><span class="hs-comment">-- | Khatri Rao Matrix product also known as matrix pairing.</span><span>
528+</span><a name="line-528"></a><span class="hs-comment">--</span><span>
529+</span><a name="line-529"></a><span class="hs-comment">-- NOTE: That this is not a true categorical product, see for instance:</span><span>
530+</span><a name="line-530"></a><span class="hs-comment">-- </span><span>
531+</span><a name="line-531"></a><span class="hs-comment">-- @</span><span>
532+</span><a name="line-532"></a><span class="hs-comment">-- | kp1 `comp` khatri a b == a </span><span>
533+</span><a name="line-533"></a><span class="hs-comment">-- khatri a b ==&gt; |</span><span>
534+</span><a name="line-534"></a><span class="hs-comment">-- | kp2 `comp` khatri a b == b</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">--</span><span>
537+</span><a name="line-537"></a><span class="hs-comment">-- __Emphasis__ on the implication symbol.</span><span>
538+</span><a name="line-538"></a><span class="hs-identifier">khatri</span><span> </span><span class="hs-glyph">::</span><span>
539+</span><a name="line-539"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679046490"><a href="#local-6989586621679046490"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679046491"><a href="#local-6989586621679046491"><span class="hs-identifier">cols</span></a></a><span> </span><a name="local-6989586621679046492"><a href="#local-6989586621679046492"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679046493"><a href="#local-6989586621679046493"><span class="hs-identifier">b</span></a></a><span class="hs-operator">.</span><span>
540+</span><a name="line-540"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046490"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
541+</span><a name="line-541"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046492"><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>
542+</span><a name="line-542"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046493"><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>
543+</span><a name="line-543"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046492"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046493"><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>
544+</span><a name="line-544"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046490"><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">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046492"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046493"><span class="hs-identifier hs-type">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#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046492"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
545+</span><a name="line-545"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046490"><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">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046492"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046493"><span class="hs-identifier hs-type">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#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046493"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
546+</span><a name="line-546"></a><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046492"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046493"><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#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046492"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046493"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
547+</span><a name="line-547"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046490"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046491"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046492"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046490"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046491"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046493"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046490"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046491"><span class="hs-identifier hs-type">cols</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046492"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046493"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
548+</span><a name="line-548"></a><a name="khatri"><a href="Matrix.Type.html#khatri"><span class="hs-identifier">khatri</span></a></a><span> </span><a name="local-6989586621679046617"><a href="#local-6989586621679046617"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679046618"><a href="#local-6989586621679046618"><span class="hs-identifier">b</span></a></a><span> </span><span class="hs-glyph">=</span><span>
549+</span><a name="line-549"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679046619"><a href="#local-6989586621679046619"><span class="hs-identifier">kp1'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#kp1"><span class="hs-identifier hs-var">kp1</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046490"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046492"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046493"><span class="hs-identifier hs-type">b</span></a><span>
550+</span><a name="line-550"></a><span> </span><a name="local-6989586621679046620"><a href="#local-6989586621679046620"><span class="hs-identifier">kp2'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#kp2"><span class="hs-identifier hs-var">kp2</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046490"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046492"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046493"><span class="hs-identifier hs-type">b</span></a><span>
551+</span><a name="line-551"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Type.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="#local-6989586621679046619"><span class="hs-identifier hs-var">kp1'</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679046617"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="Matrix.Type.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#tr"><span class="hs-identifier hs-var">tr</span></a><span> </span><a href="#local-6989586621679046620"><span class="hs-identifier hs-var">kp2'</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679046618"><span class="hs-identifier hs-var">b</span></a><span>
552+</span><a name="line-552"></a><span>
553+</span><a name="line-553"></a><span class="hs-comment">-- Product Bifunctor (Kronecker)</span><span>
554+</span><a name="line-554"></a><span>
555+</span><a name="line-555"></a><span class="hs-keyword">infixl</span><span> </span><span class="hs-number">4</span><span> </span><a href="Matrix.Type.html#%3E%3C"><span class="hs-operator hs-var">&gt;&lt;</span></a><span>
556+</span><a name="line-556"></a><span>
557+</span><a name="line-557"></a><span class="hs-comment">-- | Matrix product functor also known as kronecker product</span><span>
558+</span><a name="line-558"></a><span class="hs-special">(</span><span class="hs-operator">&gt;&lt;</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">::</span><span>
559+</span><a name="line-559"></a><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679046485"><a href="#local-6989586621679046485"><span class="hs-identifier">e</span></a></a><span> </span><a name="local-6989586621679046486"><a href="#local-6989586621679046486"><span class="hs-identifier">m</span></a></a><span> </span><a name="local-6989586621679046487"><a href="#local-6989586621679046487"><span class="hs-identifier">p</span></a></a><span> </span><a name="local-6989586621679046488"><a href="#local-6989586621679046488"><span class="hs-identifier">n</span></a></a><span> </span><a name="local-6989586621679046489"><a href="#local-6989586621679046489"><span class="hs-identifier">q</span></a></a><span class="hs-operator">.</span><span>
560+</span><a name="line-560"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046485"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
561+</span><a name="line-561"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046486"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
562+</span><a name="line-562"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046488"><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>
563+</span><a name="line-563"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046487"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
564+</span><a name="line-564"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046489"><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>
565+</span><a name="line-565"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046486"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046488"><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>
566+</span><a name="line-566"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046487"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046489"><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>
567+</span><a name="line-567"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046485"><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">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046486"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046488"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046486"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
568+</span><a name="line-568"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046485"><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">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046486"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046488"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046488"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
569+</span><a name="line-569"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046485"><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">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046487"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046489"><span class="hs-identifier hs-type">q</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046487"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
570+</span><a name="line-570"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046485"><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">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046487"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046489"><span class="hs-identifier hs-type">q</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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046489"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
571+</span><a name="line-571"></a><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046486"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046488"><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#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046486"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046488"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
572+</span><a name="line-572"></a><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046487"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046489"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046487"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">,</span><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046489"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span>
573+</span><a name="line-573"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046485"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046486"><span class="hs-identifier hs-type">m</span></a><span> </span><a href="#local-6989586621679046487"><span class="hs-identifier hs-type">p</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046485"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046488"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679046489"><span class="hs-identifier hs-type">q</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046485"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046486"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046488"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046487"><span class="hs-identifier hs-type">p</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679046489"><span class="hs-identifier hs-type">q</span></a><span class="hs-special">)</span><span>
574+</span><a name="line-574"></a><span class="hs-special">(</span><a name="%3E%3C"><a href="Matrix.Type.html#%3E%3C"><span class="hs-operator">&gt;&lt;</span></a></a><span class="hs-special">)</span><span> </span><a name="local-6989586621679046621"><a href="#local-6989586621679046621"><span class="hs-identifier">a</span></a></a><span> </span><a name="local-6989586621679046622"><a href="#local-6989586621679046622"><span class="hs-identifier">b</span></a></a><span> </span><span class="hs-glyph">=</span><span>
575+</span><a name="line-575"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679046623"><a href="#local-6989586621679046623"><span class="hs-identifier">kp1'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#kp1"><span class="hs-identifier hs-var">kp1</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046485"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046486"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046488"><span class="hs-identifier hs-type">n</span></a><span>
576+</span><a name="line-576"></a><span> </span><a name="local-6989586621679046624"><a href="#local-6989586621679046624"><span class="hs-identifier">kp2'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#kp2"><span class="hs-identifier hs-var">kp2</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046485"><span class="hs-identifier hs-type">e</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046486"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679046488"><span class="hs-identifier hs-type">n</span></a><span>
577+</span><a name="line-577"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Matrix.Type.html#khatri"><span class="hs-identifier hs-var">khatri</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><a href="#local-6989586621679046621"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679046623"><span class="hs-identifier hs-var">kp1'</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#comp"><span class="hs-identifier hs-var">comp</span></a><span> </span><a href="#local-6989586621679046622"><span class="hs-identifier hs-var">b</span></a><span> </span><a href="#local-6989586621679046624"><span class="hs-identifier hs-var">kp2'</span></a><span class="hs-special">)</span><span>
578+</span><a name="line-578"></a><span>
579+</span><a name="line-579"></a><span class="hs-comment">-- Matrix abide Junc Split</span><span>
580+</span><a name="line-580"></a><span>
581+</span><a name="line-581"></a><span class="hs-comment">-- | Matrix &quot;abiding&quot; followin the 'Junc'-'Split' abide law.</span><span>
582+</span><a name="line-582"></a><span class="hs-comment">-- </span><span>
583+</span><a name="line-583"></a><span class="hs-comment">-- Law:</span><span>
584+</span><a name="line-584"></a><span class="hs-comment">--</span><span>
585+</span><a name="line-585"></a><span class="hs-comment">-- @</span><span>
586+</span><a name="line-586"></a><span class="hs-comment">-- 'Junc' ('Split' a c) ('Split' b d) == 'Split' ('Junc' a b) ('Junc' c d)</span><span>
587+</span><a name="line-587"></a><span class="hs-comment">-- @</span><span>
588+</span><a name="line-588"></a><span class="hs-identifier">abideJS</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046482"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046483"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046484"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046482"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046483"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046484"><span class="hs-identifier hs-type">rows</span></a><span>
589+</span><a name="line-589"></a><a name="abideJS"><a href="Matrix.Type.html#abideJS"><span class="hs-identifier">abideJS</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046625"><a href="#local-6989586621679046625"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideJS"><span class="hs-identifier hs-var">I.abideJS</span></a><span> </span><a href="#local-6989586621679046625"><span class="hs-identifier hs-var">m</span></a><span class="hs-special">)</span><span>
590+</span><a name="line-590"></a><span>
591+</span><a name="line-591"></a><span class="hs-comment">-- Matrix abide Split Junc</span><span>
592+</span><a name="line-592"></a><span>
593+</span><a name="line-593"></a><span class="hs-comment">-- | Matrix &quot;abiding&quot; followin the 'Split'-'Junc' abide law.</span><span>
594+</span><a name="line-594"></a><span class="hs-comment">-- </span><span>
595+</span><a name="line-595"></a><span class="hs-comment">-- Law:</span><span>
596+</span><a name="line-596"></a><span class="hs-comment">--</span><span>
597+</span><a name="line-597"></a><span class="hs-comment">-- @</span><span>
598+</span><a name="line-598"></a><span class="hs-comment">-- 'Split' ('Junc' a b) ('Junc' c d) == 'Junc' ('Split' a c) ('Split' b d)</span><span>
599+</span><a name="line-599"></a><span class="hs-comment">-- @</span><span>
600+</span><a name="line-600"></a><span class="hs-identifier">abideSJ</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046479"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046480"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046481"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046479"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046480"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046481"><span class="hs-identifier hs-type">rows</span></a><span>
601+</span><a name="line-601"></a><a name="abideSJ"><a href="Matrix.Type.html#abideSJ"><span class="hs-identifier">abideSJ</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046626"><a href="#local-6989586621679046626"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#abideSJ"><span class="hs-identifier hs-var">I.abideSJ</span></a><span> </span><a href="#local-6989586621679046626"><span class="hs-identifier hs-var">m</span></a><span class="hs-special">)</span><span>
602+</span><a name="line-602"></a><span>
603+</span><a name="line-603"></a><span class="hs-comment">-- Matrix transposition</span><span>
604+</span><a name="line-604"></a><span>
605+</span><a name="line-605"></a><span class="hs-comment">-- | Matrix transposition.</span><span>
606+</span><a name="line-606"></a><span class="hs-identifier">tr</span><span> </span><span class="hs-glyph">::</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046476"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046477"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046478"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046476"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046478"><span class="hs-identifier hs-type">rows</span></a><span> </span><a href="#local-6989586621679046477"><span class="hs-identifier hs-type">cols</span></a><span>
607+</span><a name="line-607"></a><a name="tr"><a href="Matrix.Type.html#tr"><span class="hs-identifier">tr</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046627"><a href="#local-6989586621679046627"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#tr"><span class="hs-identifier hs-var">I.tr</span></a><span> </span><a href="#local-6989586621679046627"><span class="hs-identifier hs-var">m</span></a><span class="hs-special">)</span><span>
608+</span><a name="line-608"></a><span>
609+</span><a name="line-609"></a><span class="hs-comment">-- Selective 'select' operator</span><span>
610+</span><a name="line-610"></a><span>
611+</span><a name="line-611"></a><span class="hs-comment">-- | Selective functors 'select' operator equivalent inspired by the</span><span>
612+</span><a name="line-612"></a><span class="hs-comment">-- ArrowMonad solution presented in the paper.</span><span>
613+</span><a name="line-613"></a><span class="hs-identifier">selectM</span><span> </span><span class="hs-glyph">::</span><span>
614+</span><a name="line-614"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046472"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
615+</span><a name="line-615"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046472"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046473"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046473"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
616+</span><a name="line-616"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046473"><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>
617+</span><a name="line-617"></a><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Either</span><span> </span><a href="#local-6989586621679046474"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046473"><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-identifier hs-type">Either</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046474"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046473"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
618+</span><a name="line-618"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046472"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046475"><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-6989586621679046474"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046473"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046472"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046474"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046473"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046472"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046475"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046473"><span class="hs-identifier hs-type">b</span></a><span>
619+</span><a name="line-619"></a><a name="selectM"><a href="Matrix.Type.html#selectM"><span class="hs-identifier">selectM</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046628"><a href="#local-6989586621679046628"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046629"><a href="#local-6989586621679046629"><span class="hs-identifier">y</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#select"><span class="hs-identifier hs-var">I.select</span></a><span> </span><a href="#local-6989586621679046628"><span class="hs-identifier hs-var">m</span></a><span> </span><a href="#local-6989586621679046629"><span class="hs-identifier hs-var">y</span></a><span class="hs-special">)</span><span>
620+</span><a name="line-620"></a><span>
621+</span><a name="line-621"></a><span class="hs-comment">-- McCarthy's Conditional</span><span>
622+</span><a name="line-622"></a><span>
623+</span><a name="line-623"></a><span class="hs-comment">-- | McCarthy's Conditional expresses probabilistic choice.</span><span>
624+</span><a name="line-624"></a><span class="hs-identifier">cond</span><span> </span><span class="hs-glyph">::</span><span>
625+</span><a name="line-625"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">I.Normalize</span><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046469"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">~</span><span> </span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046469"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
626+</span><a name="line-626"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046469"><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>
627+</span><a name="line-627"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046470"><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><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046469"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
628+</span><a name="line-628"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046470"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046469"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
629+</span><a name="line-629"></a><span> </span><a href="Matrix.Internal.html#FromLists"><span class="hs-identifier hs-type">I.FromLists</span></a><span> </span><a href="#local-6989586621679046470"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046469"><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">I.Normalize</span></a><span> </span><a href="#local-6989586621679046469"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span class="hs-special">,</span><span>
630+</span><a name="line-630"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679046469"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
631+</span><a name="line-631"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679046469"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
632+</span><a name="line-632"></a><span> </span><span class="hs-identifier hs-type">Num</span><span> </span><a href="#local-6989586621679046470"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">,</span><span>
633+</span><a name="line-633"></a><span> </span><span class="hs-identifier hs-type">Ord</span><span> </span><a href="#local-6989586621679046470"><span class="hs-identifier hs-type">e</span></a><span>
634+</span><a name="line-634"></a><span> </span><span class="hs-special">)</span><span>
635+</span><a name="line-635"></a><span> </span><span class="hs-glyph">=&gt;</span><span>
636+</span><a name="line-636"></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679046469"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Bool</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046470"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046469"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046471"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046470"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046469"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046471"><span class="hs-identifier hs-type">b</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046470"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046469"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679046471"><span class="hs-identifier hs-type">b</span></a><span>
637+</span><a name="line-637"></a><a name="cond"><a href="Matrix.Type.html#cond"><span class="hs-identifier">cond</span></a></a><span> </span><a name="local-6989586621679046630"><a href="#local-6989586621679046630"><span class="hs-identifier">p</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046631"><a href="#local-6989586621679046631"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046632"><a href="#local-6989586621679046632"><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.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#cond"><span class="hs-identifier hs-var">I.cond</span></a><span> </span><a href="#local-6989586621679046630"><span class="hs-identifier hs-var">p</span></a><span> </span><a href="#local-6989586621679046631"><span class="hs-identifier hs-var">a</span></a><span> </span><a href="#local-6989586621679046632"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
638+</span><a name="line-638"></a><span>
639+</span><a name="line-639"></a><span class="hs-comment">-- Pretty print</span><span>
640+</span><a name="line-640"></a><span>
641+</span><a name="line-641"></a><span class="hs-comment">-- | Matrix pretty printer</span><span>
642+</span><a name="line-642"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046466"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><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-6989586621679046467"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046467"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046466"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046468"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">String</span><span>
643+</span><a name="line-643"></a><a name="pretty"><a href="Matrix.Type.html#pretty"><span class="hs-identifier">pretty</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046633"><a href="#local-6989586621679046633"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#pretty"><span class="hs-identifier hs-var">I.pretty</span></a><span> </span><a href="#local-6989586621679046633"><span class="hs-identifier hs-var">m</span></a><span>
644+</span><a name="line-644"></a><span>
645+</span><a name="line-645"></a><span class="hs-comment">-- | Matrix pretty printer</span><span>
646+</span><a name="line-646"></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">I.Count</span></a><span> </span><span class="hs-special">(</span><a href="Matrix.Internal.html#Normalize"><span class="hs-identifier hs-type">I.Normalize</span></a><span> </span><a href="#local-6989586621679046463"><span class="hs-identifier hs-type">cols</span></a><span class="hs-special">)</span><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-6989586621679046464"><span class="hs-identifier hs-type">e</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><a href="Matrix.Type.html#Matrix"><span class="hs-identifier hs-type">Matrix</span></a><span> </span><a href="#local-6989586621679046464"><span class="hs-identifier hs-type">e</span></a><span> </span><a href="#local-6989586621679046463"><span class="hs-identifier hs-type">cols</span></a><span> </span><a href="#local-6989586621679046465"><span class="hs-identifier hs-type">rows</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
647+</span><a name="line-647"></a><a name="prettyPrint"><a href="Matrix.Type.html#prettyPrint"><span class="hs-identifier">prettyPrint</span></a></a><span> </span><span class="hs-special">(</span><a href="Matrix.Type.html#M"><span class="hs-identifier hs-var">M</span></a><span> </span><a name="local-6989586621679046634"><a href="#local-6989586621679046634"><span class="hs-identifier">m</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><a href="Matrix.Internal.html#prettyPrint"><span class="hs-identifier hs-var">I.prettyPrint</span></a><span> </span><a href="#local-6989586621679046634"><span class="hs-identifier hs-var">m</span></a><span>
648+</span><a name="line-648"></a></pre></body></html>
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Paths_laop.htmlnew file+51
@@ -0,0 +1,51 @@
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 CPP #-}</span><span>
2+</span><a name="line-2"></a><span class="hs-pragma">{-# LANGUAGE NoRebindableSyntax #-}</span><span>
3+</span><a name="line-3"></a><span class="hs-pragma">{-# OPTIONS_GHC -fno-warn-missing-import-lists #-}</span><span>
4+</span><a name="line-4"></a><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">Paths_laop</span><span> </span><span class="hs-special">(</span><span>
5+</span><a name="line-5"></a><span> </span><a href="Paths_laop.html#version"><span class="hs-identifier hs-var">version</span></a><span class="hs-special">,</span><span>
6+</span><a name="line-6"></a><span> </span><a href="Paths_laop.html#getBinDir"><span class="hs-identifier hs-var">getBinDir</span></a><span class="hs-special">,</span><span> </span><a href="Paths_laop.html#getLibDir"><span class="hs-identifier hs-var">getLibDir</span></a><span class="hs-special">,</span><span> </span><a href="Paths_laop.html#getDynLibDir"><span class="hs-identifier hs-var">getDynLibDir</span></a><span class="hs-special">,</span><span> </span><a href="Paths_laop.html#getDataDir"><span class="hs-identifier hs-var">getDataDir</span></a><span class="hs-special">,</span><span> </span><a href="Paths_laop.html#getLibexecDir"><span class="hs-identifier hs-var">getLibexecDir</span></a><span class="hs-special">,</span><span>
7+</span><a name="line-7"></a><span> </span><a href="Paths_laop.html#getDataFileName"><span class="hs-identifier hs-var">getDataFileName</span></a><span class="hs-special">,</span><span> </span><a href="Paths_laop.html#getSysconfDir"><span class="hs-identifier hs-var">getSysconfDir</span></a><span>
8+</span><a name="line-8"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
9+</span><a name="line-9"></a><span>
10+</span><a name="line-10"></a><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="hs-identifier">Control.Exception</span><span> </span><span class="hs-keyword">as</span><span> </span><span class="hs-identifier">Exception</span><span>
11+</span><a name="line-11"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.Version</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Version</span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
12+</span><a name="line-12"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">System.Environment</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">getEnv</span><span class="hs-special">)</span><span>
13+</span><a name="line-13"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Prelude</span><span>
14+</span><a name="line-14"></a><span>
15+</span><a name="line-15"></a><span class="hs-cpp">#if defined(VERSION_base)
16+</span><span>
17+</span><a name="line-17"></a><span class="hs-cpp">#if MIN_VERSION_base(4,0,0)
18+</span><span class="hs-identifier">catchIO</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="#local-6989586621679020005"><span class="hs-identifier hs-type">a</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Exception.IOException</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="#local-6989586621679020005"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><a href="#local-6989586621679020005"><span class="hs-identifier hs-type">a</span></a><span>
19+</span><a name="line-19"></a><span class="hs-cpp">#else
20+</span><span class="hs-identifier">catchIO</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier">IO</span><span> </span><span class="hs-identifier">a</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="hs-identifier">Exception.Exception</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier">IO</span><span> </span><span class="hs-identifier">a</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier">IO</span><span> </span><span class="hs-identifier">a</span><span>
21+</span><a name="line-21"></a><span class="hs-cpp">#endif
22+</span><span>
23+</span><a name="line-23"></a><span class="hs-cpp">#else
24+</span><span class="hs-identifier">catchIO</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier">IO</span><span> </span><span class="hs-identifier">a</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="hs-identifier">Exception.IOException</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier">IO</span><span> </span><span class="hs-identifier">a</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier">IO</span><span> </span><span class="hs-identifier">a</span><span>
25+</span><a name="line-25"></a><span class="hs-cpp">#endif
26+</span><a name="catchIO"><a href="Paths_laop.html#catchIO"><span class="hs-identifier">catchIO</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Exception.catch</span><span>
27+</span><a name="line-27"></a><span>
28+</span><a name="line-28"></a><span class="hs-identifier">version</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Version</span><span>
29+</span><a name="line-29"></a><a name="version"><a href="Paths_laop.html#version"><span class="hs-identifier">version</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Version</span><span> </span><span class="hs-special">[</span><span class="hs-number">0</span><span class="hs-special">,</span><span class="hs-number">1</span><span class="hs-special">,</span><span class="hs-number">0</span><span class="hs-special">,</span><span class="hs-number">0</span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
30+</span><a name="line-30"></a><span class="hs-identifier">bindir</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">libdir</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">dynlibdir</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">datadir</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">libexecdir</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">sysconfdir</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">FilePath</span><span>
31+</span><a name="line-31"></a><span>
32+</span><a name="line-32"></a><a name="bindir"><a href="Paths_laop.html#bindir"><span class="hs-identifier">bindir</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-string">&quot;/home/bolt/.cabal/bin&quot;</span><span>
33+</span><a name="line-33"></a><a name="libdir"><a href="Paths_laop.html#libdir"><span class="hs-identifier">libdir</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-string">&quot;/home/bolt/.cabal/lib/x86_64-linux-ghc-8.6.5/laop-0.1.0.0-inplace&quot;</span><span>
34+</span><a name="line-34"></a><a name="dynlibdir"><a href="Paths_laop.html#dynlibdir"><span class="hs-identifier">dynlibdir</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-string">&quot;/home/bolt/.cabal/lib/x86_64-linux-ghc-8.6.5&quot;</span><span>
35+</span><a name="line-35"></a><a name="datadir"><a href="Paths_laop.html#datadir"><span class="hs-identifier">datadir</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-string">&quot;/home/bolt/.cabal/share/x86_64-linux-ghc-8.6.5/laop-0.1.0.0&quot;</span><span>
36+</span><a name="line-36"></a><a name="libexecdir"><a href="Paths_laop.html#libexecdir"><span class="hs-identifier">libexecdir</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-string">&quot;/home/bolt/.cabal/libexec/x86_64-linux-ghc-8.6.5/laop-0.1.0.0&quot;</span><span>
37+</span><a name="line-37"></a><a name="sysconfdir"><a href="Paths_laop.html#sysconfdir"><span class="hs-identifier">sysconfdir</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-string">&quot;/home/bolt/.cabal/etc&quot;</span><span>
38+</span><a name="line-38"></a><span>
39+</span><a name="line-39"></a><span class="hs-identifier">getBinDir</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">getLibDir</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">getDynLibDir</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">getDataDir</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">getLibexecDir</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">getSysconfDir</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><span class="hs-identifier hs-type">FilePath</span><span>
40+</span><a name="line-40"></a><a name="getBinDir"><a href="Paths_laop.html#getBinDir"><span class="hs-identifier">getBinDir</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Paths_laop.html#catchIO"><span class="hs-identifier hs-var">catchIO</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">getEnv</span><span> </span><span class="hs-string">&quot;laop_bindir&quot;</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">return</span><span> </span><a href="Paths_laop.html#bindir"><span class="hs-identifier hs-var">bindir</span></a><span class="hs-special">)</span><span>
41+</span><a name="line-41"></a><a name="getLibDir"><a href="Paths_laop.html#getLibDir"><span class="hs-identifier">getLibDir</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Paths_laop.html#catchIO"><span class="hs-identifier hs-var">catchIO</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">getEnv</span><span> </span><span class="hs-string">&quot;laop_libdir&quot;</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">return</span><span> </span><a href="Paths_laop.html#libdir"><span class="hs-identifier hs-var">libdir</span></a><span class="hs-special">)</span><span>
42+</span><a name="line-42"></a><a name="getDynLibDir"><a href="Paths_laop.html#getDynLibDir"><span class="hs-identifier">getDynLibDir</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Paths_laop.html#catchIO"><span class="hs-identifier hs-var">catchIO</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">getEnv</span><span> </span><span class="hs-string">&quot;laop_dynlibdir&quot;</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">return</span><span> </span><a href="Paths_laop.html#dynlibdir"><span class="hs-identifier hs-var">dynlibdir</span></a><span class="hs-special">)</span><span>
43+</span><a name="line-43"></a><a name="getDataDir"><a href="Paths_laop.html#getDataDir"><span class="hs-identifier">getDataDir</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Paths_laop.html#catchIO"><span class="hs-identifier hs-var">catchIO</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">getEnv</span><span> </span><span class="hs-string">&quot;laop_datadir&quot;</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">return</span><span> </span><a href="Paths_laop.html#datadir"><span class="hs-identifier hs-var">datadir</span></a><span class="hs-special">)</span><span>
44+</span><a name="line-44"></a><a name="getLibexecDir"><a href="Paths_laop.html#getLibexecDir"><span class="hs-identifier">getLibexecDir</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Paths_laop.html#catchIO"><span class="hs-identifier hs-var">catchIO</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">getEnv</span><span> </span><span class="hs-string">&quot;laop_libexecdir&quot;</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">return</span><span> </span><a href="Paths_laop.html#libexecdir"><span class="hs-identifier hs-var">libexecdir</span></a><span class="hs-special">)</span><span>
45+</span><a name="line-45"></a><a name="getSysconfDir"><a href="Paths_laop.html#getSysconfDir"><span class="hs-identifier">getSysconfDir</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><a href="Paths_laop.html#catchIO"><span class="hs-identifier hs-var">catchIO</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">getEnv</span><span> </span><span class="hs-string">&quot;laop_sysconfdir&quot;</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-var">return</span><span> </span><a href="Paths_laop.html#sysconfdir"><span class="hs-identifier hs-var">sysconfdir</span></a><span class="hs-special">)</span><span>
46+</span><a name="line-46"></a><span>
47+</span><a name="line-47"></a><span class="hs-identifier">getDataFileName</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">FilePath</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">IO</span><span> </span><span class="hs-identifier hs-type">FilePath</span><span>
48+</span><a name="line-48"></a><a name="getDataFileName"><a href="Paths_laop.html#getDataFileName"><span class="hs-identifier">getDataFileName</span></a></a><span> </span><a name="local-6989586621679020854"><a href="#local-6989586621679020854"><span class="hs-identifier">name</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
49+</span><a name="line-49"></a><span> </span><a name="local-6989586621679020855"><a href="#local-6989586621679020855"><span class="hs-identifier">dir</span></a></a><span> </span><span class="hs-glyph">&lt;-</span><span> </span><a href="Paths_laop.html#getDataDir"><span class="hs-identifier hs-var">getDataDir</span></a><span>
50+</span><a name="line-50"></a><span> </span><span class="hs-identifier hs-var">return</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679020855"><span class="hs-identifier hs-var">dir</span></a><span> </span><span class="hs-operator hs-var">++</span><span> </span><span class="hs-string">&quot;/&quot;</span><span> </span><span class="hs-operator hs-var">++</span><span> </span><a href="#local-6989586621679020854"><span class="hs-identifier hs-var">name</span></a><span class="hs-special">)</span><span>
51+</span><a name="line-51"></a></pre></body></html>
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Utils.Internal.htmlnew file+177
@@ -0,0 +1,177 @@
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 TypeApplications #-}</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 FlexibleInstances #-}</span><span>
4+</span><a name="line-4"></a><span class="hs-pragma">{-# LANGUAGE GeneralizedNewtypeDeriving #-}</span><span>
5+</span><a name="line-5"></a><span class="hs-pragma">{-# LANGUAGE KindSignatures #-}</span><span>
6+</span><a name="line-6"></a><span class="hs-pragma">{-# LANGUAGE ScopedTypeVariables #-}</span><span>
7+</span><a name="line-7"></a><span>
8+</span><a name="line-8"></a><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">Utils.Internal</span><span>
9+</span><a name="line-9"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-comment">-- | This is an internal module and it is not meant to be imported.</span><span>
10+</span><a name="line-10"></a><span> </span><span class="hs-comment">--</span><span>
11+</span><a name="line-11"></a><span> </span><span class="hs-comment">-- Utility module that provides the 'Natural' data type.</span><span>
12+</span><a name="line-12"></a><span> </span><span class="hs-comment">-- The semantic associated with this data type is that</span><span>
13+</span><a name="line-13"></a><span> </span><span class="hs-comment">-- it's meant to be a restricted 'Int' value. For example</span><span>
14+</span><a name="line-14"></a><span> </span><span class="hs-comment">-- the type @Natural 6@ can only be instanciated with @Nat n@</span><span>
15+</span><a name="line-15"></a><span> </span><span class="hs-comment">-- where @0 &lt;= n &lt;= 6@. Why, You might ask, because with normal</span><span>
16+</span><a name="line-16"></a><span> </span><span class="hs-comment">-- 'Int's it is not possible to have a decent @Enum (Int, Int)@</span><span>
17+</span><a name="line-17"></a><span> </span><span class="hs-comment">-- instance. See the following probabilistic programming model as and</span><span>
18+</span><a name="line-18"></a><span> </span><span class="hs-comment">-- example:</span><span>
19+</span><a name="line-19"></a><span> </span><span class="hs-comment">--</span><span>
20+</span><a name="line-20"></a><span> </span><span class="hs-comment">-- We want to calculate the probability of the sum of two dice throws.</span><span>
21+</span><a name="line-21"></a><span> </span><span class="hs-comment">-- To do this we start by defining the sample space:</span><span>
22+</span><a name="line-22"></a><span> </span><span class="hs-comment">--</span><span>
23+</span><a name="line-23"></a><span> </span><span class="hs-comment">-- @</span><span>
24+</span><a name="line-24"></a><span> </span><span class="hs-comment">-- type SampleSpace = Int -- We think 'Int' are enough</span><span>
25+</span><a name="line-25"></a><span> </span><span class="hs-comment">--</span><span>
26+</span><a name="line-26"></a><span> </span><span class="hs-comment">-- die :: Dist Int 6</span><span>
27+</span><a name="line-27"></a><span> </span><span class="hs-comment">-- die = unifrom [1..6]</span><span>
28+</span><a name="line-28"></a><span> </span><span class="hs-comment">--</span><span>
29+</span><a name="line-29"></a><span> </span><span class="hs-comment">-- -- Promote 'Int' addition to a matrix</span><span>
30+</span><a name="line-30"></a><span> </span><span class="hs-comment">-- addM = fromF (uncurry (+)) -- Impossible</span><span>
31+</span><a name="line-31"></a><span> </span><span class="hs-comment">-- @</span><span>
32+</span><a name="line-32"></a><span> </span><span class="hs-comment">--</span><span>
33+</span><a name="line-33"></a><span> </span><span class="hs-comment">-- The last line is impossible because @(Int, Int)@ does not have</span><span>
34+</span><a name="line-34"></a><span> </span><span class="hs-comment">-- a good 'Enum' instance: @[(0, 1), (0, 2), .. (0, maxBound), (1, 0),</span><span>
35+</span><a name="line-35"></a><span> </span><span class="hs-comment">-- ..]@. And we'd like the addition matrix to be of 36 columns by 12</span><span>
36+</span><a name="line-36"></a><span> </span><span class="hs-comment">-- rows but limited to integers up to @6@!</span><span>
37+</span><a name="line-37"></a><span> </span><span class="hs-comment">--</span><span>
38+</span><a name="line-38"></a><span> </span><span class="hs-comment">-- One way to solve this issue is by defining and auxilary data type to</span><span>
39+</span><a name="line-39"></a><span> </span><span class="hs-comment">-- represent the sample space:</span><span>
40+</span><a name="line-40"></a><span> </span><span class="hs-comment">--</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">-- data SampleSpace = S1 | S2 | S3 | S4 | S5 | S6</span><span>
43+</span><a name="line-43"></a><span> </span><span class="hs-comment">-- deriving (Show, Eq, Enum, Bounded) -- Enum and Bounded are</span><span>
44+</span><a name="line-44"></a><span> </span><span class="hs-comment">-- important</span><span>
45+</span><a name="line-45"></a><span> </span><span class="hs-comment">-- @</span><span>
46+</span><a name="line-46"></a><span> </span><span class="hs-comment">--</span><span>
47+</span><a name="line-47"></a><span> </span><span class="hs-comment">-- And write the sample space addition function:</span><span>
48+</span><a name="line-48"></a><span> </span><span class="hs-comment">--</span><span>
49+</span><a name="line-49"></a><span> </span><span class="hs-comment">-- @</span><span>
50+</span><a name="line-50"></a><span> </span><span class="hs-comment">-- ssAdd :: SampleSpace -&gt; SampleSpace -&gt; Int</span><span>
51+</span><a name="line-51"></a><span> </span><span class="hs-comment">-- ssAdd a b = (fromEnum a + 1) + (fromEnum b + 1)</span><span>
52+</span><a name="line-52"></a><span> </span><span class="hs-comment">-- @</span><span>
53+</span><a name="line-53"></a><span> </span><span class="hs-comment">--</span><span>
54+</span><a name="line-54"></a><span> </span><span class="hs-comment">-- And then promote that function to matrix and everything is alright:</span><span>
55+</span><a name="line-55"></a><span> </span><span class="hs-comment">--</span><span>
56+</span><a name="line-56"></a><span> </span><span class="hs-comment">-- @</span><span>
57+</span><a name="line-57"></a><span> </span><span class="hs-comment">-- ssAddM = fromF' (uncurry ssAdd)</span><span>
58+</span><a name="line-58"></a><span> </span><span class="hs-comment">--</span><span>
59+</span><a name="line-59"></a><span> </span><span class="hs-comment">-- dieSumProb = ssAddM `comp` (khatri die die)</span><span>
60+</span><a name="line-60"></a><span> </span><span class="hs-comment">-- @</span><span>
61+</span><a name="line-61"></a><span> </span><span class="hs-comment">--</span><span>
62+</span><a name="line-62"></a><span> </span><span class="hs-comment">-- This is a nice solution for small sample spaces. But for larger ones</span><span>
63+</span><a name="line-63"></a><span> </span><span class="hs-comment">-- it is not feasible to write a data type with hundreds of constructors</span><span>
64+</span><a name="line-64"></a><span> </span><span class="hs-comment">-- and then write manipulation functions that need to deal with them.</span><span>
65+</span><a name="line-65"></a><span> </span><span class="hs-comment">-- To mitigate this limitation the 'Natural' type comes a long way and</span><span>
66+</span><a name="line-66"></a><span> </span><span class="hs-comment">-- allows one to model the sample in an easier way. See for instance:</span><span>
67+</span><a name="line-67"></a><span> </span><span class="hs-comment">--</span><span>
68+</span><a name="line-68"></a><span> </span><span class="hs-comment">-- @</span><span>
69+</span><a name="line-69"></a><span> </span><span class="hs-comment">-- ssAdd :: Natural 6 -&gt; Natural 6 -&gt; Natural 12</span><span>
70+</span><a name="line-70"></a><span> </span><span class="hs-comment">-- ssAdd = coerceNat (+)</span><span>
71+</span><a name="line-71"></a><span> </span><span class="hs-comment">--</span><span>
72+</span><a name="line-72"></a><span> </span><span class="hs-comment">-- ssAddM = fromF' (uncurry sumSS)</span><span>
73+</span><a name="line-73"></a><span> </span><span class="hs-comment">--</span><span>
74+</span><a name="line-74"></a><span> </span><span class="hs-comment">-- die :: Dist (Natural 6) 6</span><span>
75+</span><a name="line-75"></a><span> </span><span class="hs-comment">-- die = uniform [nat @6 1 .. nat 6]</span><span>
76+</span><a name="line-76"></a><span> </span><span class="hs-comment">--</span><span>
77+</span><a name="line-77"></a><span> </span><span class="hs-comment">-- dieSumProb = ssAddM `comp` (khatri die die)</span><span>
78+</span><a name="line-78"></a><span> </span><span class="hs-comment">-- @</span><span>
79+</span><a name="line-79"></a><span> </span><span class="hs-comment">--</span><span>
80+</span><a name="line-80"></a><span> </span><span class="hs-comment">-- * 'Natural' data type</span><span>
81+</span><a name="line-81"></a><span> </span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span class="hs-special">,</span><span>
82+</span><a name="line-82"></a><span> </span><a href="Utils.Internal.html#nat"><span class="hs-identifier hs-var">nat</span></a><span class="hs-special">,</span><span>
83+</span><a name="line-83"></a><span>
84+</span><a name="line-84"></a><span> </span><span class="hs-comment">-- * Coerce auxiliar functions to help promote 'Int' typed functions to</span><span>
85+</span><a name="line-85"></a><span> </span><span class="hs-comment">-- 'Natural' typed functions.</span><span>
86+</span><a name="line-86"></a><span> </span><a href="Utils.Internal.html#coerceNat"><span class="hs-identifier hs-var">coerceNat</span></a><span class="hs-special">,</span><span>
87+</span><a name="line-87"></a><span> </span><a href="Utils.Internal.html#coerceNat2"><span class="hs-identifier hs-var">coerceNat2</span></a><span class="hs-special">,</span><span>
88+</span><a name="line-88"></a><span> </span><a href="Utils.Internal.html#coerceNat3"><span class="hs-identifier hs-var">coerceNat3</span></a><span class="hs-special">,</span><span>
89+</span><a name="line-89"></a><span> </span><span class="hs-special">)</span><span>
90+</span><a name="line-90"></a><span class="hs-keyword">where</span><span>
91+</span><a name="line-91"></a><span>
92+</span><a name="line-92"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.Coerce</span><span>
93+</span><a name="line-93"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data.Proxy</span><span>
94+</span><a name="line-94"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">GHC.TypeLits</span><span>
95+</span><a name="line-95"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Control.DeepSeq</span><span>
96+</span><a name="line-96"></a><span>
97+</span><a name="line-97"></a><span class="hs-comment">-- | Wrapper around 'Int's that have a restrictive semantic associated.</span><span>
98+</span><a name="line-98"></a><span class="hs-comment">-- A value of type @'Natural' n m@ can only be instanciated with some 'Int'</span><span>
99+</span><a name="line-99"></a><span class="hs-comment">-- @i@ that's @n &lt;= i &lt;= m@.</span><span>
100+</span><a name="line-100"></a><span class="hs-keyword">newtype</span><span> </span><a name="Natural"><a href="Utils.Internal.html#Natural"><span class="hs-identifier">Natural</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679023463"><a href="#local-6989586621679023463"><span class="hs-identifier">start</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-special">(</span><a name="local-6989586621679023464"><a href="#local-6989586621679023464"><span class="hs-identifier">end</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><a name="Nat"><a href="Utils.Internal.html#Nat"><span class="hs-identifier">Nat</span></a></a><span> </span><span class="hs-identifier hs-type">Int</span><span>
101+</span><a name="line-101"></a><span> </span><span class="hs-keyword">deriving</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Show</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Read</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Eq</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Ord</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">NFData</span><span class="hs-special">)</span><span>
102+</span><a name="line-102"></a><span>
103+</span><a name="line-103"></a><span class="hs-comment">-- | Throws a runtime error if any of the operations overflows or</span><span>
104+</span><a name="line-104"></a><span class="hs-comment">-- underflows.</span><span>
105+</span><a name="line-105"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">KnownNat</span><span> </span><a href="#local-6989586621679031022"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><a href="#local-6989586621679031023"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-identifier hs-type">Num</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-6989586621679031022"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679031023"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
106+</span><a name="line-106"></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><a name="local-6989586621679031024"><a href="#local-6989586621679031024"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><a name="local-8214565720323790403"><span class="hs-operator">+</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><a name="local-6989586621679031025"><a href="#local-6989586621679031025"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</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-glyph">@</span><a href="#local-6989586621679031022"><span class="hs-identifier hs-type">n</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679031023"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679031024"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">+</span><span> </span><a href="#local-6989586621679031025"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
107+</span><a name="line-107"></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><a name="local-6989586621679031026"><a href="#local-6989586621679031026"><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="Utils.Internal.html#Nat"><span class="hs-identifier hs-var">Nat</span></a><span> </span><a name="local-6989586621679031027"><a href="#local-6989586621679031027"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</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-glyph">@</span><a href="#local-6989586621679031022"><span class="hs-identifier hs-type">n</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679031023"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679031026"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679031027"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
108+</span><a name="line-108"></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><a name="local-6989586621679031028"><a href="#local-6989586621679031028"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span> </span><a name="local-8214565720323790402"><span class="hs-operator">*</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><a name="local-6989586621679031029"><a href="#local-6989586621679031029"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</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-glyph">@</span><a href="#local-6989586621679031022"><span class="hs-identifier hs-type">n</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679031023"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679031028"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="#local-6989586621679031029"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span>
109+</span><a name="line-109"></a><span> </span><a name="local-8214565720323790401"><span class="hs-identifier">abs</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><a name="local-6989586621679031030"><a href="#local-6989586621679031030"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</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-glyph">@</span><a href="#local-6989586621679031022"><span class="hs-identifier hs-type">n</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679031023"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">abs</span><span> </span><a href="#local-6989586621679031030"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span>
110+</span><a name="line-110"></a><span> </span><a name="local-8214565720323790400"><span class="hs-identifier">signum</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><a name="local-6989586621679031031"><a href="#local-6989586621679031031"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</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-glyph">@</span><a href="#local-6989586621679031022"><span class="hs-identifier hs-type">n</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679031023"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">signum</span><span> </span><a href="#local-6989586621679031031"><span class="hs-identifier hs-var">a</span></a><span class="hs-special">)</span><span>
111+</span><a name="line-111"></a><span> </span><a name="local-3458764513820541088"><span class="hs-identifier">fromInteger</span></a><span> </span><a name="local-6989586621679031032"><a href="#local-6989586621679031032"><span class="hs-identifier">i</span></a></a><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-glyph">@</span><a href="#local-6989586621679031022"><span class="hs-identifier hs-type">n</span></a><span> </span><span class="hs-glyph">@</span><a href="#local-6989586621679031023"><span class="hs-identifier hs-type">m</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">fromInteger</span><span> </span><a href="#local-6989586621679031032"><span class="hs-identifier hs-var">i</span></a><span class="hs-special">)</span><span>
112+</span><a name="line-112"></a><span>
113+</span><a name="line-113"></a><span class="hs-comment">-- | Natural constructor function. Throws a runtime error if the 'Int'</span><span>
114+</span><a name="line-114"></a><span class="hs-comment">-- value is greater than the corresponding @m@ or lower than @n@ in the @'Natural' n m@ type.</span><span>
115+</span><a name="line-115"></a><span class="hs-identifier">nat</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><a name="local-6989586621679031052"><a href="#local-6989586621679031052"><span class="hs-identifier">n</span></a></a><span> </span><a name="local-6989586621679031053"><a href="#local-6989586621679031053"><span class="hs-identifier">m</span></a></a><span> </span><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">KnownNat</span><span> </span><a href="#local-6989586621679031052"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><a href="#local-6989586621679031053"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-identifier hs-type">Int</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><a href="#local-6989586621679031052"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679031053"><span class="hs-identifier hs-type">m</span></a><span>
116+</span><a name="line-116"></a><a name="nat"><a href="Utils.Internal.html#nat"><span class="hs-identifier">nat</span></a></a><span> </span><a name="local-6989586621679031054"><a href="#local-6989586621679031054"><span class="hs-identifier">i</span></a></a><span> </span><span class="hs-glyph">=</span><span>
117+</span><a name="line-117"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679031055"><a href="#local-6989586621679031055"><span class="hs-identifier">start</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><a href="#local-6989586621679031052"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
118+</span><a name="line-118"></a><span> </span><a name="local-6989586621679031056"><a href="#local-6989586621679031056"><span class="hs-identifier">end</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><a href="#local-6989586621679031053"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
119+</span><a name="line-119"></a><span> </span><span class="hs-keyword">in</span><span> </span><span class="hs-keyword">if</span><span> </span><a href="#local-6989586621679031055"><span class="hs-identifier hs-var">start</span></a><span> </span><span class="hs-operator hs-var">&lt;=</span><span> </span><a href="#local-6989586621679031054"><span class="hs-identifier hs-var">i</span></a><span> </span><span class="hs-operator hs-var">&amp;&amp;</span><span> </span><a href="#local-6989586621679031054"><span class="hs-identifier hs-var">i</span></a><span> </span><span class="hs-operator hs-var">&lt;=</span><span> </span><a href="#local-6989586621679031056"><span class="hs-identifier hs-var">end</span></a><span>
120+</span><a name="line-120"></a><span> </span><span class="hs-keyword">then</span><span> </span><a href="Utils.Internal.html#Nat"><span class="hs-identifier hs-var">Nat</span></a><span> </span><a href="#local-6989586621679031054"><span class="hs-identifier hs-var">i</span></a><span>
121+</span><a name="line-121"></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">&quot;Off limits&quot;</span><span>
122+</span><a name="line-122"></a><span>
123+</span><a name="line-123"></a><span class="hs-comment">-- | Auxiliary function that promotes binary 'Int' functions to 'Natural'</span><span>
124+</span><a name="line-124"></a><span class="hs-comment">-- binary functions.</span><span>
125+</span><a name="line-125"></a><span class="hs-identifier">coerceNat</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Int</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Int</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Int</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</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-6989586621679031046"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679031047"><span class="hs-identifier hs-type">a'</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><a href="#local-6989586621679031048"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679031049"><span class="hs-identifier hs-type">b'</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><a href="#local-6989586621679031050"><span class="hs-identifier hs-type">c</span></a><span> </span><a href="#local-6989586621679031051"><span class="hs-identifier hs-type">c'</span></a><span class="hs-special">)</span><span>
126+</span><a name="line-126"></a><a name="coerceNat"><a href="Utils.Internal.html#coerceNat"><span class="hs-identifier">coerceNat</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">coerce</span><span>
127+</span><a name="line-127"></a><span>
128+</span><a name="line-128"></a><span class="hs-comment">-- | Auxiliary function that promotes ternary (binary) 'Int' functions to 'Natural'</span><span>
129+</span><a name="line-129"></a><span class="hs-comment">-- functions.</span><span>
130+</span><a name="line-130"></a><span class="hs-identifier">coerceNat2</span><span> </span><span class="hs-glyph">::</span><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">-&gt;</span><span> </span><span class="hs-identifier hs-type">Int</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Int</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</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-6989586621679031038"><span class="hs-identifier hs-type">a</span></a><span> </span><a href="#local-6989586621679031039"><span class="hs-identifier hs-type">a'</span></a><span class="hs-special">,</span><span> </span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><a href="#local-6989586621679031040"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679031041"><span class="hs-identifier hs-type">b'</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><a href="#local-6989586621679031042"><span class="hs-identifier hs-type">c</span></a><span> </span><a href="#local-6989586621679031043"><span class="hs-identifier hs-type">c'</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><a href="#local-6989586621679031044"><span class="hs-identifier hs-type">d</span></a><span> </span><a href="#local-6989586621679031045"><span class="hs-identifier hs-type">d'</span></a><span class="hs-special">)</span><span>
131+</span><a name="line-131"></a><a name="coerceNat2"><a href="Utils.Internal.html#coerceNat2"><span class="hs-identifier">coerceNat2</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">coerce</span><span>
132+</span><a name="line-132"></a><span>
133+</span><a name="line-133"></a><span class="hs-comment">-- | Auxiliary function that promotes ternary (binary) 'Int' functions to 'Natural'</span><span>
134+</span><a name="line-134"></a><span class="hs-comment">-- functions.</span><span>
135+</span><a name="line-135"></a><span class="hs-identifier">coerceNat3</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Int</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-identifier hs-type">Int</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679031033"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</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-6989586621679031034"><span class="hs-identifier hs-type">b</span></a><span> </span><a href="#local-6989586621679031035"><span class="hs-identifier hs-type">b'</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span> </span><a href="#local-6989586621679031036"><span class="hs-identifier hs-type">c</span></a><span> </span><a href="#local-6989586621679031037"><span class="hs-identifier hs-type">c'</span></a><span> </span><span class="hs-glyph">-&gt;</span><span> </span><a href="#local-6989586621679031033"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">)</span><span>
136+</span><a name="line-136"></a><a name="coerceNat3"><a href="Utils.Internal.html#coerceNat3"><span class="hs-identifier">coerceNat3</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">coerce</span><span>
137+</span><a name="line-137"></a><span>
138+</span><a name="line-138"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">KnownNat</span><span> </span><a href="#local-6989586621679031020"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><a href="#local-6989586621679031021"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-identifier hs-type">Bounded</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-6989586621679031020"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679031021"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
139+</span><a name="line-139"></a><span> </span><a name="local-8214565720323790309"><span class="hs-identifier">minBound</span></a><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-operator hs-var">$</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><a href="#local-6989586621679031020"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
140+</span><a name="line-140"></a><span> </span><a name="local-8214565720323790308"><span class="hs-identifier">maxBound</span></a><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-operator hs-var">$</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><a href="#local-6989586621679031021"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
141+</span><a name="line-141"></a><span>
142+</span><a name="line-142"></a><span class="hs-keyword">instance</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">KnownNat</span><span> </span><a href="#local-6989586621679030849"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">KnownNat</span><span> </span><a href="#local-6989586621679030850"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-identifier hs-type">Enum</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-6989586621679030849"><span class="hs-identifier hs-type">n</span></a><span> </span><a href="#local-6989586621679030850"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span>
143+</span><a name="line-143"></a><span> </span><a name="local-8214565720323790311"><span class="hs-identifier">toEnum</span></a><span> </span><a name="local-6989586621679031001"><a href="#local-6989586621679031001"><span class="hs-identifier">i</span></a></a><span> </span><span class="hs-glyph">=</span><span>
144+</span><a name="line-144"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679031002"><a href="#local-6989586621679031002"><span class="hs-identifier">start</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><a href="#local-6989586621679030849"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
145+</span><a name="line-145"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="Utils.Internal.html#nat"><span class="hs-identifier hs-var">nat</span></a><span> </span><span class="hs-special">(</span><a href="#local-6989586621679031002"><span class="hs-identifier hs-var">start</span></a><span> </span><span class="hs-operator hs-var">+</span><span> </span><a href="#local-6989586621679031001"><span class="hs-identifier hs-var">i</span></a><span class="hs-special">)</span><span>
146+</span><a name="line-146"></a><span> </span><span class="hs-comment">-- | Throws a runtime error if the value is off limits</span><span>
147+</span><a name="line-147"></a><span> </span><a name="local-8214565720323790310"><span class="hs-identifier">fromEnum</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><a name="local-6989586621679031003"><a href="#local-6989586621679031003"><span class="hs-identifier">nat</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
148+</span><a name="line-148"></a><span> </span><span class="hs-keyword">let</span><span> </span><a name="local-6989586621679031004"><a href="#local-6989586621679031004"><span class="hs-identifier">start</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><a href="#local-6989586621679030849"><span class="hs-identifier hs-type">n</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
149+</span><a name="line-149"></a><span> </span><a name="local-6989586621679031005"><a href="#local-6989586621679031005"><span class="hs-identifier">end</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><a href="#local-6989586621679030850"><span class="hs-identifier hs-type">m</span></a><span class="hs-special">)</span><span class="hs-special">)</span><span>
150+</span><a name="line-150"></a><span> </span><span class="hs-keyword">in</span><span> </span><span class="hs-keyword">if</span><span> </span><a href="#local-6989586621679031004"><span class="hs-identifier hs-var">start</span></a><span> </span><span class="hs-operator hs-var">&lt;=</span><span> </span><a href="#local-6989586621679031003"><span class="hs-identifier hs-var">nat</span></a><span> </span><span class="hs-operator hs-var">&amp;&amp;</span><span> </span><a href="#local-6989586621679031003"><span class="hs-identifier hs-var">nat</span></a><span> </span><span class="hs-operator hs-var">&lt;=</span><span> </span><a href="#local-6989586621679031005"><span class="hs-identifier hs-var">end</span></a><span>
151+</span><a name="line-151"></a><span> </span><span class="hs-keyword">then</span><span> </span><a href="#local-6989586621679031003"><span class="hs-identifier hs-var">nat</span></a><span> </span><span class="hs-glyph">-</span><span> </span><a href="#local-6989586621679031004"><span class="hs-identifier hs-var">start</span></a><span>
152+</span><a name="line-152"></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">&quot;Off limits&quot;</span><span>
153+</span><a name="line-153"></a><span>
154+</span><a name="line-154"></a><span class="hs-comment">-- | Optimized 'Enum' instance for tuples that comply with the given</span><span>
155+</span><a name="line-155"></a><span class="hs-comment">-- constraints.</span><span>
156+</span><a name="line-156"></a><span class="hs-keyword">instance</span><span>
157+</span><a name="line-157"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679029190"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span>
158+</span><a name="line-158"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><a href="#local-6989586621679029191"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">,</span><span>
159+</span><a name="line-159"></a><span> </span><span class="hs-identifier hs-type">Bounded</span><span> </span><a href="#local-6989586621679029191"><span class="hs-identifier hs-type">b</span></a><span>
160+</span><a name="line-160"></a><span> </span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span>
161+</span><a name="line-161"></a><span> </span><span class="hs-identifier hs-type">Enum</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679029190"><span class="hs-identifier hs-type">a</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679029191"><span class="hs-identifier hs-type">b</span></a><span class="hs-special">)</span><span>
162+</span><a name="line-162"></a><span> </span><span class="hs-keyword">where</span><span>
163+</span><a name="line-163"></a><span>
164+</span><a name="line-164"></a><span> </span><a name="local-8214565720323790311"><span class="hs-identifier">toEnum</span></a><span> </span><a name="local-6989586621679029192"><a href="#local-6989586621679029192"><span class="hs-identifier">i</span></a></a><span> </span><span class="hs-glyph">=</span><span>
165+</span><a name="line-165"></a><span> </span><span class="hs-keyword">let</span><span> </span><span class="hs-special">(</span><a name="local-6989586621679029193"><a href="#local-6989586621679029193"><span class="hs-identifier">listB</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679029191"><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><span class="hs-special">[</span><span class="hs-identifier hs-var">minBound</span><span> </span><span class="hs-glyph">..</span><span> </span><span class="hs-identifier hs-var">maxBound</span><span class="hs-special">]</span><span>
166+</span><a name="line-166"></a><span> </span><a name="local-6989586621679029194"><a href="#local-6989586621679029194"><span class="hs-identifier">lengthB</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-6989586621679029193"><span class="hs-identifier hs-var">listB</span></a><span>
167+</span><a name="line-167"></a><span> </span><a name="local-6989586621679029195"><a href="#local-6989586621679029195"><span class="hs-identifier">fstI</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">div</span><span> </span><a href="#local-6989586621679029192"><span class="hs-identifier hs-var">i</span></a><span> </span><a href="#local-6989586621679029194"><span class="hs-identifier hs-var">lengthB</span></a><span>
168+</span><a name="line-168"></a><span> </span><a name="local-6989586621679029196"><a href="#local-6989586621679029196"><span class="hs-identifier">sndI</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">mod</span><span> </span><a href="#local-6989586621679029192"><span class="hs-identifier hs-var">i</span></a><span> </span><a href="#local-6989586621679029194"><span class="hs-identifier hs-var">lengthB</span></a><span>
169+</span><a name="line-169"></a><span> </span><span class="hs-keyword">in</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">toEnum</span><span> </span><a href="#local-6989586621679029195"><span class="hs-identifier hs-var">fstI</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">toEnum</span><span> </span><a href="#local-6989586621679029196"><span class="hs-identifier hs-var">sndI</span></a><span class="hs-special">)</span><span>
170+</span><a name="line-170"></a><span>
171+</span><a name="line-171"></a><span> </span><a name="local-8214565720323790310"><span class="hs-identifier">fromEnum</span></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679030843"><a href="#local-6989586621679030843"><span class="hs-identifier">a</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679030844"><a href="#local-6989586621679030844"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
172+</span><a name="line-172"></a><span> </span><span class="hs-keyword">let</span><span> </span><span class="hs-special">(</span><a name="local-6989586621679030845"><a href="#local-6989586621679030845"><span class="hs-identifier">listB</span></a></a><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679029191"><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><span class="hs-special">[</span><span class="hs-identifier hs-var">minBound</span><span> </span><span class="hs-glyph">..</span><span> </span><span class="hs-identifier hs-var">maxBound</span><span class="hs-special">]</span><span>
173+</span><a name="line-173"></a><span> </span><a name="local-6989586621679030846"><a href="#local-6989586621679030846"><span class="hs-identifier">lengthB</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-6989586621679030845"><span class="hs-identifier hs-var">listB</span></a><span>
174+</span><a name="line-174"></a><span> </span><a name="local-6989586621679030847"><a href="#local-6989586621679030847"><span class="hs-identifier">fstI</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679030843"><span class="hs-identifier hs-var">a</span></a><span>
175+</span><a name="line-175"></a><span> </span><a name="local-6989586621679030848"><a href="#local-6989586621679030848"><span class="hs-identifier">sndI</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fromEnum</span><span> </span><a href="#local-6989586621679030844"><span class="hs-identifier hs-var">b</span></a><span>
176+</span><a name="line-176"></a><span> </span><span class="hs-keyword">in</span><span> </span><a href="#local-6989586621679030847"><span class="hs-identifier hs-var">fstI</span></a><span> </span><span class="hs-operator hs-var">*</span><span> </span><a href="#local-6989586621679030846"><span class="hs-identifier hs-var">lengthB</span></a><span> </span><span class="hs-operator hs-var">+</span><span> </span><a href="#local-6989586621679030848"><span class="hs-identifier hs-var">sndI</span></a><span>
177+</span><a name="line-177"></a></pre></body></html>
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/Utils.htmlnew file+101
@@ -0,0 +1,101 @@
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-comment">-----------------------------------------------------------------------------</span><span>
2+</span><a name="line-2"></a><span class="hs-comment">-- |</span><span>
3+</span><a name="line-3"></a><span class="hs-comment">-- Module : Utils</span><span>
4+</span><a name="line-4"></a><span class="hs-comment">-- Copyright : (c) Armando Santos 2019-2020</span><span>
5+</span><a name="line-5"></a><span class="hs-comment">-- Maintainer : armandoifsantos@gmail.com</span><span>
6+</span><a name="line-6"></a><span class="hs-comment">-- Stability : experimental</span><span>
7+</span><a name="line-7"></a><span class="hs-comment">--</span><span>
8+</span><a name="line-8"></a><span class="hs-comment">-- __LAoP__ is a library for algebraic (inductive) construction and manipulation of matrices</span><span>
9+</span><a name="line-9"></a><span class="hs-comment">-- in Haskell. See &lt;https://github.com/bolt12/master-thesis my Msc Thesis&gt; for the</span><span>
10+</span><a name="line-10"></a><span class="hs-comment">-- motivation behind the library, the underlying theory, and implementation details.</span><span>
11+</span><a name="line-11"></a><span class="hs-comment">--</span><span>
12+</span><a name="line-12"></a><span class="hs-comment">-- This module provides the 'Natural' data type.</span><span>
13+</span><a name="line-13"></a><span class="hs-comment">-- The semantic associated with this data type is that</span><span>
14+</span><a name="line-14"></a><span class="hs-comment">-- it's meant to be a restricted 'Int' value.</span><span>
15+</span><a name="line-15"></a><span class="hs-comment">--</span><span>
16+</span><a name="line-16"></a><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
17+</span><a name="line-17"></a><span>
18+</span><a name="line-18"></a><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">Utils</span><span>
19+</span><a name="line-19"></a><span> </span><span class="hs-special">(</span><span> </span><span class="hs-comment">-- | Utility module that provides the 'Natural' data type.</span><span>
20+</span><a name="line-20"></a><span> </span><span class="hs-comment">-- The semantic associated with this data type is that</span><span>
21+</span><a name="line-21"></a><span> </span><span class="hs-comment">-- it's meant to be a restricted 'Int' value. For example</span><span>
22+</span><a name="line-22"></a><span> </span><span class="hs-comment">-- the type @Natural 1 6@ can only be instanciated with @nat n@</span><span>
23+</span><a name="line-23"></a><span> </span><span class="hs-comment">-- where @1 &lt;= n &lt;= 6@. Why, You might ask, because with normal</span><span>
24+</span><a name="line-24"></a><span> </span><span class="hs-comment">-- 'Int's it is not possible to have a decent @Enum (Int, Int)@</span><span>
25+</span><a name="line-25"></a><span> </span><span class="hs-comment">-- instance. See the following probabilistic programming model as and</span><span>
26+</span><a name="line-26"></a><span> </span><span class="hs-comment">-- example:</span><span>
27+</span><a name="line-27"></a><span> </span><span class="hs-comment">--</span><span>
28+</span><a name="line-28"></a><span> </span><span class="hs-comment">-- We want to calculate the probability of the sum of two dice throws.</span><span>
29+</span><a name="line-29"></a><span> </span><span class="hs-comment">-- To do this we start by defining the sample space: </span><span>
30+</span><a name="line-30"></a><span> </span><span class="hs-comment">--</span><span>
31+</span><a name="line-31"></a><span> </span><span class="hs-comment">-- @</span><span>
32+</span><a name="line-32"></a><span> </span><span class="hs-comment">-- type SampleSpace = Int -- We think 'Int' are enough</span><span>
33+</span><a name="line-33"></a><span> </span><span class="hs-comment">--</span><span>
34+</span><a name="line-34"></a><span> </span><span class="hs-comment">-- die :: Dist Int 6</span><span>
35+</span><a name="line-35"></a><span> </span><span class="hs-comment">-- die = unifrom [1..6] </span><span>
36+</span><a name="line-36"></a><span> </span><span class="hs-comment">--</span><span>
37+</span><a name="line-37"></a><span> </span><span class="hs-comment">-- -- Promote 'Int' addition to a matrix</span><span>
38+</span><a name="line-38"></a><span> </span><span class="hs-comment">-- addM = fromF (uncurry (+)) -- Impossible</span><span>
39+</span><a name="line-39"></a><span> </span><span class="hs-comment">-- @</span><span>
40+</span><a name="line-40"></a><span> </span><span class="hs-comment">--</span><span>
41+</span><a name="line-41"></a><span> </span><span class="hs-comment">-- The last line is impossible because @(Int, Int)@ does not have</span><span>
42+</span><a name="line-42"></a><span> </span><span class="hs-comment">-- a good 'Enum' instance: @[(0, 1), (0, 2), .. (0, maxBound), (1, 0),</span><span>
43+</span><a name="line-43"></a><span> </span><span class="hs-comment">-- ..]@. And we'd like the addition matrix to be of 36 columns by 12</span><span>
44+</span><a name="line-44"></a><span> </span><span class="hs-comment">-- rows but limited to integers up to @6@!</span><span>
45+</span><a name="line-45"></a><span> </span><span class="hs-comment">--</span><span>
46+</span><a name="line-46"></a><span> </span><span class="hs-comment">-- One way to solve this issue is by defining and auxilary data type to</span><span>
47+</span><a name="line-47"></a><span> </span><span class="hs-comment">-- represent the sample space:</span><span>
48+</span><a name="line-48"></a><span> </span><span class="hs-comment">--</span><span>
49+</span><a name="line-49"></a><span> </span><span class="hs-comment">-- @</span><span>
50+</span><a name="line-50"></a><span> </span><span class="hs-comment">-- data SampleSpace = S1 | S2 | S3 | S4 | S5 | S6</span><span>
51+</span><a name="line-51"></a><span> </span><span class="hs-comment">-- deriving (Show, Eq, Enum, Bounded) -- Enum and Bounded are</span><span>
52+</span><a name="line-52"></a><span> </span><span class="hs-comment">-- important</span><span>
53+</span><a name="line-53"></a><span> </span><span class="hs-comment">-- @</span><span>
54+</span><a name="line-54"></a><span> </span><span class="hs-comment">--</span><span>
55+</span><a name="line-55"></a><span> </span><span class="hs-comment">-- And write the sample space addition function:</span><span>
56+</span><a name="line-56"></a><span> </span><span class="hs-comment">--</span><span>
57+</span><a name="line-57"></a><span> </span><span class="hs-comment">-- @</span><span>
58+</span><a name="line-58"></a><span> </span><span class="hs-comment">-- ssAdd :: SampleSpace -&gt; SampleSpace -&gt; Int</span><span>
59+</span><a name="line-59"></a><span> </span><span class="hs-comment">-- ssAdd a b = (fromEnum a + 1) + (fromEnum b + 1)</span><span>
60+</span><a name="line-60"></a><span> </span><span class="hs-comment">-- @</span><span>
61+</span><a name="line-61"></a><span> </span><span class="hs-comment">--</span><span>
62+</span><a name="line-62"></a><span> </span><span class="hs-comment">-- And then promote that function to matrix and everything is alright:</span><span>
63+</span><a name="line-63"></a><span> </span><span class="hs-comment">--</span><span>
64+</span><a name="line-64"></a><span> </span><span class="hs-comment">-- @</span><span>
65+</span><a name="line-65"></a><span> </span><span class="hs-comment">-- ssAddM = fromF' (uncurry ssAdd)</span><span>
66+</span><a name="line-66"></a><span> </span><span class="hs-comment">--</span><span>
67+</span><a name="line-67"></a><span> </span><span class="hs-comment">-- dieSumProb = ssAddM `comp` (khatri die die)</span><span>
68+</span><a name="line-68"></a><span> </span><span class="hs-comment">-- @</span><span>
69+</span><a name="line-69"></a><span> </span><span class="hs-comment">--</span><span>
70+</span><a name="line-70"></a><span> </span><span class="hs-comment">-- This is a nice solution for small sample spaces. But for larger ones </span><span>
71+</span><a name="line-71"></a><span> </span><span class="hs-comment">-- it is not feasible to write a data type with hundreds of constructors</span><span>
72+</span><a name="line-72"></a><span> </span><span class="hs-comment">-- and then write manipulation functions that need to deal with them.</span><span>
73+</span><a name="line-73"></a><span> </span><span class="hs-comment">-- To mitigate this limitation the 'Natural' type comes a long way and</span><span>
74+</span><a name="line-74"></a><span> </span><span class="hs-comment">-- allows one to model the sample in an easier way. See for instance:</span><span>
75+</span><a name="line-75"></a><span> </span><span class="hs-comment">--</span><span>
76+</span><a name="line-76"></a><span> </span><span class="hs-comment">-- @</span><span>
77+</span><a name="line-77"></a><span> </span><span class="hs-comment">-- ssAdd :: Natural 1 6 -&gt; Natural 1 6 -&gt; Natural 1 12</span><span>
78+</span><a name="line-78"></a><span> </span><span class="hs-comment">-- ssAdd = coerceNat (+) </span><span>
79+</span><a name="line-79"></a><span> </span><span class="hs-comment">-- </span><span>
80+</span><a name="line-80"></a><span> </span><span class="hs-comment">-- ssAddM = fromF' (uncurry sumSS)</span><span>
81+</span><a name="line-81"></a><span> </span><span class="hs-comment">-- </span><span>
82+</span><a name="line-82"></a><span> </span><span class="hs-comment">-- die :: Dist (Natural 1 6) 6</span><span>
83+</span><a name="line-83"></a><span> </span><span class="hs-comment">-- die = uniform [nat @1 @6 1 .. nat 6]</span><span>
84+</span><a name="line-84"></a><span> </span><span class="hs-comment">--</span><span>
85+</span><a name="line-85"></a><span> </span><span class="hs-comment">-- dieSumProb = ssAddM `comp` (khatri die die)</span><span>
86+</span><a name="line-86"></a><span> </span><span class="hs-comment">-- @</span><span>
87+</span><a name="line-87"></a><span> </span><span class="hs-comment">--</span><span>
88+</span><a name="line-88"></a><span> </span><span class="hs-comment">-- * 'Natural' data type</span><span>
89+</span><a name="line-89"></a><span> </span><a href="Utils.Internal.html#Natural"><span class="hs-identifier hs-type">Natural</span></a><span class="hs-special">,</span><span>
90+</span><a name="line-90"></a><span> </span><a href="Utils.Internal.html#nat"><span class="hs-identifier hs-var">nat</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">-- * Coerce auxiliar functions to help promote 'Int' typed functions to</span><span>
93+</span><a name="line-93"></a><span> </span><span class="hs-comment">-- 'Natural' typed functions.</span><span>
94+</span><a name="line-94"></a><span> </span><a href="Utils.Internal.html#coerceNat"><span class="hs-identifier hs-var">coerceNat</span></a><span class="hs-special">,</span><span>
95+</span><a name="line-95"></a><span> </span><a href="Utils.Internal.html#coerceNat2"><span class="hs-identifier hs-var">coerceNat2</span></a><span class="hs-special">,</span><span>
96+</span><a name="line-96"></a><span> </span><a href="Utils.Internal.html#coerceNat3"><span class="hs-identifier hs-var">coerceNat3</span></a><span class="hs-special">,</span><span>
97+</span><a name="line-97"></a><span> </span><span class="hs-special">)</span><span>
98+</span><a name="line-98"></a><span class="hs-keyword">where</span><span>
99+</span><a name="line-99"></a><span>
100+</span><a name="line-100"></a><span class="hs-keyword">import</span><span> </span><a href="Utils.Internal.html"><span class="hs-identifier">Utils.Internal</span></a><span>
101+</span><a name="line-101"></a></pre></body></html>
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/highlight.jsnew file+27
@@ -0,0 +1,27 @@
1+
2+var highlight = function (on) {
3+ return function () {
4+ var links = document.getElementsByTagName('a');
5+ for (var i = 0; i < links.length; i++) {
6+ var that = links[i];
7+
8+ if (this.href != that.href) {
9+ continue;
10+ }
11+
12+ if (on) {
13+ that.classList.add("hover-highlight");
14+ } else {
15+ that.classList.remove("hover-highlight");
16+ }
17+ }
18+ }
19+};
20+
21+window.onload = function () {
22+ var links = document.getElementsByTagName('a');
23+ for (var i = 0; i < links.length; i++) {
24+ links[i].onmouseover = highlight(true);
25+ links[i].onmouseout = highlight(false);
26+ }
27+};
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/src/style.cssnew file+55
@@ -0,0 +1,55 @@
1+body {
2+ background-color: #fdf6e3;
3+}
4+
5+.hs-identifier {
6+ color: #073642;
7+}
8+
9+.hs-identifier.hs-var {
10+}
11+
12+.hs-identifier.hs-type {
13+ color: #5f5faf;
14+}
15+
16+.hs-keyword {
17+ color: #af005f;
18+}
19+
20+.hs-string, .hs-char {
21+ color: #cb4b16;
22+}
23+
24+.hs-number {
25+ color: #268bd2;
26+}
27+
28+.hs-operator {
29+ color: #d33682;
30+}
31+
32+.hs-glyph, .hs-special {
33+ color: #dc322f;
34+}
35+
36+.hs-comment {
37+ color: #8a8a8a;
38+}
39+
40+.hs-pragma {
41+ color: #2aa198;
42+}
43+
44+.hs-cpp {
45+ color: #859900;
46+}
47+
48+a:link, a:visited {
49+ text-decoration: none;
50+ border-bottom: 1px solid #eee8d5;
51+}
52+
53+a:hover, a.hover-highlight {
54+ background-color: #eee8d5;
55+}
build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/doc/html/laop-0.1.0.0-docs/synopsis.pngnew file

Binary file not shown.

build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/package.conf.inplace/package.cachenew file

Binary file not shown.

build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/package.conf.inplace/package.cache.locknew file

No changes to the content.

build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/setup-confignew file

Binary file not shown.

cache/compilernew file

Binary file not shown.

cache/confignew file

Binary file not shown.

cache/elaborated-plannew file

Binary file not shown.

cache/improved-plannew file

Binary file not shown.

cache/plan.jsonnew file+1
@@ -0,0 +1 @@
1+{"cabal-version":"2.4.1.0","cabal-lib-version":"2.4.1.0","compiler-id":"ghc-8.6.5","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"array-0.5.3.0","pkg-name":"array","pkg-version":"0.5.3.0","depends":["base-4.12.0.0"]},{"type":"pre-existing","id":"base-4.12.0.0","pkg-name":"base","pkg-version":"4.12.0.0","depends":["ghc-prim-0.5.3","integer-gmp-1.0.2.0","rts"]},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.3.0","base-4.12.0.0"]},{"type":"pre-existing","id":"ghc-prim-0.5.3","pkg-name":"ghc-prim","pkg-version":"0.5.3","depends":["rts"]},{"type":"pre-existing","id":"integer-gmp-1.0.2.0","pkg-name":"integer-gmp","pkg-version":"1.0.2.0","depends":["ghc-prim-0.5.3"]},{"type":"configured","id":"laop-0.1.0.0-inplace","pkg-name":"laop","pkg-version":"0.1.0.0","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/."},"dist-dir":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0","depends":["base-4.12.0.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"laop-0.1.0.0-inplace-laop-exe","pkg-name":"laop","pkg-version":"0.1.0.0","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/."},"dist-dir":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/x/laop-exe","depends":["base-4.12.0.0","deepseq-1.4.4.0","laop-0.1.0.0-inplace"],"exe-depends":[],"component-name":"exe:laop-exe","bin-file":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/x/laop-exe/build/laop-exe/laop-exe"},{"type":"configured","id":"laop-0.1.0.0-inplace-laop-test","pkg-name":"laop","pkg-version":"0.1.0.0","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/."},"dist-dir":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/t/laop-test","depends":["base-4.12.0.0","laop-0.1.0.0-inplace"],"exe-depends":[],"component-name":"test:laop-test","bin-file":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/t/laop-test/build/laop-test/laop-test"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0","depends":[]}]}
cache/solver-plannew file

Binary file not shown.

cache/source-hashesnew file

Binary file not shown.

cache/up-to-datenew file

Binary file not shown.

dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script/build/script/autogen/Paths_fake_package.hsnew file+50
@@ -0,0 +1,50 @@
1+{-# LANGUAGE CPP #-}
2+{-# LANGUAGE NoRebindableSyntax #-}
3+{-# OPTIONS_GHC -fno-warn-missing-import-lists #-}
4+module Paths_fake_package (
5+ version,
6+ getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir,
7+ getDataFileName, getSysconfDir
8+ ) where
9+
10+import qualified Control.Exception as Exception
11+import Data.Version (Version(..))
12+import System.Environment (getEnv)
13+import Prelude
14+
15+#if defined(VERSION_base)
16+
17+#if MIN_VERSION_base(4,0,0)
18+catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a
19+#else
20+catchIO :: IO a -> (Exception.Exception -> IO a) -> IO a
21+#endif
22+
23+#else
24+catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a
25+#endif
26+catchIO = Exception.catch
27+
28+version :: Version
29+version = Version [0] []
30+bindir, libdir, dynlibdir, datadir, libexecdir, sysconfdir :: FilePath
31+
32+bindir = "/home/bolt/.cabal/bin"
33+libdir = "/home/bolt/.cabal/lib/x86_64-linux-ghc-8.6.5/fake-package-0-inplace-script"
34+dynlibdir = "/home/bolt/.cabal/lib/x86_64-linux-ghc-8.6.5"
35+datadir = "/home/bolt/.cabal/share/x86_64-linux-ghc-8.6.5/fake-package-0"
36+libexecdir = "/home/bolt/.cabal/libexec/x86_64-linux-ghc-8.6.5/fake-package-0"
37+sysconfdir = "/home/bolt/.cabal/etc"
38+
39+getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, getSysconfDir :: IO FilePath
40+getBinDir = catchIO (getEnv "fake_package_bindir") (\_ -> return bindir)
41+getLibDir = catchIO (getEnv "fake_package_libdir") (\_ -> return libdir)
42+getDynLibDir = catchIO (getEnv "fake_package_dynlibdir") (\_ -> return dynlibdir)
43+getDataDir = catchIO (getEnv "fake_package_datadir") (\_ -> return datadir)
44+getLibexecDir = catchIO (getEnv "fake_package_libexecdir") (\_ -> return libexecdir)
45+getSysconfDir = catchIO (getEnv "fake_package_sysconfdir") (\_ -> return sysconfdir)
46+
47+getDataFileName :: FilePath -> IO FilePath
48+getDataFileName name = do
49+ dir <- getDataDir
50+ return (dir ++ "/" ++ name)
dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script/build/script/autogen/cabal_macros.hnew file+118
@@ -0,0 +1,118 @@
1+/* DO NOT EDIT: This file is automatically generated by Cabal */
2+
3+/* package fake-package-0 */
4+#ifndef VERSION_fake_package
5+#define VERSION_fake_package "0"
6+#endif /* VERSION_fake_package */
7+#ifndef MIN_VERSION_fake_package
8+#define MIN_VERSION_fake_package(major1,major2,minor) (\
9+ (major1) < 0 || \
10+ (major1) == 0 && (major2) < 0 || \
11+ (major1) == 0 && (major2) == 0 && (minor) <= 0)
12+#endif /* MIN_VERSION_fake_package */
13+
14+/* tool gcc-9.2.0 */
15+#ifndef TOOL_VERSION_gcc
16+#define TOOL_VERSION_gcc "9.2.0"
17+#endif /* TOOL_VERSION_gcc */
18+#ifndef MIN_TOOL_VERSION_gcc
19+#define MIN_TOOL_VERSION_gcc(major1,major2,minor) (\
20+ (major1) < 9 || \
21+ (major1) == 9 && (major2) < 2 || \
22+ (major1) == 9 && (major2) == 2 && (minor) <= 0)
23+#endif /* MIN_TOOL_VERSION_gcc */
24+
25+/* tool ghc-8.6.5 */
26+#ifndef TOOL_VERSION_ghc
27+#define TOOL_VERSION_ghc "8.6.5"
28+#endif /* TOOL_VERSION_ghc */
29+#ifndef MIN_TOOL_VERSION_ghc
30+#define MIN_TOOL_VERSION_ghc(major1,major2,minor) (\
31+ (major1) < 8 || \
32+ (major1) == 8 && (major2) < 6 || \
33+ (major1) == 8 && (major2) == 6 && (minor) <= 5)
34+#endif /* MIN_TOOL_VERSION_ghc */
35+
36+/* tool ghc-pkg-8.6.5 */
37+#ifndef TOOL_VERSION_ghc_pkg
38+#define TOOL_VERSION_ghc_pkg "8.6.5"
39+#endif /* TOOL_VERSION_ghc_pkg */
40+#ifndef MIN_TOOL_VERSION_ghc_pkg
41+#define MIN_TOOL_VERSION_ghc_pkg(major1,major2,minor) (\
42+ (major1) < 8 || \
43+ (major1) == 8 && (major2) < 6 || \
44+ (major1) == 8 && (major2) == 6 && (minor) <= 5)
45+#endif /* MIN_TOOL_VERSION_ghc_pkg */
46+
47+/* tool haddock-2.22.0 */
48+#ifndef TOOL_VERSION_haddock
49+#define TOOL_VERSION_haddock "2.22.0"
50+#endif /* TOOL_VERSION_haddock */
51+#ifndef MIN_TOOL_VERSION_haddock
52+#define MIN_TOOL_VERSION_haddock(major1,major2,minor) (\
53+ (major1) < 2 || \
54+ (major1) == 2 && (major2) < 22 || \
55+ (major1) == 2 && (major2) == 22 && (minor) <= 0)
56+#endif /* MIN_TOOL_VERSION_haddock */
57+
58+/* tool hpc-0.67 */
59+#ifndef TOOL_VERSION_hpc
60+#define TOOL_VERSION_hpc "0.67"
61+#endif /* TOOL_VERSION_hpc */
62+#ifndef MIN_TOOL_VERSION_hpc
63+#define MIN_TOOL_VERSION_hpc(major1,major2,minor) (\
64+ (major1) < 0 || \
65+ (major1) == 0 && (major2) < 67 || \
66+ (major1) == 0 && (major2) == 67 && (minor) <= 0)
67+#endif /* MIN_TOOL_VERSION_hpc */
68+
69+/* tool hsc2hs-0.68.5 */
70+#ifndef TOOL_VERSION_hsc2hs
71+#define TOOL_VERSION_hsc2hs "0.68.5"
72+#endif /* TOOL_VERSION_hsc2hs */
73+#ifndef MIN_TOOL_VERSION_hsc2hs
74+#define MIN_TOOL_VERSION_hsc2hs(major1,major2,minor) (\
75+ (major1) < 0 || \
76+ (major1) == 0 && (major2) < 68 || \
77+ (major1) == 0 && (major2) == 68 && (minor) <= 5)
78+#endif /* MIN_TOOL_VERSION_hsc2hs */
79+
80+/* tool pkg-config-1.6.3 */
81+#ifndef TOOL_VERSION_pkg_config
82+#define TOOL_VERSION_pkg_config "1.6.3"
83+#endif /* TOOL_VERSION_pkg_config */
84+#ifndef MIN_TOOL_VERSION_pkg_config
85+#define MIN_TOOL_VERSION_pkg_config(major1,major2,minor) (\
86+ (major1) < 1 || \
87+ (major1) == 1 && (major2) < 6 || \
88+ (major1) == 1 && (major2) == 6 && (minor) <= 3)
89+#endif /* MIN_TOOL_VERSION_pkg_config */
90+
91+/* tool runghc-8.6.5 */
92+#ifndef TOOL_VERSION_runghc
93+#define TOOL_VERSION_runghc "8.6.5"
94+#endif /* TOOL_VERSION_runghc */
95+#ifndef MIN_TOOL_VERSION_runghc
96+#define MIN_TOOL_VERSION_runghc(major1,major2,minor) (\
97+ (major1) < 8 || \
98+ (major1) == 8 && (major2) < 6 || \
99+ (major1) == 8 && (major2) == 6 && (minor) <= 5)
100+#endif /* MIN_TOOL_VERSION_runghc */
101+
102+/* tool strip-2.33 */
103+#ifndef TOOL_VERSION_strip
104+#define TOOL_VERSION_strip "2.33"
105+#endif /* TOOL_VERSION_strip */
106+#ifndef MIN_TOOL_VERSION_strip
107+#define MIN_TOOL_VERSION_strip(major1,major2,minor) (\
108+ (major1) < 2 || \
109+ (major1) == 2 && (major2) < 33 || \
110+ (major1) == 2 && (major2) == 33 && (minor) <= 0)
111+#endif /* MIN_TOOL_VERSION_strip */
112+
113+#ifndef CURRENT_COMPONENT_ID
114+#define CURRENT_COMPONENT_ID "fake-package-0-inplace-script"
115+#endif /* CURRENT_COMPONENT_ID */
116+#ifndef CURRENT_PACKAGE_VERSION
117+#define CURRENT_PACKAGE_VERSION "0"
118+#endif /* CURRENT_PACKAGE_VERSION */
dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script/cache/confignew file

Binary file not shown.

dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script/package.conf.inplace/package.cachenew file

Binary file not shown.

dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script/package.conf.inplace/package.cache.locknew file

No changes to the content.

dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script/setup-confignew file

Binary file not shown.

dist-newstyle/cache/compilernew file

Binary file not shown.

dist-newstyle/cache/confignew file

Binary file not shown.

dist-newstyle/cache/elaborated-plannew file

Binary file not shown.

dist-newstyle/cache/improved-plannew file

Binary file not shown.

dist-newstyle/cache/plan.jsonnew file+1
@@ -0,0 +1 @@
1+{"cabal-version":"2.4.1.0","cabal-lib-version":"2.4.1.0","compiler-id":"ghc-8.6.5","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"array-0.5.3.0","pkg-name":"array","pkg-version":"0.5.3.0","depends":["base-4.12.0.0"]},{"type":"pre-existing","id":"base-4.12.0.0","pkg-name":"base","pkg-version":"4.12.0.0","depends":["ghc-prim-0.5.3","integer-gmp-1.0.2.0","rts"]},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.3.0","base-4.12.0.0"]},{"type":"configured","id":"fake-package-0-inplace-script","pkg-name":"fake-package","pkg-version":"0","flags":{},"style":"local","pkg-src":{"type":"local","path":"/tmp/cabal-repl.-15730"},"dist-dir":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script","depends":[],"exe-depends":[],"component-name":"exe:script","bin-file":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/dist-newstyle/build/x86_64-linux/ghc-8.6.5/fake-package-0/x/script/build/script/script"},{"type":"pre-existing","id":"ghc-prim-0.5.3","pkg-name":"ghc-prim","pkg-version":"0.5.3","depends":["rts"]},{"type":"pre-existing","id":"integer-gmp-1.0.2.0","pkg-name":"integer-gmp","pkg-version":"1.0.2.0","depends":["ghc-prim-0.5.3"]},{"type":"configured","id":"laop-0.1.0.0-inplace","pkg-name":"laop","pkg-version":"0.1.0.0","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/."},"dist-dir":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/dist-newstyle/build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0","depends":["base-4.12.0.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"laop-0.1.0.0-inplace-laop-exe","pkg-name":"laop","pkg-version":"0.1.0.0","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/."},"dist-dir":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/dist-newstyle/build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/x/laop-exe","depends":["base-4.12.0.0","deepseq-1.4.4.0","laop-0.1.0.0-inplace"],"exe-depends":[],"component-name":"exe:laop-exe","bin-file":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/dist-newstyle/build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/x/laop-exe/build/laop-exe/laop-exe"},{"type":"configured","id":"laop-0.1.0.0-inplace-laop-test","pkg-name":"laop","pkg-version":"0.1.0.0","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/."},"dist-dir":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/dist-newstyle/build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/t/laop-test","depends":["base-4.12.0.0","laop-0.1.0.0-inplace"],"exe-depends":[],"component-name":"test:laop-test","bin-file":"/home/bolt/Desktop/Bolt/Playground/Haskell/laop/dist-newstyle/build/x86_64-linux/ghc-8.6.5/laop-0.1.0.0/t/laop-test/build/laop-test/laop-test"},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0","depends":[]}]}
dist-newstyle/cache/solver-plannew file

Binary file not shown.

dist-newstyle/cache/source-hashesnew file

Binary file not shown.

dist-newstyle/cache/up-to-datenew file

Binary file not shown.

dist-newstyle/packagedb/ghc-8.6.5/package.cachenew file

Binary file not shown.

dist-newstyle/packagedb/ghc-8.6.5/package.cache.locknew file

No changes to the content.

dist/cabal-config-flagsnew file

Binary file not shown.

dist/laop-0.1.0.0.tar.gznew file

Binary file not shown.

dist/setup-confignew file

Binary file not shown.

hackage.shnew file+10
@@ -0,0 +1,10 @@
1+#!/bin/sh
2+set -e
3+
4+dir=$(mktemp -d dist-docs.XXXXXX)
5+trap 'rm -r "$dir"' EXIT
6+
7+# assumes cabal 2.4 or later
8+cabal v2-haddock --builddir="$dir" --haddock-for-hackage --enable-doc
9+
10+cabal upload -d $dir/*-docs.tar.gz
laop-0.1.0.0-docs.tar.gznew file

Binary file not shown.

packagedb/ghc-8.6.5/package.cachenew file

Binary file not shown.

packagedb/ghc-8.6.5/package.cache.locknew file

No changes to the content.

src/LAoP/Relation/Internal.hs+96−1
@@ -97,6 +97,8 @@ module LAoP.Relation.Internal
9797 divR,
9898 divL,
9999 divS,
100+ shrunkBy,
101+ overriddenBy,
100102
101103 -- * Relational pairing
102104 splitR,
@@ -132,8 +134,13 @@ module LAoP.Relation.Internal
132134 equivalence,
133135 partialEquivalence,
134136
137+ -- * Conditionals
138+ equalizer,
139+
135140 -- ** McCarthy's Conditional
136− -- cond,
141+ predR,
142+ guard,
143+ cond,
137144
138145 -- * Relational composition and lifting
139146 identity,
@@ -143,6 +150,7 @@ module LAoP.Relation.Internal
143150
144151 -- ** Relational application
145152 pointAp,
153+ pointApBool,
146154
147155 -- * Matrix printing
148156 pretty,
@@ -387,6 +395,30 @@ divL (R x) (R y) = R (I.divL x y)
387395divS :: Relation c a -> Relation b a -> Relation c b
388396divS (R x) (R y) = R (I.divS x y)
389397
398+-- | Relational shrinking.
399+--
400+-- @r `'shrunkBy'` s@ is the largest part of @r@ such that,
401+-- if it yields an output for an input @x@, it must be a maximum,
402+-- with respect to @s@, among all possible outputs of @x@ by @r@.
403+shrunkBy :: Relation b a -> Relation a a -> Relation b a
404+shrunkBy r s = r `intersection` divR s (conv r)
405+
406+-- | Relational overriding.
407+--
408+-- @r `'overriddenBy'` s@ yields the relation which contains the
409+-- whole of @s@ and that part of @r@ where @s@ is undefined.
410+--
411+-- @
412+-- 'zeros' `'overriddenBy'` s == s
413+-- r `'overriddenBy'` 'zeros' == r
414+-- r `'overriddenBy'` r == r
415+-- @
416+overriddenBy ::
417+ ( I.FromLists Boolean (I.Normalize b) (I.Normalize b),
418+ KnownNat (I.Count (I.Normalize b))
419+ ) => Relation a b -> Relation a b -> Relation a b
420+overriddenBy r s = s `union` r `intersection` divR zeros (conv s)
421+
390422-- | Relational application
391423pointAp ::
392424 ( Bounded a,
@@ -402,6 +434,21 @@ pointAp ::
402434 ) => a -> b -> Relation a b -> Relation One One
403435pointAp a b r = conv (point b) `comp` r `comp` point a
404436
437+-- | Relational application
438+pointApBool ::
439+ ( Bounded a,
440+ Bounded b,
441+ Enum a,
442+ Enum b,
443+ Eq a,
444+ Eq b,
445+ KnownNat (I.Count (I.Normalize a)),
446+ KnownNat (I.Count (I.Normalize b)),
447+ I.FromLists Boolean (I.Normalize a) One,
448+ I.FromLists Boolean (I.Normalize b) One
449+ ) => a -> b -> Relation a b -> Bool
450+pointApBool a b r = toBool $ conv (point b) `comp` r `comp` point a
451+
405452-- | Relational converse
406453conv :: Relation a b -> Relation b a
407454conv (R a) = R (I.tr a)
@@ -733,6 +780,54 @@ untrans ::
733780 => Relation a (c, b) -> Relation (a, b) c
734781untrans s = p1 `comp` conv (splitR (conv s) p2)
735782
783+-- | Transforms predicate @p@ into a correflexive relation.
784+predR ::
785+ ( Bounded a,
786+ Enum a,
787+ KnownNat (I.Count (I.Normalize a)),
788+ I.FromLists Boolean (I.Normalize a) (I.Normalize a),
789+ I.FromLists Boolean (I.Normalize Bool) (I.Normalize a)
790+ )
791+ => (a -> Bool) -> Relation a a
792+predR p = identity `intersection` divisionF (fromF' (const True)) (fromF' p)
793+
794+-- | Equalizes functions @f@ and @g@.
795+-- That is, @'equalizer' f g@ is the largest coreflexive
796+-- that restricts @g@ so that @f@ and @g@ yield the same outputs.
797+equalizer ::
798+ ( KnownNat (I.Count (I.Normalize a)),
799+ I.FromLists Boolean (I.Normalize a) (I.Normalize a)
800+ )
801+ => Relation a b -> Relation a b -> Relation a a
802+equalizer f g = identity `intersection` divisionF f g
803+
804+-- | Relational conditional guard.
805+--
806+-- @
807+-- 'guard' p = 'i2' `'overriddenBy'` 'i1' `'comp'` 'predR' p
808+-- @
809+guard ::
810+ ( Bounded b,
811+ Enum b,
812+ KnownNat (I.Count (I.Normalize b)),
813+ I.FromLists Boolean (I.Normalize b) (I.Normalize b),
814+ I.FromLists Boolean (I.Normalize Bool) (I.Normalize b),
815+ I.Normalize (Either b b) ~ Either (I.Normalize b) (I.Normalize b)
816+ ) => (b -> Bool) -> Relation b (Either b b)
817+guard p = conv (eitherR (predR p) (predR (not . p)))
818+
819+-- | Relational McCarthy's conditional.
820+cond ::
821+ ( Bounded b,
822+ Enum b,
823+ KnownNat (I.Count (I.Normalize b)),
824+ I.FromLists Boolean (I.Normalize b) (I.Normalize b),
825+ I.FromLists Boolean (I.Normalize Bool) (I.Normalize b),
826+ I.Normalize (Either b b) ~ Either (I.Normalize b) (I.Normalize b)
827+ )
828+ => (b -> Bool) -> Relation b c -> Relation b c -> Relation b c
829+cond p r s = eitherR r s `comp` guard p
830+
736831-- Relation pretty print
737832
738833-- | Relation pretty printing