{-# LANGUAGE OverloadedStrings #-}
module Hydra.Sources.Tier3.Tier3 where
import Prelude hiding ((++))
import qualified Data.List as L
import qualified Data.Map as M
import qualified Data.Set as S
import qualified Data.Maybe as Y
import Hydra.Dsl.Base as Base
import qualified Hydra.Dsl.Core as Core
import qualified Hydra.Dsl.Graph as Graph
import qualified Hydra.Dsl.Lib.Equality as Equality
import qualified Hydra.Dsl.Lib.Flows as Flows
import qualified Hydra.Dsl.Lib.Io as Io
import qualified Hydra.Dsl.Lib.Lists as Lists
import qualified Hydra.Dsl.Lib.Literals as Literals
import qualified Hydra.Dsl.Lib.Logic as Logic
import qualified Hydra.Dsl.Lib.Maps as Maps
import qualified Hydra.Dsl.Lib.Math as Math
import qualified Hydra.Dsl.Lib.Optionals as Optionals
import qualified Hydra.Dsl.Lib.Sets as Sets
import Hydra.Dsl.Lib.Strings as Strings
import qualified Hydra.Dsl.Module as Module
import qualified Hydra.Dsl.Terms as Terms
import qualified Hydra.Dsl.Types as Types
import Hydra.Sources.Tier2.All
tier3Definition :: String -> Datum a -> Definition a
tier3Definition :: forall a. String -> Datum a -> Definition a
tier3Definition = Module -> String -> Datum a -> Definition a
forall a. Module -> String -> Datum a -> Definition a
definitionInModule Module
hydraTier3Module
hydraTier3Module :: Module
hydraTier3Module :: Module
hydraTier3Module = Namespace
-> [Element] -> [Module] -> [Module] -> Maybe String -> Module
Module (String -> Namespace
Namespace String
"hydra/tier3") [Element]
elements [] [Module]
tier0Modules (Maybe String -> Module) -> Maybe String -> Module
forall a b. (a -> b) -> a -> b
$
String -> Maybe String
forall a. a -> Maybe a
Just (String
"A module for miscellaneous tier-3 functions and constants.")
where
elements :: [Element]
elements = [
Definition (Trace -> String) -> Element
forall a. Definition a -> Element
el Definition (Trace -> String)
traceSummaryDef
]
traceSummaryDef :: Definition (Trace -> String)
traceSummaryDef :: Definition (Trace -> String)
traceSummaryDef = String -> Datum (Trace -> String) -> Definition (Trace -> String)
forall a. String -> Datum a -> Definition a
tier3Definition String
"traceSummary" (Datum (Trace -> String) -> Definition (Trace -> String))
-> Datum (Trace -> String) -> Definition (Trace -> String)
forall a b. (a -> b) -> a -> b
$
String -> Datum (Trace -> String) -> Datum (Trace -> String)
forall a. String -> Datum a -> Datum a
doc String
"Summarize a trace as a string" (Datum (Trace -> String) -> Datum (Trace -> String))
-> Datum (Trace -> String) -> Datum (Trace -> String)
forall a b. (a -> b) -> a -> b
$
Type -> Type -> Datum (Trace -> String) -> Datum (Trace -> String)
forall a. Type -> Type -> Datum a -> Datum a
function Type
traceT Type
stringT (Datum (Trace -> String) -> Datum (Trace -> String))
-> Datum (Trace -> String) -> Datum (Trace -> String)
forall a b. (a -> b) -> a -> b
$
String -> Datum String -> Datum (Trace -> String)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"t" (Datum String -> Datum (Trace -> String))
-> Datum String -> Datum (Trace -> String)
forall a b. (a -> b) -> a -> b
$ (
(Datum (String -> [String] -> String)
Strings.intercalate Datum (String -> [String] -> String)
-> Datum String -> Datum ([String] -> String)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum String
"\n" Datum ([String] -> String) -> Datum [String] -> Datum String
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum ([String] -> [String] -> [String])
forall a. Datum ([a] -> [a] -> [a])
Lists.concat2 Datum ([String] -> [String] -> [String])
-> Datum [String] -> Datum ([String] -> [String])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum [String]
forall a. String -> Datum a
var String
"messageLines" Datum ([String] -> [String]) -> Datum [String] -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum [String]
forall a. String -> Datum a
var String
"keyvalLines"))
Datum String -> [Field] -> Datum String
forall a. Datum a -> [Field] -> Datum a
`with` [
String
"messageLines"String -> Datum [String] -> Field
forall a. String -> Datum a -> Field
>: (Datum ([String] -> [String])
forall a. Eq a => Datum ([a] -> [a])
Lists.nub Datum ([String] -> [String]) -> Datum [String] -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Trace -> [String])
Flows.traceMessages Datum (Trace -> [String]) -> Datum Trace -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t")),
String
"keyvalLines"String -> Datum [Any] -> Field
forall a. String -> Datum a -> Field
>: Datum ([Any] -> [Any] -> Bool -> [Any])
forall a. Datum (a -> a -> Bool -> a)
Logic.ifElse
Datum ([Any] -> [Any] -> Bool -> [Any])
-> Datum [Any] -> Datum ([Any] -> Bool -> [Any])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ ([Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [])
Datum ([Any] -> Bool -> [Any])
-> Datum [Any] -> Datum (Bool -> [Any])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Any -> [Any] -> [Any])
forall a. Datum (a -> [a] -> [a])
Lists.cons Datum (Any -> [Any] -> [Any])
-> Datum Any -> Datum ([Any] -> [Any])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ Datum Any
"key/value pairs: "
Datum ([Any] -> [Any]) -> Datum [Any] -> Datum [Any]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (((String, Term) -> Any) -> [(String, Term)] -> [Any])
forall a b. Datum ((a -> b) -> [a] -> [b])
Lists.map Datum (((String, Term) -> Any) -> [(String, Term)] -> [Any])
-> Datum ((String, Term) -> Any)
-> Datum ([(String, Term)] -> [Any])
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (String -> Datum ((String, Term) -> Any)
forall a. String -> Datum a
var String
"toLine") Datum ([(String, Term)] -> [Any])
-> Datum [(String, Term)] -> Datum [Any]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Map String Term -> [(String, Term)])
forall k v. Datum (Map k v -> [(k, v)])
Maps.toList Datum (Map String Term -> [(String, Term)])
-> Datum (Map String Term) -> Datum [(String, Term)]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Trace -> Map String Term)
Flows.traceOther Datum (Trace -> Map String Term)
-> Datum Trace -> Datum (Map String Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t"))))
Datum (Bool -> [Any]) -> Datum Bool -> Datum [Any]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Map String Term -> Bool)
forall k v. Datum (Map k v -> Bool)
Maps.isEmpty Datum (Map String Term -> Bool)
-> Datum (Map String Term) -> Datum Bool
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (Trace -> Map String Term)
Flows.traceOther Datum (Trace -> Map String Term)
-> Datum Trace -> Datum (Map String Term)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum Trace
forall a. String -> Datum a
var String
"t")),
String
"toLine"String -> Datum (Any -> Any) -> Field
forall a. String -> Datum a -> Field
>:
Type -> Type -> Datum (Any -> Any) -> Datum (Any -> Any)
forall a. Type -> Type -> Datum a -> Datum a
function (Type -> Type -> Type
pairT Type
stringT Type
termT) Type
stringT (Datum (Any -> Any) -> Datum (Any -> Any))
-> Datum (Any -> Any) -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$
String -> Datum String -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"pair" (Datum String -> Datum (Any -> Any))
-> Datum String -> Datum (Any -> Any)
forall a b. (a -> b) -> a -> b
$ Datum String
"\t" Datum String -> Datum String -> Datum String
++ (Datum ((String, Any) -> String)
forall a b. Datum ((a, b) -> a)
first Datum ((String, Any) -> String)
-> Datum (String, Any) -> Datum String
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (String, Any)
forall a. String -> Datum a
var String
"pair") Datum String -> Datum String -> Datum String
++ Datum String
": " Datum String -> Datum String -> Datum String
++ (Datum (Term -> String)
Io.showTerm Datum (Term -> String) -> Datum Term -> Datum String
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum ((Any, Term) -> Term)
forall a b. Datum ((a, b) -> b)
second Datum ((Any, Term) -> Term) -> Datum (Any, Term) -> Datum Term
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum (Any, Term)
forall a. String -> Datum a
var String
"pair"))])