Ocaml option , Some

hey, can someone help me analyze the following function?
fun → if r="-a" then Some (Rat(1,3)) else if r="_b" then Some (Rat(1,6)) else Some (Rat(0,1));;
I am only interested in Some (Rat(n,n1)) part. what Some will do in this case?
type value = Rat of rat | Fun of var * state * expr and state = var → value option ;;
i am wondering about value option part.

A value of type 'a option denotes a value of type 'a that can be present or not: Some x represents the case where the value is present and None the absence of such a value. Note that you can format your code with ```ocaml ```. For instance:

fun r ->
  if r="-a" then Some (Rat(1,3))
  else if r="_b" then Some (Rat(1,6))
  else Some (Rat(0,1))
1 Like

OCaml has variant data types that are used to represent variants of the same entity, e.g.,

type figure = Circle | Rect

Each variant may have its own varinat-specific values, e.g.,

type figure = Circle of int | Rect of int * int

The capitalized part is called constructor and can be used to construct values, so Circle 5 is a figure that is a circle with the specified radius. Another example, Rect (3,4) creates a figure that represents a rectangle. Constructors are also used to pattern match on variants of the type. You may think of this as a downcasting, e.g.,

let area : figure -> int = function
  | Circle r -> 3 * r * r 
  | Rectangle (x,y) -> x * y

So, instead of using class hierarchies and visitors, we use a simple and efficient representation that relies on variants and records, together known as algebraic data types.

Now back to option. This is a type from the OCaml standard library that has the following definition,

type 'a option = Some of 'a | None

So it that int option denotes a type of values that have two variants Some x where x has type int and None that doesn’t have any payload. This 'a denotes a parameterized type. So that 'a option is in fact a family of types. But this is another lesson. Please, consider reading the OCaml tutorial, it is short and easy. There are also a lot of books about OCaml.