Beginning cleanup of Process errors

This commit is contained in:
Ozzie Gooen 2022-05-21 12:09:49 -04:00
parent 40bf7443c9
commit ce58cf1bb3

View File

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