101 lines
3.1 KiB
Plaintext
101 lines
3.1 KiB
Plaintext
{-
|
|
Render a `Preserves` value to a diagnostic `Text` value
|
|
-}
|
|
let Preserves = ./Type.dhall
|
|
|
|
let Prelude = ./Prelude.dhall
|
|
|
|
let Map/Type = Prelude.Map.Type
|
|
|
|
let Text/concatSep = Prelude.Text.concatSep
|
|
|
|
let Text/concatMapSep = Prelude.Text.concatMapSep
|
|
|
|
let render
|
|
: Preserves → Text
|
|
= λ(value : Preserves) →
|
|
value
|
|
Text
|
|
{ boolean = λ(x : Bool) → if x then "#t" else "#f"
|
|
, double = Double/show
|
|
, integer = Prelude.JSON.renderInteger
|
|
, string = Text/show
|
|
, symbol = λ(sym : Text) → "${sym}"
|
|
, record =
|
|
λ(label : Text) →
|
|
λ(fields : List Text) →
|
|
"<${label}"
|
|
++ (if Prelude.List.null Text fields then "" else " ")
|
|
++ Text/concatSep " " fields
|
|
++ ">"
|
|
, sequence = λ(xs : List Text) → "[ " ++ Text/concatSep " " xs ++ " ]"
|
|
, set = λ(xs : List Text) → "#{" ++ Text/concatSep " " xs ++ " }"
|
|
, dictionary =
|
|
λ(m : Map/Type Text Text) →
|
|
"{ "
|
|
++ Text/concatMapSep
|
|
" "
|
|
{ mapKey : Text, mapValue : Text }
|
|
( λ(e : { mapKey : Text, mapValue : Text }) →
|
|
"${e.mapKey}: ${e.mapValue}"
|
|
)
|
|
m
|
|
++ " }"
|
|
, embedded = λ(value : Text) → "#!${value}"
|
|
}
|
|
|
|
let Preserves/boolean = ./boolean.dhall
|
|
|
|
let Preserves/integer = ./integer.dhall
|
|
|
|
let Preserves/double = ./double.dhall
|
|
|
|
let Preserves/symbol = ./symbol.dhall
|
|
|
|
let Preserves/record = ./record.dhall
|
|
|
|
let Preserves/sequenceOf = ./sequenceOf.dhall
|
|
|
|
let Preserves/dictionaryOf = ./dictionaryOf.dhall
|
|
|
|
let Preserves/dictionaryOfSymbols = Preserves/dictionaryOf Text Preserves/symbol
|
|
|
|
let Preserves/embedded = ./embedded.dhall
|
|
|
|
let example0 =
|
|
assert
|
|
: ''
|
|
${render
|
|
( Preserves/dictionaryOfSymbols
|
|
Preserves
|
|
(λ(x : Preserves) → x)
|
|
( toMap
|
|
{ a = Preserves/integer +1
|
|
, b =
|
|
Preserves/sequenceOf
|
|
Integer
|
|
Preserves/integer
|
|
[ +2, +3 ]
|
|
, c =
|
|
Preserves/dictionaryOfSymbols
|
|
Double
|
|
Preserves/double
|
|
(toMap { d = 1.0, e = -1.0 })
|
|
, d = Preserves/embedded (Preserves/boolean True)
|
|
, e =
|
|
Preserves/record
|
|
(Preserves/symbol "capture")
|
|
[ Preserves/record
|
|
(Preserves/symbol "_")
|
|
([] : List Preserves)
|
|
]
|
|
}
|
|
)
|
|
)}
|
|
''
|
|
≡ ''
|
|
{ a: 1 b: [ 2 3 ] c: { d: 1.0 e: -1.0 } d: #!#t e: <capture <_>> }
|
|
''
|
|
|
|
in render
|