DataDSLModule

PackageReified.Data

DataDSL

Reified.DataDSL provides short names and the => and ?=> operators for data construction and editing. Every DSL name maps to an explicit Reified.Data or DataEdit function; each builds the same value the qualified name builds.

Literal and edit mappings

DataDSL Explicit API Result
name => value Data.assoc name value DataField
name ?=> option Data.optionalAssoc name option DataField
nil Data.Null Data
num token Data.number token Data
data fields Data.data fields Data
fields value Data.fields value DataField list
set path value DataEdit.set path value DataEdit
replace path value DataEdit.replace path value DataEdit
remove path DataEdit.remove path DataEdit
append path value DataEdit.append path value DataEdit
prepend path value DataEdit.prepend path value DataEdit
insert path index value DataEdit.insert path index value DataEdit
rename path name DataEdit.rename path name DataEdit
update path function DataEdit.update path function DataEdit
n/a Data.patch edits input changed Data

set makes the final path contain the value, adding a missing final object field when necessary. replace requires the target to exist, so a misspelled or unexpectedly absent path fails.

Matching and case-generation names

The matching and case-generation names also live in Reified.DataDSL. Without opening it, qualify them as Reified.DataDSL.at, Reified.DataDSL.containing, Reified.DataDSL.variant, and so on.

Area Names
Paths at, absent
Object patterns exactly, containing
List patterns containingItems, inOrder, allItems, someItem
General patterns any, anyText, anyNumber, oneOf, satisfying
Matching matching
Cases variant, variants, dimension, matrix

Data.tryMatch is always qualified because it is not part of the DSL.

See DataDSL for a full example with and without the DSL open.

Summary

NameSignatureSynopsis
Operations
(=>)name => valueAssociates a field name with an exact value or recursive data pattern.
(?=>)name ?=> valueAssociates a field name with an optional exact value, omitting None.
nilnil An explicit structured null used by literals and edits.
numnum Constructs an exact number from a validated portable JSON number token.
datadata Builds an object from ordered field instructions.
fieldsfields Returns exact field instructions for spreading an existing object literal.
setset path valueReplaces a value or adds a missing final object field.
replacereplace path valueReplaces an existing value.
removeremove Removes an existing field or list item.
appendappend path valueAppends an item to an existing list.
prependprepend path valuePrepends an item to an existing list.
insertinsert path index valueInserts an item at a valid list insertion index.
renamerename Renames an existing object field without moving it.
updateupdate Applies an ordinary function to an existing value.
variantvariant name editsDeclares one named variation from a baseline.
variantsvariants variations baselineMaterializes named variations from one baseline.
dimensiondimension name variationsDeclares one named dimension in a Cartesian matrix.
matrixmatrix dimensions baselineMaterializes a deterministic Cartesian matrix, limited to 256 cases.
exactlyexactly valueCreates an exact recursive pattern.
containingcontaining fieldsCreates a partial object pattern from required fields.
containingItemscontainingItems valuesMatches expected items as an unordered consumed subset.
inOrderinOrder valuesMatches expected items as an ordered subsequence.
allItemsallItems valueRequires every actual list item to satisfy a pattern.
someItemsomeItem valueRequires at least one actual list item to satisfy a pattern.
anyany Matches any present value.
anyTextanyText Matches any text value.
anyNumberanyNumber Matches any number token.
oneOfoneOf patternsMatches when one supplied alternative matches.
satisfyingsatisfying description predicateMatches an ordinary predicate and uses its description in diagnostics.
atat path expectedRequires a path to contain an exact value or recursive pattern.
absentabsent pathRequires a path to be absent.
matchingmatching expectations actualChecks expectations or raises DataMatchException.

Operations

kind:member

(=>)

name => value
Member
Associates a field name with an exact value or recursive data pattern.

Parameters

NameTypeDescription
namestring
value^value

Returns

DataField
kind:member

(?=>)

name ?=> value
Member
Associates a field name with an optional exact value, omitting None.

Parameters

NameTypeDescription
namestring
value^value option

Returns

DataField
kind:member

nil

nil
Member
An explicit structured null used by literals and edits.

Returns

Data
kind:member

num

num
Member
Constructs an exact number from a validated portable JSON number token.

Returns

string -> Data
kind:member

data

data
Member
Builds an object from ordered field instructions.

Returns

DataField list -> Data

Verification Examples

data [ "name" => "Ada"; "active" => true ]
 // Data.Object [ "name", Data.Text "Ada"; "active", Data.Bool true ]
kind:member

fields

fields
Member
Returns exact field instructions for spreading an existing object literal.

Returns

Data -> DataField list
kind:member

set

set path value
Member
Replaces a value or adds a missing final object field.

Parameters

NameTypeDescription
pathstring
value^a

Returns

DataEdit
kind:member

replace

replace path value
Member
Replaces an existing value.

Parameters

NameTypeDescription
pathstring
value^a

Returns

DataEdit
kind:member

remove

remove
Member
Removes an existing field or list item.

Returns

string -> DataEdit
kind:member

append

append path value
Member
Appends an item to an existing list.

Parameters

NameTypeDescription
pathstring
value^a

Returns

DataEdit
kind:member

prepend

prepend path value
Member
Prepends an item to an existing list.

Parameters

NameTypeDescription
pathstring
value^a

Returns

DataEdit
kind:member

insert

insert path index value
Member
Inserts an item at a valid list insertion index.

Parameters

NameTypeDescription
pathstring
indexint
value^a

Returns

DataEdit
kind:member

rename

rename
Member
Renames an existing object field without moving it.

Returns

string -> string -> DataEdit
kind:member

update

update
Member
Applies an ordinary function to an existing value.

Returns

string -> (Data -> Data) -> DataEdit
kind:member

variant

variant name edits
Member
Declares one named variation from a baseline.

Parameters

NameTypeDescription
namestring
editsDataEdit list

Returns

DataVariation
kind:member

variants

variants variations baseline
Member
Materializes named variations from one baseline.

Parameters

NameTypeDescription
variationsDataVariation list
baselineData

Returns

DataCase list

Verification Examples

variants [ variant "inactive" [ replace "active" false ] ] (data [ "active" => true ])
 // [ { Name = "inactive"; Value = data [ "active" => false ] } ]
kind:member

dimension

dimension name variations
Member
Declares one named dimension in a Cartesian matrix.

Parameters

NameTypeDescription
namestring
variationsDataVariation list

Returns

DataDimension
kind:member

matrix

matrix dimensions baseline
Member
Materializes a deterministic Cartesian matrix, limited to 256 cases.

Parameters

NameTypeDescription
dimensionsDataDimension list
baselineData

Returns

DataCase list

Verification Examples

open Reified.DataDSL
 let baseline = data [ "active" => true ]
 matrix [ dimension "status" [ variant "active" []; variant "inactive" [ replace "active" false ] ] ] baseline
 // cases named "status: active" and "status: inactive"
kind:member

exactly

exactly value
Member
Creates an exact recursive pattern.

Parameters

NameTypeDescription
value^a

Returns

DataPattern
kind:member

containing

containing fields
Member
Creates a partial object pattern from required fields.

Parameters

NameTypeDescription
fieldsDataField list

Returns

DataPattern

Verification Examples

Data.tryMatch [ at "" (containing [ "id" => 42 ]) ] (data [ "id" => 42; "extra" => true ])
 // Ok ()
kind:member

containingItems

containingItems values
Member
Matches expected items as an unordered consumed subset.

Parameters

NameTypeDescription
values^a list

Returns

DataPattern

Verification Examples

open Reified.DataDSL
 let actual = data [ "items" => [ "Ada"; "Grace"; "Mallory" ] ]
 Data.tryMatch [ at "items" (containingItems [ "Ada"; "Grace" ]) ] actual
 // Ok () when both values occur, in either order
kind:member

inOrder

inOrder values
Member
Matches expected items as an ordered subsequence.

Parameters

NameTypeDescription
values^a list

Returns

DataPattern
kind:member

allItems

allItems value
Member
Requires every actual list item to satisfy a pattern.

Parameters

NameTypeDescription
value^a

Returns

DataPattern
kind:member

someItem

someItem value
Member
Requires at least one actual list item to satisfy a pattern.

Parameters

NameTypeDescription
value^a

Returns

DataPattern
kind:member

any

any
Member
Matches any present value.

Returns

DataPattern
kind:member

anyText

anyText
Member
Matches any text value.

Returns

DataPattern
kind:member

anyNumber

anyNumber
Member
Matches any number token.

Returns

DataPattern
kind:member

oneOf

oneOf patterns
Member
Matches when one supplied alternative matches.

Parameters

NameTypeDescription
patternsDataPattern list

Returns

DataPattern
kind:member

satisfying

satisfying description predicate
Member
Matches an ordinary predicate and uses its description in diagnostics.

Parameters

NameTypeDescription
descriptionstring
predicateData -> bool

Returns

DataPattern
kind:member

at

at path expected
Member
Requires a path to contain an exact value or recursive pattern.

Parameters

NameTypeDescription
pathstring
expected^a

Returns

DataExpectation
kind:member

absent

absent path
Member
Requires a path to be absent.

Parameters

NameTypeDescription
pathstring

Returns

DataExpectation
kind:member

matching

matching expectations actual
Member
Checks expectations or raises DataMatchException.

Parameters

NameTypeDescription
expectationsDataExpectation list
actualData

Returns

unit

Verification Examples

open Reified.DataDSL
 let actual = data [ "user" => data [ "name" => "Ada" ] ]
 matching [ at "user.name" "Ada"; absent "error" ] actual
 // returns unit when both expectations hold; otherwise raises DataMatchException