aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel/EphemeralRelation.ml
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2026-09-25 22:53:34 -0300
committerMarcos Magueta <maguetamarcos@gmail.com>2026-09-25 22:53:34 -0300
commit8ff6bd42c0708b35f3026633e99f109de1bec89e (patch)
treeb069927f442b6ced285c1bd7709147be8cb098a5 /lib/kernel/EphemeralRelation.ml
parent584fbca6d920e9a9f91d451667f9380714ac2175 (diff)
downloadRNT-8ff6bd42c0708b35f3026633e99f109de1bec89e.tar.gz
RNT-8ff6bd42c0708b35f3026633e99f109de1bec89e.zip
wip ephemeral relations as program consumers
Diffstat (limited to '')
-rw-r--r--lib/kernel/EphemeralRelation.ml98
1 files changed, 27 insertions, 71 deletions
diff --git a/lib/kernel/EphemeralRelation.ml b/lib/kernel/EphemeralRelation.ml
index 8aa0463..ddf005d 100644
--- a/lib/kernel/EphemeralRelation.ml
+++ b/lib/kernel/EphemeralRelation.ml
@@ -1,73 +1,29 @@
-module type DERIVATION = sig
- type plan
-
- val identity : plan -> Concepts.Hash.hash
-
- val describe :
- plan -> (Protocols.Schematics.relation_description, Concepts.Condition.condition) result
-
- val modes : plan -> (Concepts.Mode.t, Concepts.Condition.condition) result
-
- val generate :
- plan ->
- Protocols.Generative.binding ->
- (Protocols.Handle.t, Concepts.Condition.condition) result
+type t =
+ { schematics: [`Persisted of Concepts.Hash.hash
+ | `Temporary of (Protocols.Schematics.attribute_description BatMap.String.t) ] }
+
+module Error = struct
+ open Concepts.Condition
+ let local_constraint_not_implemented =
+ condition "local-constraint-not-implemented"
+ "Local constraints have no centralized authority for their discerniment and enforcement yet."
+ empty
+ let predicate_not_implemented =
+ condition "predicate-not-implemented"
+ "Preciate descriptions for relations is not designed yet."
+ empty
end
-module Make (D : DERIVATION) = struct
- let pinned_tag = "rnt/pinned/1"
-
- let identity ?pinned plan =
- let derivation = D.identity plan in
- match pinned with
- | None -> derivation
- | Some branch ->
- pinned_tag ^ Concepts.Hash.to_raw_string derivation ^ Concepts.Hash.to_raw_string branch
- |> Bytes.of_string
- |> Concepts.Hash.hash_of_bytes
-
- class ephemeral (plan : D.plan) address declaration description edges =
- object (self)
- inherit Lifecycle.counted
- inherit Protocols.Generative.membership
- val heading = Concepts.Mode.attributes_of_map description
- method destroy = List.iter Protocols.Handle.release edges
- method predicate = Ok None
- method local_constraints = Ok None
- method modes = Ok declaration
-
- (* A cursor holds a reference to its relation, so the edges it reads
- outlive a release of the relation that produced it. *)
- method generate binding =
- D.generate plan binding
- |> Result.map (fun cursor ->
- new Lifecycle.retaining cursor (self :> Lifecycle.lifecycle) |> Protocols.Handle.make )
-
- method enumerate = self#generate Protocols.Generative.nothing
- method describe () = Ok (Protocols.Schematics.Relation description)
-
- method protocols : Protocols.Handle.protocol list =
- let carried =
- [ Protocols.Relation.make self;
- Protocols.Schematics.make self;
- Protocols.Generative.make self ]
- in
- if Concepts.Mode.exhaustible declaration BatSet.String.empty then
- Protocols.Enumerable.make self :: carried
- else carried
-
- method hash : Concepts.Hash.hash = address
- end
-
- let derive ?pinned ?(edges = []) plan =
- let open Utilities.Result in
- let derived =
- let* declaration = D.modes plan in
- let* description = D.describe plan in
- Ok
- ( new ephemeral plan (identity ?pinned plan) declaration description edges
- |> Protocols.Handle.make )
- in
- Result.iter_error (fun _ -> List.iter Protocols.Handle.release edges) derived;
- derived
-end
+class ephemeral_relation program address value =
+ object (self)
+ inherit Lifecycle.null
+ val relation : t = value
+ method local_constraints = Error Error.local_constraint_not_implemented
+ method predicate = Error Error.predicate_not_implemented
+
+ method protocol : Protocols.Handle.protocol list =
+ Protocols.[ Relation.make self
+ ; Enumerable.make self
+ ; Schematics.make self ]
+ method hash : Concepts.Hash.hash = address
+ end