from haskell to hardware via cccs - department of computer ... · from haskell to hardware via cccs...
TRANSCRIPT
![Page 1: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/1.jpg)
From Haskell to Hardware via CCCs
Conal Elliott
Tabula
August, 2014
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 1 / 57
![Page 2: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/2.jpg)
Tabula
Founded by Steve Teig about 10 years ago.
Post-FPGA reconfigurable hardware.
Spacetime architecture:
3D for shorter paths
Implemented by rapid reconfiguration (2GHz)
Minkowski spacetime (special relativity)
Spacetime layout with causality constraints
Very high sustained throughput
Tremendous flexibility for moving computations in space & time
Program in a non-sequential language: Haskell
Compiler developed openly and shared freely
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 2 / 57
![Page 3: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/3.jpg)
Example
square :: Num a ñ a Ñ a
square a “ a ˚ a
sumSquare :: pFunctor f ,Foldable f ,Num aq ñ f a Ñ a
sumSquare “ sum ˝ fmap square
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 3 / 57
![Page 4: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/4.jpg)
sumSquare :: Tree2 Int Ñ Int
sumSquare “ sum ˝ fmap square
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
32
add
32
32
add
32
32
Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 4 / 57
![Page 5: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/5.jpg)
sumSquare :: Tree2 Int Ñ Int
module sumSquare-t2 (In_0, In_1, In_2, In_3, Out);
input [0:31] In_0;
input [0:31] In_1;
input [0:31] In_2;
input [0:31] In_3;
output [0:31] Out;
wire [0:31] w_mul_I1;
wire [0:31] w_mul_I2;
wire [0:31] w_mul_I3;
wire [0:31] w_mul_I4;
wire [0:31] w_add_I5;
wire [0:31] w_add_I6;
wire [0:31] w_add_I7;
assign w_mul_I1 = In_0 * In_0;
assign w_mul_I2 = In_1 * In_1;
assign w_mul_I3 = In_2 * In_2;
assign w_mul_I4 = In_3 * In_3;
assign w_add_I5 = w_mul_I1 + w_mul_I2;
assign w_add_I6 = w_mul_I3 + w_mul_I4;
assign w_add_I7 = w_add_I5 + w_add_I6;
assign Out = w_add_I7;
endmodule
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
32
add
32
32
add
32
32
Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 5 / 57
![Page 6: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/6.jpg)
sumSquare :: Tree3 Int Ñ Int
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32 Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 6 / 57
![Page 7: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/7.jpg)
sumSquare :: Tree4 Int Ñ Int
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul 32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
add
32
add
32
32
add
32
add
32
32
32
32 Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 7 / 57
![Page 8: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/8.jpg)
How it works
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 8 / 57
![Page 9: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/9.jpg)
Overall plan
Convert Haskell to Core (GHC).
Monomorphize.
Convert to abstract vocabulary.
Interpret as circuits.
Synthesize & optimize with existing HDL machinery.
Initial simplifications:
Shape-typed data
Combinational
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 9 / 57
![Page 10: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/10.jpg)
GHC Core
data Expr b -- “b” for the type of binders,
“ Var Id
| Lit Literal
| App pExpr bq pExpr bq
| Lam b pExpr bq
| Let pBind bq pExpr bq
| Case pExpr bq b Type rAlt b s
| Cast pExpr bq Coercion
| Type Type
type Alt b “ pAltCon, rb s,Expr bq
data AltCon “ DataAlt DataCon | LitAlt Literal | DEFAULT
data Bind b “ NonRec b pExpr bq | Rec rpb,Expr bqs
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 10 / 57
![Page 11: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/11.jpg)
Overloading lambda
Powerful abstraction mechanisms:
Lambda/application
Type classes
Can we use type classes to generalize lambda & application?
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 11 / 57
![Page 12: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/12.jpg)
(Bi-)Cartesian closed categories
Category: identity and composition
Cartesian: products
Co-Cartesian: coproducts (“sums”)
Closed: exponentials (arrows as “values”)
Suffices for translating typed lambda calculus (J. Lambek, 1980).
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 12 / 57
![Page 13: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/13.jpg)
Category
Interface:
class Category p;q where
id :: a ; a
p˝q :: pb ; cq Ñ pa ; bq Ñ pa ; cq
Laws:
id ˝ f ” f
g ˝ id ” g
ph ˝ gq ˝ f ” h ˝ pg ˝ f q
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 13 / 57
![Page 14: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/14.jpg)
Products
class Category p;q ñ ProductCat p;q where
type a ˆ; b
exl :: pa ˆ; bq; a
exr :: pa ˆ; bq; b
pŸq :: pa ; cq Ñ pa ; dq Ñ pa ; pc ˆ; dqq
p̂ q :: pa ; cq Ñ pb ; dq Ñ ppa ˆ; bq; pc ˆ; dqq
f ˆg “ pf ˝ exlq Ÿ pg ˝ exrq
Laws:
exl ˝ pf Ÿ gq ” f
exr ˝ pf Ÿ gq ” g
exl ˝ h Ÿ exr ˝ h ” h
exl Ÿ exr ” id
pf ˆgq ˝ ph Ÿ kq ” pf ˝ hq Ÿ pg ˝ kq
idˆid ” id
pf ˆgq ˝ phˆkq ” pf ˝ hqˆpg ˝ kq
pf Ÿ gq ˝ h ” pf ˝ hq Ÿ pg ˝ hq
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 14 / 57
![Page 15: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/15.jpg)
Coproducts
class Category p;q ñ CoproductCat p;q where
type a ;̀ b
inl :: a ; pa ;̀ bq
inr :: b ; pa ;̀ bq
pŹq :: pa ; cq Ñ pb ; cq Ñ ppa ;̀ bq; cq
p̀ q :: pa ; cq Ñ pb ; dq Ñ ppa ;̀ bq; pc ;̀ dqq
f `g “ pinl ˝ f q Ź pinr ˝ gq
Laws (dual to product):
pf Ź gq ˝ inl ” f
pf Ź gq ˝ inr ” g
h ˝ inl Ź h ˝ inr ” h
inl Ź inr ” id
ph Ź kq ˝ pf `gq ” ph ˝ f q Ź pk ˝ gq
id`id ” id
ph`kq ˝ pf `gq ” ph ˝ f q`pk ˝ gq
h ˝ pf Ź gq ” ph ˝ f q Ź ph ˝ gq
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 15 / 57
![Page 16: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/16.jpg)
Exponentials
class ProductCat p;q ñ ClosedCat p;q where
type a ñ; b
apply :: ppa ñ; bq ˆ; aq; b
curry :: ppa ˆ; bq; cq Ñ pa ; pb ñ; cqq
uncurry :: pa ; pb ñ; cqq Ñ pa ˆ; bq; c
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 16 / 57
![Page 17: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/17.jpg)
Lambda terms
data E :: ˚ Ñ ˚ where
Var :: V a Ñ E a
Const :: Prim a Ñ E a
App :: E pa Ñ bq Ñ E a Ñ E b
Lam :: Pat a Ñ E b Ñ E pa Ñ bq
data Pat :: ˚ Ñ ˚ where
UnitPat :: Pat pq
VarPat :: V a Ñ Pat a
PairPat :: Pat a Ñ Pat b Ñ Pat pa ˆ bq
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 17 / 57
![Page 18: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/18.jpg)
Lambda to CCC
pλp Ñ kq 99K const k -- v not free in k
pλp Ñ vq 99K ... -- accessor
pλp Ñ u vq 99K apply ˝ ppλp Ñ uq Ÿ pλp Ñ vqq
pλp Ñ λq Ñ uq 99K curry pλpp, qq Ñ uq
convert :: CCC p;q ñ Pat a Ñ E b Ñ pa ; bq
convert pConst x q “ constArrow x
convert p pVar vq “ convertVar p v
convert p pApp u vq “ apply ˝ pconvert p u Ÿ convert p vq
convert p pLam q eq “ curry pconvert pPairPat p qq eq
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 18 / 57
![Page 19: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/19.jpg)
Lambda to CCC
pλp Ñ kq 99K const k -- v not free in k
pλp Ñ vq 99K ... -- accessor
pλp Ñ u vq 99K apply ˝ ppλp Ñ uq Ÿ pλp Ñ vqq
pλp Ñ λq Ñ uq 99K curry pλpp, qq Ñ uq
convert :: CCC p;q ñ Pat a Ñ E b Ñ pa ; bq
convert pConst x q “ constArrow x
convert p pVar vq “ convertVar p v
convert p pApp u vq “ apply ˝ pconvert p u Ÿ convert p vq
convert p pLam q eq “ curry pconvert pPairPat p qq eq
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 18 / 57
![Page 20: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/20.jpg)
Circuit CCC
data Comp “ @a b.Comp pPrim a bq pBuses aq pBuses bq
type CircuitM “WriterT pSeq Compq pState BusSupplyq
newtype a � b “ Circ pBuses a Ñ CircuitM pBuses bqq
instance Category p�q where ...
instance ProductCat p�q where ...
instance ClosedCat p�q where ...
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 19 / 57
![Page 21: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/21.jpg)
Examples
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 20 / 57
![Page 22: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/22.jpg)
sumSquare :: Tree2 Int Ñ Int
sumSquare “ sum ˝ fmap square
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
32
add
32
32
add
32
32
Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 21 / 57
![Page 23: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/23.jpg)
sumSquare :: Tree2 Int Ñ Int
uncurry (apply . (curry (apply . (curry (apply . (curry (apply . (curry (curry
(apply . (curry (apply . (apply . (curry (curry (uncurry add) . exr) . it &&&
apply . (curry (repr . exr) . it &&& apply . (((((id . exr) . exl) . exl) . exl)
. id *** (id . exl) . id))) &&& apply . (curry (repr . exr) . it &&& apply .
(((((id . exr) . exl) . exl) . exl) . id *** (id . exr) . id)))) &&& apply .
(curry (repr . exr) . it &&& apply . (curry (apply . (curry (abst . exr) . it
&&& apply . (apply . (curry (curry id . exr) . it &&& apply . (((id . exr) .
exl) . id *** (id . exl) . id)) &&& apply . (((id . exr) . exl) . id *** (id .
exr) . id)))) &&& apply . (curry (repr . exr) . it &&& apply . (curry (repr .
exr) . it &&& id . exr))))))) &&& curry (apply . (curry (abst . exr) . it &&&
apply . (curry (apply . (curry (abst . exr) . it &&& apply . (apply . (curry
(curry id . exr) . it &&& apply . (((id . exr) . exl) . id *** (id . exl) . id))
&&& apply . (((id . exr) . exl) . id *** (id . exr) . id)))) &&& apply . (curry
(repr . exr) . it &&& apply . (curry (repr . exr) . it &&& id . exr))))))) &&&
curry (apply . (curry (apply . (curry (abst . exr) . it &&& apply . (apply .
(curry (curry (uncurry mul) . exr) . it &&& id . exr) &&& id . exr))) &&& apply
. (curry (repr . exr) . it &&& id . exr))))) &&& curry (apply . (curry (apply .
(curry (abst . exr) . it &&& apply . (apply . (curry (curry (uncurry add) . exr)
. it &&& apply . (curry (repr . exr) . it &&& apply . (((id . exr) . exl) . id
*** (id . exl) . id))) &&& apply . (curry (repr . exr) . it &&& apply . (((id .
exr) . exl) . id *** (id . exr) . id))))) &&& apply . (curry (repr . exr) . it
&&& apply . (curry (repr . exr) . it &&& id . exr)))))) &&& curry (apply .
(curry (abst . exr) . it &&& apply . (curry (repr . exr) . it &&& id . exr)))))
. (it &&& id)
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 22 / 57
![Page 24: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/24.jpg)
λpa, bq Ñ a ` b :: Int
In
add
32
32
Out32
module sum-2 (In_0, In_1, Out);
input [0:31] In_0;
input [0:31] In_1;
output [0:31] Out;
wire [0:31] w_add_I1;
assign w_add_I1 = In_0 + In_1;
assign Out = w_add_I1;
endmodule
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 23 / 57
![Page 25: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/25.jpg)
λpa, b, c, dq Ñ a ` b ` c ` d :: Int
In
add
32
32
add 32
add
32
32
32
Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 24 / 57
![Page 26: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/26.jpg)
λpa, b, c, dq Ñ pa ` bq ` pc ` dq :: Int
In
add
32
32
add
32
32
add
32
32
Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 25 / 57
![Page 27: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/27.jpg)
Uniform pairs
data Pair a “ a :# a
Functor , Applicative, Monad , Foldable, Traversable (transpose).
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 26 / 57
![Page 28: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/28.jpg)
sum :: Pair Int Ñ Int
In
add
32
32
Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 27 / 57
![Page 29: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/29.jpg)
sumSquare :: Pair Int Ñ Int
In
mul
32
32
mul
32
32
add
32
32
Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 28 / 57
![Page 30: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/30.jpg)
Length-typed vectors
data Vec :: Nat Ñ ˚ Ñ ˚ where
ZVec :: Vec0 a
pŸq :: a Ñ Vecn a Ñ Vec1`n a
instance Functor pVecnq where
fmap ZVec “ ZVec
fmap f pa Ÿ uq “ f a Ÿ fmap f u
instance Foldable pVecnq where
foldMap ZVec “ ε
foldMap h pa Ÿ asq “ h a ‘ foldMap h as
And Applicative, Monad , Traversable.
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 29 / 57
![Page 31: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/31.jpg)
Length-typed vectors
data Vec :: Nat Ñ ˚ Ñ ˚ where
ZVec :: Vec0 a
pŸq :: a Ñ Vecn a Ñ Vec1`n a
instance Functor pVecnq where
fmap ZVec “ ZVec
fmap f pa Ÿ uq “ f a Ÿ fmap f u
instance Foldable pVecnq where
foldMap ZVec “ ε
foldMap h pa Ÿ asq “ h a ‘ foldMap h as
And Applicative, Monad , Traversable.
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 29 / 57
![Page 32: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/32.jpg)
fmap not :: Vec6 Bool Ñ Vec6 Bool
In
not
not
not
not
not
not
Out
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 30 / 57
![Page 33: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/33.jpg)
sum :: Vec6 Int Ñ Int
In
add
32
add
32
add
32
add
32
add
32
add
32
0
32
32
32
32
32
32
Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 31 / 57
![Page 34: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/34.jpg)
Improved folding
Bypass ε when possible.
instance Foldable pVecnq where
foldMap ZVec “ ε
foldMap h as@p Ÿ q “ foldMapS h as
foldMapS :: Monoid m ñ pa Ñ mq Ñ Vec1`n a Ñ m
foldMapS h pa Ÿ asq “
case as of
ZVec Ñ h a
p Ÿ q Ñ h a ‘ foldMapS h as
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 32 / 57
![Page 35: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/35.jpg)
sum :: Vec6 Int Ñ Int
In
add
32
32
add
32
add 32
add
32
add
32
32
32
32
32
Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 33 / 57
![Page 36: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/36.jpg)
Depth-typed trees
data Tree :: Nat Ñ ˚ Ñ ˚ where
L :: a Ñ Tree0 a
B :: Pair pTreen aq Ñ Tree1`n a
instance Functor pTreenq where
fmap f pL a q “ L pf aq
fmap f pB tsq “ B ppfmap ˝ fmapq f tsq
instance Foldable pTreenq where
foldMap f pL a q “ f a
foldMap f pB tsq “ pfoldMap ˝ foldMapq f ts
And Applicative, Monad , Traversable.
Easily generalize beyond Pair .
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 34 / 57
![Page 37: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/37.jpg)
Depth-typed trees
data Tree :: Nat Ñ ˚ Ñ ˚ where
L :: a Ñ Tree0 a
B :: Pair pTreen aq Ñ Tree1`n a
instance Functor pTreenq where
fmap f pL a q “ L pf aq
fmap f pB tsq “ B ppfmap ˝ fmapq f tsq
instance Foldable pTreenq where
foldMap f pL a q “ f a
foldMap f pB tsq “ pfoldMap ˝ foldMapq f ts
And Applicative, Monad , Traversable.
Easily generalize beyond Pair .Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 34 / 57
![Page 38: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/38.jpg)
fmap not :: Tree3 Bool Ñ Tree3 Bool
In
not
not
not
not
not
not
not
not
Out
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 35 / 57
![Page 39: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/39.jpg)
sum :: Tree4 Int Ñ Int
In
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
3232
add
32
add
32
32
add
32
add
32
32
32
32 Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 36 / 57
![Page 40: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/40.jpg)
sum :: Tree3 Int Ñ Int
Monomorphized & simplified GHC Core:let f0 :: Tree0 Int Ñ Sum Int
f0 “ λds Ñ
abst $fRepSum prepr $fRepTree0 dsq
f1 :: Tree1 Int Ñ Sum Int
f1 “ λds Ñ
case repr $fRepPair prepr $fRepTree dsq of
p, q a b Ñ
abst $fRepSum
p$fNumInt` prepr $fRepSum pf0 aqq
prepr $fRepSum pf0 bqqq
f2 :: Tree2 Int Ñ Sum Int
f2 “ λds Ñ
case repr $fRepPair prepr $fRepTree dsq of
p, q a b Ñ
abst $fRepSum
p$fNumInt` prepr $fRepSum pf1 aqq
prepr $fRepSum pf1 bqqq
in λη Ñ
repr $fRepSum
pcase repr $fRepPair prepr $fRepTree ηq of
p, q a b Ñ
abst $fRepSum
p$fNumInt` prepr $fRepSum pf2 aqq
prepr $fRepSum pf2 bqqqq
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 37 / 57
![Page 41: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/41.jpg)
transpose :: Pair pTree4 Intq Ñ Tree4 pPair Intq
In
Out
32
32
32
32
32
32
32
3232
3232
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 38 / 57
![Page 42: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/42.jpg)
transpose :: Tree4 pPair Intq Ñ Pair pTree4 Intq
In
Out
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 39 / 57
![Page 43: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/43.jpg)
Dot products
dot :: pFoldable g ,Foldable f ,Num pf aq,Num aq ñ
g pf aq Ñ a
dot “ sum ˝ product
Typically, g ” Pair .
Alternatively,
dot :: pTraversable g ,Foldable f ,Applicative f ,Num aq ñ
g pf aq Ñ a
dot “ sum ˝ fmap product ˝ transpose
where
transpose :: pTraversable t ,Applicative f q ñ t pf aq Ñ f pt aq
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 40 / 57
![Page 44: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/44.jpg)
Dot products
dot :: pFoldable g ,Foldable f ,Num pf aq,Num aq ñ
g pf aq Ñ a
dot “ sum ˝ product
Typically, g ” Pair .
Alternatively,
dot :: pTraversable g ,Foldable f ,Applicative f ,Num aq ñ
g pf aq Ñ a
dot “ sum ˝ fmap product ˝ transpose
where
transpose :: pTraversable t ,Applicative f q ñ t pf aq Ñ f pt aq
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 40 / 57
![Page 45: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/45.jpg)
dot :: Pair pTree1 Intq Ñ Int
In
mul
32
32
mul
32
32
add
32
32
Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 41 / 57
![Page 46: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/46.jpg)
dot :: Pair pTree2 Intq Ñ Int
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
32
add
32
32
add
32
32
Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 42 / 57
![Page 47: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/47.jpg)
dot :: Pair pTree3 Intq Ñ Int
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32 Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 43 / 57
![Page 48: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/48.jpg)
dot :: Pair pTree4 Intq Ñ Int
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
3232
add
32
add
32
32
add
32
add
32
32
32
32 Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 44 / 57
![Page 49: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/49.jpg)
dot :: Vec3 pTree2 Intq Ñ Int
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
mul 32
mul 32
mul
32
32
32
32
32
add
32
32
add
32
32
add
32
32 Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 45 / 57
![Page 50: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/50.jpg)
dot :: Tree2 pTree2 Intq Ñ Int
In
mul
32
32
mul 32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
mul
32
mul
32
mul
32
32
32
32
32
add
32
32
add
32
32
add
32
32 Out32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 46 / 57
![Page 51: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/51.jpg)
Linear transformations
p¨q :: pFoldable f ,Num pf aq,Num aq ñ f a Ñ f a Ñ a
u ¨ v “ dot pu :# vq
type Matm,n a “ Vecn pVecm aq
p$̂q :: pIsNat m,Num aq ñ Matm,n a Ñ Vecm a Ñ Vecn a
mat $̂ vec “ p¨vecq ă$ąmat
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 47 / 57
![Page 52: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/52.jpg)
Linear transformations
p¨q :: pFoldable f ,Num pf aq,Num aq ñ f a Ñ f a Ñ a
u ¨ v “ dot pu :# vq
type Matm,n a “ Vecn pVecm aq
p$̂q :: pIsNat m,Num aq ñ Matm,n a Ñ Vecm a Ñ Vecn a
mat $̂ vec “ p¨vecq ă$ąmat
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 47 / 57
![Page 53: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/53.jpg)
p$̂q ::Mat2,3 Int Ñ Vec2 Int Ñ Vec3 Int
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
32
Out
32
add
32
3232
add
32
32
32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 48 / 57
![Page 54: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/54.jpg)
p$̂q ::Mat4,2 Int Ñ Vec4 Int Ñ Vec2 Int
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
add
32
add
32
32
3232
Out
32
add
32
add
32
add
32
32
32
32
32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 49 / 57
![Page 55: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/55.jpg)
Generalizing linear transformations
p$̂q :: pIsNat m,Num aq ñ
Vecn pVecm aq Ñ Vecm a Ñ Vecn a
mat $̂ vec “ p¨vecq ă$ąmat
More simply and generally,
p$̂q :: pFoldable m,Applicative m,Functor n,Num aq ñ
n pm aq Ñ m a Ñ n a
For instance,
type MatTm,n a “ Treen pTreem aq
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 50 / 57
![Page 56: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/56.jpg)
p$̂q ::MatT 2,1 Int Ñ Tree2 Int Ñ Tree1 Int
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
32
add
32
32
add
32
32
Out
32
add
32
32
add
32
32
add
32
32
32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 51 / 57
![Page 57: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/57.jpg)
p$̂q ::MatT 2,2 Int Ñ Tree2 Int Ñ Tree2 Int
In
mul
32
32
mul
32
32
mul
32
32
mul 32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
32
add
32
32
add
32
32
Out
32
add
32
32
add
32
32
add
32
32
32
add
32
32
add
32
32
add
32
32
32
add
32
32
add
32
32
add
32
32
32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 52 / 57
![Page 58: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/58.jpg)
Composing linear transformations
Transform columns:
pˆ̋q :: pIsNat m, IsNat n, IsNat o,Num aq ñ
Matn,o a Ñ Matm,n a Ñ Matm,o a
no ˆ̋ mn “ transpose ppno $̂q ă$ą transpose mnq
More simply and generally,
pˆ̋q :: pApplicative o,Traversable n,Applicative n
,Traversable m,Applicative m,Num aq ñ
o pn aq Ñ n pm aq Ñ o pm aq
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 53 / 57
![Page 59: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/59.jpg)
pˆ̋q ::Mat3,4 Int Ñ Mat2,3 Int Ñ Mat2,4 Int
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
add
32
32
32
Out
32
add
32
add
32
32
32 32
add
32
add
32
32
32
32
add
32
add
32
32
32
32
add
32
add
32
32
32
32
add
32
add
32
32
3232
add
32
add
32
32
32
32
add
32
add
32
32
32
32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 54 / 57
![Page 60: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/60.jpg)
pˆ̋q ::MatT 2,2 Int Ñ MatT 2,2 Int Ñ MatT 2,2 Int
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul 32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
32
add
32
32
add
32
32
Out
32
add
32
32
add
32
32
add
32
32
32
add
32
32
add
32
32
add
32
32
32
add
32
32
add
32
32
add
32
32
32
add
32
32
add
32
32
add
32
32
32
add
32
32
add
32
32
add
32
3232
add
32
32
add
32
32
add
32
32
32
add
32
32
add 32
32
add
32
32
32
add
32
32
add
32
32
add
32
32
32
add
32
32
add
32
32
add
32
32
32
add
32
32
add 32
32
add
32
32
32
add
32
32
add 32
32
add
32
32
32
add
32
32
add
32
32
add
32
32
32
add
32
32
add
32
32
add
32
32
32
add
32
32
add 32
32
add
32
32
32
add
32
32
add 32
32
add
32
32
32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 55 / 57
![Page 61: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/61.jpg)
pˆ̋q ::MatT 3,2 Int Ñ MatT 2,3 Int Ñ MatT 2,2 Int
In
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul 32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
mul
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
Out
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add 32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add
32
32
add
32
32
add 32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
32
add
32
add
32
32
32
32
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 56 / 57
![Page 62: From Haskell to Hardware via CCCs - Department of Computer ... · From Haskell to Hardware via CCCs Conal Elliott Tabula August, 2014 Conal Elliott(Tabula)From Haskell to Hardware](https://reader030.vdocuments.us/reader030/viewer/2022041216/5e04ec8c4438b56bca622558/html5/thumbnails/62.jpg)
Status and future
GitHub repository
Looking for collaboration and hiring recommendations
To do:
Improve performance
More examples
Genuine sums for circuits
Memory and computation management
More interpretations (CCCs)
Conal Elliott (Tabula) From Haskell to Hardware via CCCs August, 2014 57 / 57