Beginning cleanup of Process errors
This commit is contained in:
parent
40bf7443c9
commit
ce58cf1bb3
|
@ -43,12 +43,6 @@ module Process = {
|
||||||
~values: (frValueDistOrNumber, frValueDistOrNumber),
|
~values: (frValueDistOrNumber, frValueDistOrNumber),
|
||||||
): result<DistributionTypes.genericDist, string> => {
|
): result<DistributionTypes.genericDist, string> => {
|
||||||
let toSampleSet = r => GenericDist.toSampleSetDist(r, 1000)
|
let toSampleSet = r => GenericDist.toSampleSetDist(r, 1000)
|
||||||
let sampleSetToExpressionValue = (b: Belt.Result.t<SampleSetDist.t, DistributionTypes.error>) =>
|
|
||||||
switch b {
|
|
||||||
| Ok(r) => Ok(DistributionTypes.SampleSet(r))
|
|
||||||
| Error(d) => Error(DistributionTypes.Error.toString(d))
|
|
||||||
}
|
|
||||||
|
|
||||||
let mapFnResult = r =>
|
let mapFnResult = r =>
|
||||||
switch r {
|
switch r {
|
||||||
| Ok(r) => Ok(GenericDist.sample(r))
|
| Ok(r) => Ok(GenericDist.sample(r))
|
||||||
|
@ -56,33 +50,33 @@ module Process = {
|
||||||
}
|
}
|
||||||
|
|
||||||
let singleVarSample = (dist, fn) => {
|
let singleVarSample = (dist, fn) => {
|
||||||
let sampleSetResult =
|
switch toSampleSet(dist) {
|
||||||
dist
|
| Ok(dist) =>
|
||||||
->toSampleSet
|
switch SampleSetDist.samplesMap(~fn=f => fn(f)->mapFnResult, dist) {
|
||||||
->E.R.bind(dist =>
|
| Ok(r) => Ok(DistributionTypes.SampleSet(r))
|
||||||
SampleSetDist.samplesMap(
|
| Error(r) => Error(DistributionTypes.Error.toString(DistributionTypes.SampleSetError(r)))
|
||||||
~fn=f => fn(f)->mapFnResult,
|
}
|
||||||
dist,
|
| Error(r) => Error(DistributionTypes.Error.toString(r))
|
||||||
)->E.R2.errMap(r => DistributionTypes.SampleSetError(r))
|
}
|
||||||
)
|
}
|
||||||
sampleSetResult->sampleSetToExpressionValue
|
|
||||||
|
let twoVarSample = (dist1, dist2, fn) => {
|
||||||
|
let altFn = (a, b) => fn((a, b))->mapFnResult
|
||||||
|
switch E.R.merge(toSampleSet(dist1), toSampleSet(dist2)) {
|
||||||
|
| Ok((t1, t2)) =>
|
||||||
|
switch SampleSetDist.map2(~fn=altFn, ~t1, ~t2) {
|
||||||
|
| Ok(r) => Ok(DistributionTypes.SampleSet(r))
|
||||||
|
| Error(r) => Error(Operation.Error.toString(r))
|
||||||
|
}
|
||||||
|
| Error(r) => Error(DistributionTypes.Error.toString(r))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch values {
|
switch values {
|
||||||
| (FRValueNumber(a1), FRValueNumber(a2)) => fn((a1, a2))
|
| (FRValueNumber(a1), FRValueNumber(a2)) => fn((a1, a2))
|
||||||
| (FRValueDist(a1), FRValueNumber(a2)) => singleVarSample(a1, r => fn((r, a2)))
|
| (FRValueDist(a1), FRValueNumber(a2)) => singleVarSample(a1, r => fn((r, a2)))
|
||||||
| (FRValueNumber(a1), FRValueDist(a2)) => singleVarSample(a2, r => fn((a1, r)))
|
| (FRValueNumber(a1), FRValueDist(a2)) => singleVarSample(a2, r => fn((a1, r)))
|
||||||
| (FRValueDist(a1), FRValueDist(a2)) => {
|
| (FRValueDist(a1), FRValueDist(a2)) => twoVarSample(a1, a2, fn)
|
||||||
let altFn = (a, b) => fn((a, b))->mapFnResult
|
|
||||||
let sampleSetResult =
|
|
||||||
E.R.merge(toSampleSet(a1), toSampleSet(a2))
|
|
||||||
->E.R2.errMap(DistributionTypes.Error.toString)
|
|
||||||
->E.R.bind(((t1, t2)) => {
|
|
||||||
SampleSetDist.map2(~fn=altFn, ~t1, ~t2)->E.R2.errMap(Operation.Error.toString)
|
|
||||||
})
|
|
||||||
->E.R2.errMap(r => DistributionTypes.OtherError(r))
|
|
||||||
sampleSetResult->sampleSetToExpressionValue
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user