RefinementModule

PackageReified.Refinements
Creates and applies reusable refinement definitions.

Summary

NameSignatureSynopsis
defineRefinement.define constraint' construct projectDefines a refinement from one constraint, a constructor, and the reverse projection.
createRefinement.create refinement underlyingConstructs a refined value, reporting why the raw value was not admitted.
underlyingRefinement.underlying refinement valueReturns the canonical underlying representation of a refined value.
constraint'Refinement.constraint' refinementReturns the constraint the refinement admits by.

define

Refinement.define constraint' construct project
Member
Defines a refinement from one constraint, a constructor, and the reverse projection.

Parameters

NameTypeDescription
constraint'Constraint<'underlying>
construct'underlying -> 'refined
project'refined -> 'underlying

Returns

Refinement<'underlying, 'refined>

Verification Examples

type RetryCount = RetryCount of int
 let retryCount =
     Refinement.define (Constraint.between 0 10) RetryCount (fun (RetryCount value) -> value)

create

Refinement.create refinement underlying
Member
Constructs a refined value, reporting why the raw value was not admitted.

Parameters

NameTypeDescription
refinementRefinement<'underlying, 'refined>
underlying'underlying

Returns

Result<'refined, Violation>

Verification Examples

type RetryCount = RetryCount of int
 let retryCount = Refinement.define (Constraint.between 0 10) RetryCount (fun (RetryCount value) -> value)
 3 |> Refinement.create retryCount |> Result.mapError Violation.render

underlying

Refinement.underlying refinement value
Member
Returns the canonical underlying representation of a refined value.

Parameters

NameTypeDescription
refinementRefinement<'underlying, 'refined>
value'refined

Returns

'underlying

Verification Examples

type RetryCount = RetryCount of int
 let retryCount = Refinement.define (Constraint.between 0 10) RetryCount (fun (RetryCount value) -> value)
 RetryCount 3 |> Refinement.underlying retryCount // 3

constraint'

Refinement.constraint' refinement
Member
Returns the constraint the refinement admits by.

Parameters

NameTypeDescription
refinementRefinement<'underlying, 'refined>

Returns

Constraint<'underlying>

Verification Examples

type RetryCount = RetryCount of int
 let retryCount = Refinement.define (Constraint.between 0 10) RetryCount (fun (RetryCount value) -> value)
 retryCount |> Refinement.constraint' |> Constraint.inspect