improvements to examples/
[coq-hetmet.git] / examples / DemoMain.hs
1 {-# LANGUAGE RankNTypes, FlexibleContexts, NoMonomorphismRestriction, ScopedTypeVariables #-}
2 import System.IO
3 import Control.Category
4 import GArrowTikZ
5 import GHC.HetMet.Private
6 import GArrowSkeleton
7 import GArrowPortShape
8 import GArrowAssTypes
9 import BitSerialHardware
10 import qualified Demo
11
12 tikzExample1 =
13   ga_copy          >>>
14   ga_swap          >>>
15   ga_first ga_drop >>>
16   ga_cancell
17
18 tikzExample2 =
19   ga_uncancelr                >>>
20   ga_first ga_copy            >>>
21   ga_swap                     >>>
22   ga_second (ga_first ga_drop >>>
23              ga_cancell)      >>>
24   ga_cancell
25
26 oscillator =
27   ga_loopl (ga_first reg >>>
28             xor >>>
29             ga_copy)
30
31 oconst :: Int -> Opaque () a
32 oconst c = MkOpaque ("{\\large{"++(show c)++"}}") $
33            do x <- freshM
34               return $ GASPortPassthrough PortUnit (PortFree x) (oconst c)
35
36 omult :: Opaque (a,a) a
37 omult = MkOpaque "{\\large{*}}" $
38            do x <- freshM
39               return $ GASPortPassthrough (PortTensor (PortFree x) (PortFree x)) (PortFree x) omult
40
41 main = do let const c = PGArrowD $ GAS_misc $ oconst c
42           let mult    = PGArrowD $ GAS_misc   omult
43
44           sample5 <- toTikZ $ beautify $ optimize $ unG (Demo.sample5 const mult)
45           putStrLn $ tikz_header ++ sample5 ++ tikz_footer
46           withFile ".build/sample5.tex" WriteMode (\file -> hPutStr file sample5)
47
48           sample1 <- toTikZ $ skelify' tikzExample1
49           --putStrLn $ tikz_header ++ sample1 ++ tikz_footer
50           withFile ".build/sample1.tex" WriteMode (\file -> hPutStr file sample1)
51
52           sample2 <- toTikZ $ skelify' tikzExample2
53           --putStrLn $ tikz_header ++ sample2 ++ tikz_footer
54           withFile ".build/sample2.tex" WriteMode (\file -> hPutStr file sample2)
55
56           sample3 <- toTikZ $ skelify'' oscillator
57           --putStrLn $ tikz_header ++ sample3 ++ tikz_footer
58           withFile ".build/sample3.tex" WriteMode (\file -> hPutStr file sample3)
59
60           sample6 <- toTikZ $ beautify $ optimize $ unG (Demo.sample6 const mult)
61           --putStrLn $ tikz_header ++ sample6 ++ tikz_footer
62           withFile ".build/sample6.tex" WriteMode (\file -> hPutStr file sample6)