{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE NoFieldSelectors #-}
module TypedSession.State.Render where
import Control.Algebra ((:+:))
import Control.Carrier.State.Strict (runState)
import Control.Carrier.Writer.Strict (runWriter)
import Control.Effect.State
import Control.Effect.Writer
import Control.Monad (when)
import Data.IntMap (IntMap)
import qualified Data.List as L
import Data.Sequence (Seq)
import Data.Set (Set)
import qualified TypedSession.State.Constraint as C
import TypedSession.State.Type
import TypedSession.State.Utils
data StringFill
= CenterFill Int Char String
| LeftAlign Int Char String
deriving (Int -> StringFill -> ShowS
[StringFill] -> ShowS
StringFill -> String
(Int -> StringFill -> ShowS)
-> (StringFill -> String)
-> ([StringFill] -> ShowS)
-> Show StringFill
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> StringFill -> ShowS
showsPrec :: Int -> StringFill -> ShowS
$cshow :: StringFill -> String
show :: StringFill -> String
$cshowList :: [StringFill] -> ShowS
showList :: [StringFill] -> ShowS
Show)
runCenterFill :: String -> StringFill -> String
runCenterFill :: String -> StringFill -> String
runCenterFill String
startSt (CenterFill Int
centerPoint Char
c String
st) =
let stlen :: Int
stlen = String -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
st
hlen :: Int
hlen = Int
stlen Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
2
rplen :: Int
rplen = (Int
centerPoint Int -> Int -> Int
forall a. Num a => a -> a -> a
- String -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
startSt) Int -> Int -> Int
forall a. Num a => a -> a -> a
- if Int -> Bool
forall a. Integral a => a -> Bool
odd Int
stlen then Int
hlen Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1 else Int
hlen
rpSt :: String
rpSt = Int -> Char -> String
forall a. Int -> a -> [a]
replicate Int
rplen Char
c
in String
startSt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
rpSt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
st
runCenterFill String
startSt v :: StringFill
v@(LeftAlign Int
leftAlignPoint Char
c String
st) =
if Int
leftAlignPoint Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< String -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
startSt
then ShowS
forall a. HasCallStack => String -> a
error ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ String
"np: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
startSt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ StringFill -> String
forall a. Show a => a -> String
show StringFill
v
else
let repLen :: Int
repLen = Int
leftAlignPoint Int -> Int -> Int
forall a. Num a => a -> a -> a
- String -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
startSt Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1
fillSt :: String
fillSt = Int -> Char -> String
forall a. Int -> a -> [a]
replicate Int
repLen Char
c
in String
startSt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
fillSt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
st
getPoint :: StringFill -> Int
getPoint :: StringFill -> Int
getPoint = \case
CenterFill Int
cp Char
_ String
_ -> Int
cp
LeftAlign Int
lp Char
_ String
_ -> Int
lp
runCenterFills :: [StringFill] -> String
runCenterFills :: [StringFill] -> String
runCenterFills [StringFill]
ls =
let ls' :: [StringFill]
ls' = (StringFill -> Int) -> [StringFill] -> [StringFill]
forall b a. Ord b => (a -> b) -> [a] -> [a]
L.sortOn StringFill -> Int
getPoint [StringFill]
ls
in (String -> StringFill -> String)
-> String -> [StringFill] -> String
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' String -> StringFill -> String
runCenterFill String
"" [StringFill]
ls'
data StrFillEnv = StrFillEnv
{ StrFillEnv -> Int
width :: Int
, StrFillEnv -> Int
leftWidth :: Int
}
deriving (Int -> StrFillEnv -> ShowS
[StrFillEnv] -> ShowS
StrFillEnv -> String
(Int -> StrFillEnv -> ShowS)
-> (StrFillEnv -> String)
-> ([StrFillEnv] -> ShowS)
-> Show StrFillEnv
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> StrFillEnv -> ShowS
showsPrec :: Int -> StrFillEnv -> ShowS
$cshow :: StrFillEnv -> String
show :: StrFillEnv -> String
$cshowList :: [StrFillEnv] -> ShowS
showList :: [StrFillEnv] -> ShowS
Show)
defaultStrFilEnv :: StrFillEnv
defaultStrFilEnv :: StrFillEnv
defaultStrFilEnv = Int -> Int -> StrFillEnv
StrFillEnv Int
30 Int
20
reSt :: StrFillEnv -> String -> String
reSt :: StrFillEnv -> ShowS
reSt StrFillEnv{Int
width :: StrFillEnv -> Int
width :: Int
width} String
st =
let st' :: [String]
st' = String -> [String]
words String
st
in case [String]
st' of
[] -> ShowS
forall a. HasCallStack => String -> a
error String
"np"
(String
x : [String]
_) ->
let lv :: Int
lv = Int
width Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
6
in if String -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
lv
then Int -> ShowS
forall a. Int -> [a] -> [a]
take (Int
lv Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
2) String
x String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
".."
else String
x
type XStringFill eta r bst =
( XMsg eta -> ([StringFill], Bool)
, XLabel eta -> [StringFill]
, XBranch eta -> [StringFill]
, XBranchSt eta -> [StringFill]
, XGoto eta -> [StringFill]
, XTerminal eta -> [StringFill]
)
renderXFold
:: forall r eta bst sig m
. ( Has (Writer [[StringFill]] :+: State Int) sig m
, ForallX Show eta
, Enum r
, Bounded r
, Show r
, Show bst
)
=> StrFillEnv -> XStringFill eta r bst -> XFold m eta r bst
renderXFold :: forall r eta bst (sig :: (* -> *) -> * -> *) (m :: * -> *).
(Has (Writer [[StringFill]] :+: State Int) sig m, ForallX Show eta,
Enum r, Bounded r, Show r, Show bst) =>
StrFillEnv -> XStringFill eta r bst -> XFold m eta r bst
renderXFold StrFillEnv
sfe (XMsg eta -> ([StringFill], Bool)
xmsg, XLabel eta -> [StringFill]
xlabel, XBranch eta -> [StringFill]
xbranch, XBranchSt eta -> [StringFill]
_xbranchst, XGoto eta -> [StringFill]
xgoto, XTerminal eta -> [StringFill]
xterminal) =
( \(XMsg eta
xv, (String
con, [String]
_, r
_, r
_, Protocol eta r bst
_)) -> do
indentVal <- forall s (sig :: (* -> *) -> * -> *) (m :: * -> *).
Has (State s) sig m =>
m s
get @Int
let va = [Int -> Char -> String -> StringFill
LeftAlign (Int
indentVal Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
2 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
3) Char
' ' (StrFillEnv -> ShowS
reSt StrFillEnv
sfe String
con)]
(xv', isFirst) = xmsg xv
when isFirst (modify @Int (+ 1))
tell [va ++ xv']
, \(XLabel eta
xv, Int
i) -> [[StringFill]] -> m ()
forall w (sig :: (* -> *) -> * -> *) (m :: * -> *).
Has (Writer w) sig m =>
w -> m ()
tell [[Int -> Char -> String -> StringFill
LeftAlign Int
1 Char
' ' (String
"LABEL " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i)] [StringFill] -> [StringFill] -> [StringFill]
forall a. [a] -> [a] -> [a]
++ XLabel eta -> [StringFill]
xlabel XLabel eta
xv]
, \(XBranch eta
xv, (r
r, [BranchSt eta r bst]
_)) -> do
indentVal <- forall s (sig :: (* -> *) -> * -> *) (m :: * -> *).
Has (State s) sig m =>
m s
get @Int
modify @Int (+ 1)
tell [[LeftAlign (indentVal * 2 + 3) ' ' ("[Branch " ++ show r ++ "]")] ++ xbranch xv]
pure (restoreWrapper @Int)
, \(XBranchSt eta
_, (bst
_, Protocol eta r bst
_)) -> () -> m ()
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
, \(XGoto eta
xv, Int
i) -> do
indentVal <- forall s (sig :: (* -> *) -> * -> *) (m :: * -> *).
Has (State s) sig m =>
m s
get @Int
tell [[LeftAlign (indentVal * 2 + 3) ' ' ("Goto " ++ show i)] ++ xgoto xv]
, \XTerminal eta
xv -> do
indentVal <- forall s (sig :: (* -> *) -> * -> *) (m :: * -> *).
Has (State s) sig m =>
m s
get @Int
tell [[LeftAlign (indentVal * 2 + 3) ' ' "Terminal"] ++ xterminal xv]
)
runRender
:: forall r eta bst
. (ForallX Show eta, Show bst, Enum r, Bounded r, Show r)
=> StrFillEnv -> XStringFill eta r bst -> Protocol eta r bst -> String
runRender :: forall r eta bst.
(ForallX Show eta, Show bst, Enum r, Bounded r, Show r) =>
StrFillEnv -> XStringFill eta r bst -> Protocol eta r bst -> String
runRender sfe :: StrFillEnv
sfe@(StrFillEnv{Int
width :: StrFillEnv -> Int
width :: Int
width, Int
leftWidth :: StrFillEnv -> Int
leftWidth :: Int
leftWidth}) XStringFill eta r bst
xst Protocol eta r bst
prot =
[String] -> String
unlines
([String] -> String)
-> (StateC Int (WriterC [[StringFill]] Identity) () -> [String])
-> StateC Int (WriterC [[StringFill]] Identity) ()
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([StringFill] -> String) -> [[StringFill]] -> [String]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [StringFill] -> String
runCenterFills
([[StringFill]] -> [String])
-> (StateC Int (WriterC [[StringFill]] Identity) ()
-> [[StringFill]])
-> StateC Int (WriterC [[StringFill]] Identity) ()
-> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([[StringFill]], (Int, ())) -> [[StringFill]]
forall a b. (a, b) -> a
fst
(([[StringFill]], (Int, ())) -> [[StringFill]])
-> (StateC Int (WriterC [[StringFill]] Identity) ()
-> ([[StringFill]], (Int, ())))
-> StateC Int (WriterC [[StringFill]] Identity) ()
-> [[StringFill]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Identity ([[StringFill]], (Int, ())) -> ([[StringFill]], (Int, ()))
forall a. Identity a -> a
run
(Identity ([[StringFill]], (Int, ()))
-> ([[StringFill]], (Int, ())))
-> (StateC Int (WriterC [[StringFill]] Identity) ()
-> Identity ([[StringFill]], (Int, ())))
-> StateC Int (WriterC [[StringFill]] Identity) ()
-> ([[StringFill]], (Int, ()))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall w (m :: * -> *) a. Monoid w => WriterC w m a -> m (w, a)
runWriter @[[StringFill]]
(WriterC [[StringFill]] Identity (Int, ())
-> Identity ([[StringFill]], (Int, ())))
-> (StateC Int (WriterC [[StringFill]] Identity) ()
-> WriterC [[StringFill]] Identity (Int, ()))
-> StateC Int (WriterC [[StringFill]] Identity) ()
-> Identity ([[StringFill]], (Int, ()))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall s (m :: * -> *) a. s -> StateC s m a -> m (s, a)
runState @Int Int
0
(StateC Int (WriterC [[StringFill]] Identity) () -> String)
-> StateC Int (WriterC [[StringFill]] Identity) () -> String
forall a b. (a -> b) -> a -> b
$ do
let header :: [StringFill]
header =
[Int -> Char -> String -> StringFill
CenterFill ((r -> Int
forall a. Enum a => a -> Int
fromEnum r
r Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
width Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
leftWidth) Char
'-' (r -> String
forall a. Show a => a -> String
show r
r) | r
r <- forall r. (Enum r, Bounded r) => [r]
rRange @r]
[[StringFill]] -> StateC Int (WriterC [[StringFill]] Identity) ()
forall w (sig :: (* -> *) -> * -> *) (m :: * -> *).
Has (Writer w) sig m =>
w -> m ()
tell [[StringFill]
header]
(XFold (StateC Int (WriterC [[StringFill]] Identity)) eta r bst
-> Protocol eta r bst
-> StateC Int (WriterC [[StringFill]] Identity) ()
forall (m :: * -> *) eta r bst.
Monad m =>
XFold m eta r bst -> Protocol eta r bst -> m ()
xfold (StrFillEnv
-> XStringFill eta r bst
-> XFold (StateC Int (WriterC [[StringFill]] Identity)) eta r bst
forall r eta bst (sig :: (* -> *) -> * -> *) (m :: * -> *).
(Has (Writer [[StringFill]] :+: State Int) sig m, ForallX Show eta,
Enum r, Bounded r, Show r, Show bst) =>
StrFillEnv -> XStringFill eta r bst -> XFold m eta r bst
renderXFold StrFillEnv
sfe XStringFill eta r bst
xst) Protocol eta r bst
prot)
data Tracer r bst
= TracerProtocolCreat (Protocol Creat r bst)
| TracerProtocolIdx (Protocol Idx r bst)
| TracerReRank (IntMap Int)
| TracerProtocolAddNum (Protocol AddNums r bst)
| TracerProtocolGenConst (Protocol (GenConst r) r bst)
| TracerConstraints (Seq C.Constraint)
| TracerSubMap C.SubMap
| TracerProtocolGenConstN (Protocol (GenConst r) r bst)
| TracerCollectBranchDynVal (Set Int)
| TracerProtocolMsgT (Protocol (MsgT r bst) r bst)
| TracerProtocolMsgT1 (Protocol (MsgT1 r bst) r bst)
traceWrapper :: String -> String -> String
traceWrapper :: String -> ShowS
traceWrapper String
desc String
st =
String
"--------------------"
String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
desc
String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"-----------------\n"
String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
st
String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"\n"
foo :: (Ord a) => a -> a -> [Char] -> a -> [Char]
foo :: forall a. Ord a => a -> a -> String -> a -> String
foo a
from a
to String
str a
i =
if
| a
i a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
from ->
if a
from a -> a -> Bool
forall a. Ord a => a -> a -> Bool
> a
to
then String
"<-" String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
str
else String
str String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"->"
| a
i a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
to ->
if a
from a -> a -> Bool
forall a. Ord a => a -> a -> Bool
> a
to
then String
str String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"<-"
else String
"->" String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
str
| Bool
otherwise -> String
str
rtops :: (Enum r) => StrFillEnv -> r -> Int
rtops :: forall r. Enum r => StrFillEnv -> r -> Int
rtops StrFillEnv{Int
width :: StrFillEnv -> Int
width :: Int
width, Int
leftWidth :: StrFillEnv -> Int
leftWidth :: Int
leftWidth} = ((Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
leftWidth) (Int -> Int) -> (r -> Int) -> r -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int
width Int -> Int -> Int
forall a. Num a => a -> a -> a
*) (Int -> Int) -> (r -> Int) -> r -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) (Int -> Int) -> (r -> Int) -> r -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. r -> Int
forall a. Enum a => a -> Int
fromEnum)
rRange :: forall r. (Enum r, Bounded r) => [r]
rRange :: forall r. (Enum r, Bounded r) => [r]
rRange = [forall a. Bounded a => a
minBound @r .. r
forall a. Bounded a => a
maxBound]
too :: forall r a. (Show a, Enum r, Bounded r) => StrFillEnv -> [a] -> [StringFill]
too :: forall r a.
(Show a, Enum r, Bounded r) =>
StrFillEnv -> [a] -> [StringFill]
too StrFillEnv
sfe [a]
xs = [Int -> Char -> String -> StringFill
CenterFill Int
ps Char
' ' (a -> String
forall a. Show a => a -> String
show a
v) | (a
v, Int
ps) <- [a] -> [Int] -> [(a, Int)]
forall a b. [a] -> [b] -> [(a, b)]
zip [a]
xs ([Int] -> [(a, Int)]) -> [Int] -> [(a, Int)]
forall a b. (a -> b) -> a -> b
$ (r -> Int) -> [r] -> [Int]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (StrFillEnv -> r -> Int
forall r. Enum r => StrFillEnv -> r -> Int
rtops StrFillEnv
sfe) (forall r. (Enum r, Bounded r) => [r]
rRange @r)]
stMsgT :: forall r bst. (Show bst, Ord r, Enum r, Bounded r) => StrFillEnv -> XStringFill (MsgT r bst) r bst
stMsgT :: forall r bst.
(Show bst, Ord r, Enum r, Bounded r) =>
StrFillEnv -> XStringFill (MsgT r bst) r bst
stMsgT StrFillEnv
sfe =
let
in ( \([T bst]
ls, (r
from, r
to), Int
idx) ->
( [ Int -> Char -> String -> StringFill
CenterFill Int
ps Char
' ' (String -> StringFill) -> String -> StringFill
forall a b. (a -> b) -> a -> b
$ r -> r -> String -> r -> String
forall a. Ord a => a -> a -> String -> a -> String
foo r
from r
to ((if (r
i, Int
idx) (r, Int) -> (r, Int) -> Bool
forall a. Eq a => a -> a -> Bool
== (r
from, Int
0) then ShowS
parensWarapper else ShowS
forall a. a -> a
id) ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ T bst -> String
forall a. Show a => a -> String
show T bst
v) r
i
| (r
i, (Int
ps, T bst
v)) <- [r] -> [(Int, T bst)] -> [(r, (Int, T bst))]
forall a b. [a] -> [b] -> [(a, b)]
zip (forall r. (Enum r, Bounded r) => [r]
rRange @r) ([(Int, T bst)] -> [(r, (Int, T bst))])
-> [(Int, T bst)] -> [(r, (Int, T bst))]
forall a b. (a -> b) -> a -> b
$ [Int] -> [T bst] -> [(Int, T bst)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((r -> Int) -> [r] -> [Int]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (StrFillEnv -> r -> Int
forall r. Enum r => StrFillEnv -> r -> Int
rtops StrFillEnv
sfe) (forall r. (Enum r, Bounded r) => [r]
rRange @r)) [T bst]
ls
]
, Int
idx Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0
)
, \([T bst]
xs, Int
_) -> forall r a.
(Show a, Enum r, Bounded r) =>
StrFillEnv -> [a] -> [StringFill]
too @r StrFillEnv
sfe [T bst]
xs
, \XBranch (MsgT r bst)
xs -> forall r a.
(Show a, Enum r, Bounded r) =>
StrFillEnv -> [a] -> [StringFill]
too @r StrFillEnv
sfe [T bst]
XBranch (MsgT r bst)
xs
, \XBranchSt (MsgT r bst)
_ -> []
, \([T bst]
xs, Int
_) -> forall r a.
(Show a, Enum r, Bounded r) =>
StrFillEnv -> [a] -> [StringFill]
too @r StrFillEnv
sfe [T bst]
xs
, \XTerminal (MsgT r bst)
xs -> forall r a.
(Show a, Enum r, Bounded r) =>
StrFillEnv -> [a] -> [StringFill]
too @r StrFillEnv
sfe [T bst]
XTerminal (MsgT r bst)
xs
)
parensWarapper :: String -> String
parensWarapper :: ShowS
parensWarapper String
st = String
"{" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
st String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
"}"
instance (Show r, Show bst, Enum r, Bounded r, Eq r, Ord r) => Show (Tracer r bst) where
show :: Tracer r bst -> String
show = \case
TracerProtocolCreat Protocol Creat r bst
p -> String -> ShowS
traceWrapper String
"Creat" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ Protocol Creat r bst -> String
forall a. Show a => a -> String
show Protocol Creat r bst
p
TracerProtocolIdx Protocol Idx r bst
p -> String -> ShowS
traceWrapper String
"Idx" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ Protocol Idx r bst -> String
forall a. Show a => a -> String
show Protocol Idx r bst
p
TracerReRank IntMap Int
p -> String -> ShowS
traceWrapper String
"ReRank" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ IntMap Int -> String
forall a. Show a => a -> String
show IntMap Int
p
TracerProtocolAddNum Protocol AddNums r bst
p -> String -> ShowS
traceWrapper String
"AddNum" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ Protocol AddNums r bst -> String
forall a. Show a => a -> String
show Protocol AddNums r bst
p
TracerProtocolGenConst Protocol (GenConst r) r bst
p -> String -> ShowS
traceWrapper String
"GenConst" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ Protocol (GenConst r) r bst -> String
forall a. Show a => a -> String
show Protocol (GenConst r) r bst
p
TracerConstraints Seq Constraint
p -> String -> ShowS
traceWrapper String
"Constrains" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ Seq Constraint -> String
forall a. Show a => a -> String
show Seq Constraint
p
TracerSubMap IntMap Int
p -> String -> ShowS
traceWrapper String
"SubMap" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ IntMap Int -> String
forall a. Show a => a -> String
show IntMap Int
p
TracerProtocolGenConstN Protocol (GenConst r) r bst
p -> String -> ShowS
traceWrapper String
"GenConstN" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ Protocol (GenConst r) r bst -> String
forall a. Show a => a -> String
show Protocol (GenConst r) r bst
p
TracerCollectBranchDynVal Set Int
dvs -> String -> ShowS
traceWrapper String
"CollectBranchDynVal" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ Set Int -> String
forall a. Show a => a -> String
show Set Int
dvs
TracerProtocolMsgT Protocol (MsgT r bst) r bst
p -> String -> ShowS
traceWrapper String
"MsgT" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ Protocol (MsgT r bst) r bst -> String
forall a. Show a => a -> String
show Protocol (MsgT r bst) r bst
p
TracerProtocolMsgT1 Protocol (MsgT1 r bst) r bst
p -> String -> ShowS
traceWrapper String
"MsgT1" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ Protocol (MsgT1 r bst) r bst -> String
forall a. Show a => a -> String
show Protocol (MsgT1 r bst) r bst
p