Below is a valid variant type definition in OCaml. (source)
type t = U of u and u = T of t
Is there a use for it?
And how to create a value of type t? Or type u?
Below is a valid variant type definition in OCaml. (source)
type t = U of u and u = T of t
Is there a use for it?
And how to create a value of type t? Or type u?
The example you've shown does not make much sense. There's no way for the recursion to end.
As Naïm Favier notes, you can actually create a value, but the cyclic nature of the values will be noted by OCaml.
# let rec t = T u and u = U t;;
val t : u = T (U <cycle>)
val u : t = U (T <cycle>)
But with that, mutually recursive types can be
very useful. Consider the definition of Seq.t from the standard library.
type 'a t = unit -> 'a node (** A sequence [xs] of type ['a t] is a delayed list of elements of type ['a]. Such a sequence is queried by performing a function application [xs()]. This function application returns a node, allowing the caller to determine whether the sequence is empty or nonempty, and in the latter case, to obtain its head and tail. *) and +'a node = | Nil | Cons of 'a * 'a t (**) (** A node is either [Nil], which means that the sequence is empty, or [Cons (x, xs)], which means that [x] is the first element of the sequence and that [xs] is the remainder of the sequence. *)
Source

let rec t = T u and u = U t;;– Naïm Favier Commented Feb 1 at 14:24