DataDSLModule

PackageReified.Data
Concise opt-in syntax for literals, immutable edits, cases, and matching.

Summary

NameSignatureSynopsis
(=>)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.

(=>)

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

Parameters

NameTypeDescription
namestring
value^value

Returns

DataField

(?=>)

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

Parameters

NameTypeDescription
namestring
value^value option

Returns

DataField

nil

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

Returns

Data

num

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

Returns

string -> Data

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 ]

fields

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

Returns

Data -> DataField list

set

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

Parameters

NameTypeDescription
pathstring
value^a

Returns

DataEdit

replace

replace path value
Member
Replaces an existing value.

Parameters

NameTypeDescription
pathstring
value^a

Returns

DataEdit

remove

remove
Member
Removes an existing field or list item.

Returns

string -> DataEdit

append

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

Parameters

NameTypeDescription
pathstring
value^a

Returns

DataEdit

prepend

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

Parameters

NameTypeDescription
pathstring
value^a

Returns

DataEdit

insert

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

Parameters

NameTypeDescription
pathstring
indexint
value^a

Returns

DataEdit

rename

rename
Member
Renames an existing object field without moving it.

Returns

string -> string -> DataEdit

update

update
Member
Applies an ordinary function to an existing value.

Returns

string -> (Data -> Data) -> DataEdit

variant

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

Parameters

NameTypeDescription
namestring
editsDataEdit list

Returns

DataVariation

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 ] } ]

dimension

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

Parameters

NameTypeDescription
namestring
variationsDataVariation list

Returns

DataDimension

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"

exactly

exactly value
Member
Creates an exact recursive pattern.

Parameters

NameTypeDescription
value^a

Returns

DataPattern

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 ()

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

inOrder

inOrder values
Member
Matches expected items as an ordered subsequence.

Parameters

NameTypeDescription
values^a list

Returns

DataPattern

allItems

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

Parameters

NameTypeDescription
value^a

Returns

DataPattern

someItem

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

Parameters

NameTypeDescription
value^a

Returns

DataPattern

any

any
Member
Matches any present value.

Returns

DataPattern

anyText

anyText
Member
Matches any text value.

Returns

DataPattern

anyNumber

anyNumber
Member
Matches any number token.

Returns

DataPattern

oneOf

oneOf patterns
Member
Matches when one supplied alternative matches.

Parameters

NameTypeDescription
patternsDataPattern list

Returns

DataPattern

satisfying

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

Parameters

NameTypeDescription
descriptionstring
predicateData -> bool

Returns

DataPattern

at

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

Parameters

NameTypeDescription
pathstring
expected^a

Returns

DataExpectation

absent

absent path
Member
Requires a path to be absent.

Parameters

NameTypeDescription
pathstring

Returns

DataExpectation

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