aboutsummaryrefslogtreecommitdiff
path: root/main/Version.icl
diff options
context:
space:
mode:
Diffstat (limited to 'main/Version.icl')
-rw-r--r--main/Version.icl32
1 files changed, 32 insertions, 0 deletions
diff --git a/main/Version.icl b/main/Version.icl
new file mode 100644
index 0000000..71ab761
--- /dev/null
+++ b/main/Version.icl
@@ -0,0 +1,32 @@
+implementation module Version
+
+import StdInt, StdClass
+
+:: VersionInfo =
+ { versionCurrent
+ :: Int
+ , versionOldestDefinition
+ :: Int
+ , versionOldestImplementation
+ :: Int
+ }
+
+:: VersionsCompatability
+ = VersionsAreCompatible
+ | VersionObservedIsTooOld
+ | VersionObservedIsTooNew
+
+versionCompare :: VersionInfo VersionInfo -> VersionsCompatability
+versionCompare expected observed
+ | expected.versionCurrent < observed.versionCurrent
+ | expected.versionCurrent >= observed.versionOldestDefinition
+ = VersionsAreCompatible
+ // otherwise
+ = VersionObservedIsTooNew
+ | expected.versionCurrent == observed.versionCurrent
+ = VersionsAreCompatible
+ // expected.versionCurrent > observed.versionCurrent
+ | expected.versionOldestImplementation <= observed.versionCurrent
+ = VersionsAreCompatible
+ // otherwise
+ = VersionObservedIsTooOld