First attempt at Model type

This commit is contained in:
Ozzie Gooen 2020-02-08 17:48:35 +00:00
parent 8d42aaacd0
commit 7393f88bfd

68
src/Model.re Normal file
View File

@ -0,0 +1,68 @@
module IOTypes = {
type singleChoice = {options: list(string)};
type floatPoint = {validatations: list(float => bool)};
type withDefault('a) = {default: option('a)};
};
module Input = {
type parameterType =
| Year(IOTypes.withDefault(float))
| SingleChoice(IOTypes.singleChoice)
| FloatPoint
| FloatCdf;
type parameter = {
name: string,
parameterType,
};
let make = (name, parameterType) => {name, parameterType};
};
module Output = {
type parameterType =
| Year
| SingleChoice(IOTypes.singleChoice)
| FloatPoint
| FloatCdf;
type parameter = {
name: string,
parameterType,
};
let make = (name, parameterType) => {name, parameterType};
};
type props = {
name: string,
author: string,
assumptions: list(Input.parameter),
inputs: list(Input.parameter),
outputs: list(Output.parameter),
};
let model1 = {
name: "Calculate the payments and payouts of EA Funds based on existing data.",
author: "George Harrison",
assumptions: [Input.make("Yearly Growth Rate", FloatPoint)],
inputs: [
Input.make(
"Fund",
SingleChoice({
options: [
"Animal Welfare Fund",
"Global Health Fund",
"Long Term Future Fund",
"Meta Fund",
"Total",
],
}),
),
{name: "Year", parameterType: Year({default: Some(2030.0)})},
],
outputs: [
Output.make("Payments", FloatCdf),
Output.make("Payouts", FloatCdf),
],
};