module Hydra.Tier3 where
import qualified Hydra.Compute as Compute
import qualified Hydra.Lib.Io as Io
import qualified Hydra.Lib.Lists as Lists
import qualified Hydra.Lib.Logic as Logic
import qualified Hydra.Lib.Maps as Maps
import qualified Hydra.Lib.Strings as Strings
import Data.Int
import Data.List as L
import Data.Map as M
import Data.Set as S
traceSummary :: (Compute.Trace -> String)
traceSummary :: Trace -> String
traceSummary Trace
t =
let messageLines :: [String]
messageLines = ([String] -> [String]
forall a. Eq a => [a] -> [a]
Lists.nub (Trace -> [String]
Compute.traceMessages Trace
t))
keyvalLines :: [String]
keyvalLines = ([String] -> [String] -> Bool -> [String]
forall a. a -> a -> Bool -> a
Logic.ifElse [] (String -> [String] -> [String]
forall a. a -> [a] -> [a]
Lists.cons String
"key/value pairs: " (((String, Term) -> String) -> [(String, Term)] -> [String]
forall a b. (a -> b) -> [a] -> [b]
Lists.map (String, Term) -> String
toLine (Map String Term -> [(String, Term)]
forall k v. Map k v -> [(k, v)]
Maps.toList (Trace -> Map String Term
Compute.traceOther Trace
t)))) (Map String Term -> Bool
forall k v. Map k v -> Bool
Maps.isEmpty (Trace -> Map String Term
Compute.traceOther Trace
t)))
toLine :: (String, Term) -> String
toLine = (\(String, Term)
pair -> [String] -> String
Strings.cat [
[String] -> String
Strings.cat [
[String] -> String
Strings.cat [
String
"\t",
((String, Term) -> String
forall a b. (a, b) -> a
fst (String, Term)
pair)],
String
": "],
(Term -> String
Io.showTerm ((String, Term) -> Term
forall a b. (a, b) -> b
snd (String, Term)
pair))])
in (String -> [String] -> String
Strings.intercalate String
"\n" ([String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
Lists.concat2 [String]
messageLines [String]
keyvalLines))