diff --git a/packages/squiggle-lang/src/rescript/distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/distributions/GenericDist.res new file mode 100644 index 00000000..7e110a27 --- /dev/null +++ b/packages/squiggle-lang/src/rescript/distributions/GenericDist.res @@ -0,0 +1,33 @@ +type distribution = + | SymbolicDist(SymbolicDistTypes.symbolicDist) + | PointSetDist(PointSetTypes.pointSetDist) + | SampleSetDist(SampleSet.Internals.Types.outputs) + +module Distributions = { + module D = E.Threither( + {type tau = SymbolicDistTypes.symbolicDist}, + {type tau = PointSetTypes.pointSetDist}, + {type tau = SampleSet.Internals.Types.outputs} + ) + + + +} + +type distinputs = + | Symb(SymbolicDistTypes.symbolicDist) + | PS(PointSetTypes.pointSetDist) + | SS(SampleSet.Internals.Types.outputs) + +module type theDist = { + let t: distribution +} + +module TheDistribution = (Thedist: theDist) => { + let t = Thedist.t + let thedistribution: distinputs = switch t { + | SymbolicDist(symbdist) => Symb(symbdist) + | PointSetDist(pointsetdist) => PS(pointsetdist) + | SampleSetDist(samplesetdist) => SS(samplesetdist) + } +} diff --git a/packages/squiggle-lang/src/rescript/pointSetDist/AlgebraicShapeCombination.res b/packages/squiggle-lang/src/rescript/distributions/pointSetDist/AlgebraicShapeCombination.res similarity index 100% rename from packages/squiggle-lang/src/rescript/pointSetDist/AlgebraicShapeCombination.res rename to packages/squiggle-lang/src/rescript/distributions/pointSetDist/AlgebraicShapeCombination.res diff --git a/packages/squiggle-lang/src/rescript/pointSetDist/Continuous.res b/packages/squiggle-lang/src/rescript/distributions/pointSetDist/Continuous.res similarity index 100% rename from packages/squiggle-lang/src/rescript/pointSetDist/Continuous.res rename to packages/squiggle-lang/src/rescript/distributions/pointSetDist/Continuous.res diff --git a/packages/squiggle-lang/src/rescript/pointSetDist/Discrete.res b/packages/squiggle-lang/src/rescript/distributions/pointSetDist/Discrete.res similarity index 100% rename from packages/squiggle-lang/src/rescript/pointSetDist/Discrete.res rename to packages/squiggle-lang/src/rescript/distributions/pointSetDist/Discrete.res diff --git a/packages/squiggle-lang/src/rescript/pointSetDist/DistPlus.res b/packages/squiggle-lang/src/rescript/distributions/pointSetDist/DistPlus.res similarity index 97% rename from packages/squiggle-lang/src/rescript/pointSetDist/DistPlus.res rename to packages/squiggle-lang/src/rescript/distributions/pointSetDist/DistPlus.res index 39f355ab..72fa927e 100644 --- a/packages/squiggle-lang/src/rescript/pointSetDist/DistPlus.res +++ b/packages/squiggle-lang/src/rescript/distributions/pointSetDist/DistPlus.res @@ -48,8 +48,7 @@ let toPointSetDist = ({pointSetDist, _}: t) => pointSetDist; let pointSetDistFn = (fn, {pointSetDist}: t) => fn(pointSetDist); -module T = - Distributions.Dist({ +module Thedist: Distributions.dist = { type t = PointSetTypes.distPlus; type integral = PointSetTypes.distPlus; let toPointSetDist = toPointSetDist; @@ -127,4 +126,6 @@ module T = PointSetDist.T.mean(t.pointSetDist); }; let variance = (t: t) => PointSetDist.T.variance(t.pointSetDist); - }); +} + +module T = Distributions.Dist(Thedist); diff --git a/packages/squiggle-lang/src/rescript/pointSetDist/Distributions.res b/packages/squiggle-lang/src/rescript/distributions/pointSetDist/Distributions.res similarity index 100% rename from packages/squiggle-lang/src/rescript/pointSetDist/Distributions.res rename to packages/squiggle-lang/src/rescript/distributions/pointSetDist/Distributions.res diff --git a/packages/squiggle-lang/src/rescript/pointSetDist/Mixed.res b/packages/squiggle-lang/src/rescript/distributions/pointSetDist/Mixed.res similarity index 100% rename from packages/squiggle-lang/src/rescript/pointSetDist/Mixed.res rename to packages/squiggle-lang/src/rescript/distributions/pointSetDist/Mixed.res diff --git a/packages/squiggle-lang/src/rescript/pointSetDist/MixedShapeBuilder.res b/packages/squiggle-lang/src/rescript/distributions/pointSetDist/MixedShapeBuilder.res similarity index 100% rename from packages/squiggle-lang/src/rescript/pointSetDist/MixedShapeBuilder.res rename to packages/squiggle-lang/src/rescript/distributions/pointSetDist/MixedShapeBuilder.res diff --git a/packages/squiggle-lang/src/rescript/pointSetDist/PointSetDist.res b/packages/squiggle-lang/src/rescript/distributions/pointSetDist/PointSetDist.res similarity index 100% rename from packages/squiggle-lang/src/rescript/pointSetDist/PointSetDist.res rename to packages/squiggle-lang/src/rescript/distributions/pointSetDist/PointSetDist.res diff --git a/packages/squiggle-lang/src/rescript/pointSetDist/PointSetTypes.res b/packages/squiggle-lang/src/rescript/distributions/pointSetDist/PointSetTypes.res similarity index 100% rename from packages/squiggle-lang/src/rescript/pointSetDist/PointSetTypes.res rename to packages/squiggle-lang/src/rescript/distributions/pointSetDist/PointSetTypes.res diff --git a/packages/squiggle-lang/src/rescript/pointSetDist/XYShape.res b/packages/squiggle-lang/src/rescript/distributions/pointSetDist/XYShape.res similarity index 100% rename from packages/squiggle-lang/src/rescript/pointSetDist/XYShape.res rename to packages/squiggle-lang/src/rescript/distributions/pointSetDist/XYShape.res diff --git a/packages/squiggle-lang/src/rescript/sampleSet/Bandwidth.res b/packages/squiggle-lang/src/rescript/distributions/sampleSet/Bandwidth.res similarity index 100% rename from packages/squiggle-lang/src/rescript/sampleSet/Bandwidth.res rename to packages/squiggle-lang/src/rescript/distributions/sampleSet/Bandwidth.res diff --git a/packages/squiggle-lang/src/rescript/sampleSet/KdeLibrary.js b/packages/squiggle-lang/src/rescript/distributions/sampleSet/KdeLibrary.js similarity index 100% rename from packages/squiggle-lang/src/rescript/sampleSet/KdeLibrary.js rename to packages/squiggle-lang/src/rescript/distributions/sampleSet/KdeLibrary.js diff --git a/packages/squiggle-lang/src/rescript/sampleSet/SampleSet.res b/packages/squiggle-lang/src/rescript/distributions/sampleSet/SampleSet.res similarity index 100% rename from packages/squiggle-lang/src/rescript/sampleSet/SampleSet.res rename to packages/squiggle-lang/src/rescript/distributions/sampleSet/SampleSet.res diff --git a/packages/squiggle-lang/src/rescript/symbolicDist/SymbolicDist.res b/packages/squiggle-lang/src/rescript/distributions/symbolicDist/SymbolicDist.res similarity index 99% rename from packages/squiggle-lang/src/rescript/symbolicDist/SymbolicDist.res rename to packages/squiggle-lang/src/rescript/distributions/symbolicDist/SymbolicDist.res index 3da6bd02..6976aa50 100644 --- a/packages/squiggle-lang/src/rescript/symbolicDist/SymbolicDist.res +++ b/packages/squiggle-lang/src/rescript/distributions/symbolicDist/SymbolicDist.res @@ -1,5 +1,6 @@ open SymbolicDistTypes +// TODO: make module enumeration in the same order as the variant enumeration in SymbolicDistTypes module Normal = { type t = normal let make = (mean, stdev): symbolicDist => #Normal({mean: mean, stdev: stdev}) diff --git a/packages/squiggle-lang/src/rescript/symbolicDist/SymbolicDistTypes.res b/packages/squiggle-lang/src/rescript/distributions/symbolicDist/SymbolicDistTypes.res similarity index 74% rename from packages/squiggle-lang/src/rescript/symbolicDist/SymbolicDistTypes.res rename to packages/squiggle-lang/src/rescript/distributions/symbolicDist/SymbolicDistTypes.res index d2a6603e..760e9b0e 100644 --- a/packages/squiggle-lang/src/rescript/symbolicDist/SymbolicDistTypes.res +++ b/packages/squiggle-lang/src/rescript/distributions/symbolicDist/SymbolicDistTypes.res @@ -47,3 +47,13 @@ type analyticalSimplificationResult = [ | #Error(string) | #NoSolution ] + +type params = + | NormalParams(normal) + | BetaParams(beta) + | LognormalParams(lognormal) + | UniformParams(uniform) + | ExponentialParams(exponential) + | CauchyParams(cauchy) + | TriangularParams(triangular) + | FloatParams(float) diff --git a/packages/squiggle-lang/src/rescript/utility/E.res b/packages/squiggle-lang/src/rescript/utility/E.res index d17850fd..6ad3d2f0 100644 --- a/packages/squiggle-lang/src/rescript/utility/E.res +++ b/packages/squiggle-lang/src/rescript/utility/E.res @@ -441,3 +441,31 @@ module JsArray = { |> Js.Array.map(Rationale.Option.toExn("Warning: This should not have happened")) let filter = Js.Array.filter } + +module type Tau = { + type tau +} +module Threither = (Tau1: Tau, Tau2: Tau, Tau3: Tau) => { + type either3 = First(Tau1.tau) | Second(Tau2.tau) | Third(Tau3.tau) + let fmap1 = (~fn: Tau1.tau => 'a, ~x: either3) => switch x { + | First(y) => First(fn(y)) + | Second(y) => Second(y) + | Third(y) => Third(y) + } + let fmap2 = (~fn: Tau2.tau => 'a, ~x: either3) => switch x { + | First(y) => First(y) + | Second(y) => Second(fn(y)) + | Third(y) => Third(y) + } + let fmap3 = (~fn: Tau3.tau => 'a, ~x: either3) => switch x { + | First(y) => First(y) + | Second(y) => Second(y) + | Third(y) => Third(fn(y)) + } + + let trifmap = (~fn1: Tau1.tau => 'a, ~fn2: Tau2.tau => 'b, ~fn3: Tau3.tau => 'c, ~x: either3) => switch x { + | First(y) => First(fn1(y)) + | Second(y) => Second(fn2(y)) + | Third(y) => Third(fn3(y)) + } +}