From c452541e935295f2708271a12207f7c7ee2636bf Mon Sep 17 00:00:00 2001 From: Estevan Castilho Date: Sun, 23 Aug 2026 03:34:07 +0000 Subject: Allow directory operations to fail if needed --- lib/kernel/Namespace.ml | 6 ++++-- lib/kernel/Namespace.mli | 2 +- lib/protocols/Directory.ml | 4 ++-- lib/protocols/Directory.mli | 8 ++++---- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/kernel/Namespace.ml b/lib/kernel/Namespace.ml index 7c9cd2b..20f83f5 100644 --- a/lib/kernel/Namespace.ml +++ b/lib/kernel/Namespace.ml @@ -38,12 +38,14 @@ class namespace = object (self) method list = Atomic.get entries |> BatMap.keys - |> BatList.of_enum + |> BatFingerTree.of_enum + |> Result.ok method find key = Atomic.get entries |> BatMap.find_opt key |> Utilities.Option.fmap Protocols.Handle.copy + |> Result.ok end -let make () = new namespace +let make () = Protocols.Handle.make (new namespace) diff --git a/lib/kernel/Namespace.mli b/lib/kernel/Namespace.mli index 3ed64a3..ec77724 100644 --- a/lib/kernel/Namespace.mli +++ b/lib/kernel/Namespace.mli @@ -4,4 +4,4 @@ class namespace : object inherit Protocols.Registry.implementation end -val make : unit -> namespace +val make : unit -> Protocols.Handle.t diff --git a/lib/protocols/Directory.ml b/lib/protocols/Directory.ml index 5b21668..0d2507e 100644 --- a/lib/protocols/Directory.ml +++ b/lib/protocols/Directory.ml @@ -1,6 +1,6 @@ class type implementation = object - method list : string list - method find : string -> Handle.t option + method list : (string BatFingerTree.t, Concepts.Condition.condition) result + method find : string -> (Handle.t option, Concepts.Condition.condition) result end type Handle.protocol += Directory of implementation diff --git a/lib/protocols/Directory.mli b/lib/protocols/Directory.mli index 5bf5277..9033235 100644 --- a/lib/protocols/Directory.mli +++ b/lib/protocols/Directory.mli @@ -1,13 +1,13 @@ type t class type implementation = object - method list : string list - method find : string -> Handle.t option + method list : (string BatFingerTree.t, Concepts.Condition.condition) result + method find : string -> (Handle.t option, Concepts.Condition.condition) result end val make : #implementation -> Handle.protocol val from : Handle.t -> t Handle.interface option -val list : t Handle.interface -> string list -val find : t Handle.interface -> string -> Handle.t option +val list : t Handle.interface -> (string BatFingerTree.t, Concepts.Condition.condition) result +val find : t Handle.interface -> string -> (Handle.t option, Concepts.Condition.condition) result -- cgit v1.2.3