Plandex_backup / app /server /syntax /file_map /examples /ocaml_example.ml
google-labs-jules[bot]
Final deployment for HF with landing page
93d826e
(* Module signature *)
module type DataProcessor = sig
type 'a t
val create : unit -> 'a t
val process : 'a t -> 'a -> ('a, string) result
val validate : 'a -> bool
end
(* Module implementation *)
module StringProcessor : DataProcessor with type 'a = string = struct
type 'a = string
type t = {
mutable processed_count: int;
created_at: float;
}
let create () = {
processed_count = 0;
created_at = Unix.time ();
}
let process t input =
t.processed_count <- t.processed_count + 1;
if String.length input > 0 then
Ok (String.uppercase_ascii input)
else
Error "Empty input"
let validate input =
String.length input > 0
end
(* Type definitions *)
type user = {
id: int;
name: string;
email: string;
created_at: float;
}
type 'a result =
| Success of 'a
| Error of string
(* Variant type *)
type message =
| Text of string
| Number of int
| Tuple of string * int
| Record of user
(* Functor definition *)
module type Comparable = sig
type t
val compare : t -> t -> int
end
module MakeSet (Item : Comparable) = struct
type element = Item.t
type t = element list
let empty = []
let rec add x = function
| [] -> [x]
| hd :: tl as l ->
match Item.compare x hd with
| 0 -> l
| n when n < 0 -> x :: l
| _ -> hd :: add x tl
let member x set =
List.exists (fun y -> Item.compare x y = 0) set
end
(* Exception definition *)
exception ValidationError of string
(* Higher-order function *)
let memoize f =
let cache = Hashtbl.create 16 in
fun x ->
try Hashtbl.find cache x
with Not_found ->
let result = f x in
Hashtbl.add cache x result;
result
(* Object-oriented features *)
class virtual ['a] queue = object(self)
val mutable items = []
method virtual push : 'a -> unit
method virtual pop : 'a option
method size = List.length items
method is_empty = items = []
method protected get_items = items
method protected set_items new_items = items <- new_items
end
class ['a] fifo_queue = object(self)
inherit ['a] queue
method push item =
self#set_items (self#get_items @ [item])
method pop =
match self#get_items with
| [] -> None
| hd::tl ->
self#set_items tl;
Some hd
end
(* Module for handling JSON-like data *)
module Json = struct
type t =
| Null
| Bool of bool
| Number of float
| String of string
| Array of t list
| Object of (string * t) list
let rec to_string = function
| Null -> "null"
| Bool b -> string_of_bool b
| Number n -> string_of_float n
| String s -> "\"" ^ String.escaped s ^ "\""
| Array items ->
"[" ^ String.concat ", " (List.map to_string items) ^ "]"
| Object pairs ->
let pair_to_string (k, v) =
"\"" ^ String.escaped k ^ "\": " ^ to_string v
in
"{" ^ String.concat ", " (List.map pair_to_string pairs) ^ "}"
end
(* Main execution *)
let () =
let processor = StringProcessor.create () in
let result = StringProcessor.process processor "hello world" in
match result with
| Ok processed -> Printf.printf "Processed: %s\n" processed
| Error msg -> Printf.eprintf "Error: %s\n" msg;
let queue = new fifo_queue in
queue#push 1;
queue#push 2;
queue#push 3;
let rec print_queue () =
match queue#pop with
| Some item ->
Printf.printf "Item: %d\n" item;
print_queue ()
| None -> ()
in
print_queue ()