module Dep.Bricks.Circuit where
import Brick.Types(Size(Fixed), Widget(Widget), emptyResult, imageL)
import Control.Lens.Operators((&), (.~))
import Dep.Bricks.Karnaugh(renderKarnaugh)
import Dep.Data.Three(Three(Leaf, Split))
import Graphics.Vty.Attributes(defAttr)
circuit :: Widget ()
circuit :: Widget ()
circuit = Size -> Size -> RenderM () (Result ()) -> Widget ()
forall n. Size -> Size -> RenderM n (Result n) -> Widget n
Widget Size
Fixed Size
Fixed (RenderM () (Result ()) -> Widget ())
-> RenderM () (Result ()) -> Widget ()
forall a b. (a -> b) -> a -> b
$ do
let la :: Three Char
la = Char -> Three Char
forall a. a -> Three a
Leaf Char
'a'
let lb :: Three Char
lb = Char -> Three Char
forall a. a -> Three a
Leaf Char
'b'
let lc :: Three Char
lc = Char -> Three Char
forall a. a -> Three a
Leaf Char
'c'
let ld :: Three Char
ld = Char -> Three Char
forall a. a -> Three a
Leaf Char
'd'
let le :: Three Char
le = Char -> Three Char
forall a. a -> Three a
Leaf Char
'e'
let lf :: Three Char
lf = Char -> Three Char
forall a. a -> Three a
Leaf Char
'f'
let lg :: Three Char
lg = Char -> Three Char
forall a. a -> Three a
Leaf Char
'g'
let lh :: Three Char
lh = Char -> Three Char
forall a. a -> Three a
Leaf Char
'h'
let li :: Three Char
li = Char -> Three Char
forall a. a -> Three a
Leaf Char
'i'
let lj :: Three Char
lj = Char -> Three Char
forall a. a -> Three a
Leaf Char
'j'
let lk :: Three Char
lk = Char -> Three Char
forall a. a -> Three a
Leaf Char
'k'
let ll :: Three Char
ll = Char -> Three Char
forall a. a -> Three a
Leaf Char
'l'
let lm :: Three Char
lm = Char -> Three Char
forall a. a -> Three a
Leaf Char
'm'
let ln :: Three Char
ln = Char -> Three Char
forall a. a -> Three a
Leaf Char
'n'
let lo :: Three Char
lo = Char -> Three Char
forall a. a -> Three a
Leaf Char
'o'
let lp :: Three Char
lp = Char -> Three Char
forall a. a -> Three a
Leaf Char
'p'
let lA :: Three Char
lA = Char -> Three Char
forall a. a -> Three a
Leaf Char
'A'
let lB :: Three Char
lB = Char -> Three Char
forall a. a -> Three a
Leaf Char
'B'
let lC :: Three Char
lC = Char -> Three Char
forall a. a -> Three a
Leaf Char
'C'
let lD :: Three Char
lD = Char -> Three Char
forall a. a -> Three a
Leaf Char
'D'
let lE :: Three Char
lE = Char -> Three Char
forall a. a -> Three a
Leaf Char
'E'
let lF :: Three Char
lF = Char -> Three Char
forall a. a -> Three a
Leaf Char
'F'
let lG :: Three Char
lG = Char -> Three Char
forall a. a -> Three a
Leaf Char
'G'
let lH :: Three Char
lH = Char -> Three Char
forall a. a -> Three a
Leaf Char
'H'
let lI :: Three Char
lI = Char -> Three Char
forall a. a -> Three a
Leaf Char
'I'
let lJ :: Three Char
lJ = Char -> Three Char
forall a. a -> Three a
Leaf Char
'J'
let lK :: Three Char
lK = Char -> Three Char
forall a. a -> Three a
Leaf Char
'K'
let lL :: Three Char
lL = Char -> Three Char
forall a. a -> Three a
Leaf Char
'L'
let lM :: Three Char
lM = Char -> Three Char
forall a. a -> Three a
Leaf Char
'M'
let lN :: Three Char
lN = Char -> Three Char
forall a. a -> Three a
Leaf Char
'N'
let lO :: Three Char
lO = Char -> Three Char
forall a. a -> Three a
Leaf Char
'O'
let lP :: Three Char
lP = Char -> Three Char
forall a. a -> Three a
Leaf Char
'P'
let tree' :: Three Char
tree' = Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
la Three Char
lb) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
lc Three Char
ld)) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
le Three Char
lf) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
lg Three Char
lh))) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
li Three Char
lj) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
lk Three Char
ll)) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
lm Three Char
ln) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
lo Three Char
lp)))
let tree'' :: Three Char
tree'' = Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
lA Three Char
lB) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
lC Three Char
lD)) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
lE Three Char
lF) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
lG Three Char
lH))) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
lI Three Char
lJ) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
lK Three Char
lL)) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
lM Three Char
lN) (Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
lO Three Char
lP)))
let tree''' :: Three Char
tree''' = Three Char -> Three Char -> Three Char
forall a. Three a -> Three a -> Three a
Split Three Char
tree' Three Char
tree''
let tree :: Three Char
tree = Three Char
tree'''
Result () -> RenderM () (Result ())
forall (m :: * -> *) a. Monad m => a -> m a
return (Result ()
forall n. Result n
emptyResult Result () -> (Result () -> Result ()) -> Result ()
forall a b. a -> (a -> b) -> b
& (Image -> Identity Image) -> Result () -> Identity (Result ())
forall n. Lens' (Result n) Image
imageL ((Image -> Identity Image) -> Result () -> Identity (Result ()))
-> Image -> Result () -> Result ()
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Three Char -> SumOfProducts -> [String] -> Attr -> Image
forall a.
CharRenderable a =>
Three a -> SumOfProducts -> [String] -> Attr -> Image
renderKarnaugh Three Char
tree SumOfProducts
forall a. Monoid a => a
mempty [String]
forall a. HasCallStack => a
undefined Attr
defAttr)