Alexey Alexandrov
Alexey Alexandrov

Reputation: 3129

How to get type information in interactive Ocaml?

I am using Ocaml of version 4. When I define interactively some type, the interpreter prints out string representation of the type immediately after that:

# type foo = Yes | No;;         <-- This is what I entered
type foo = Yes | No             <-- This is what interpreter bounced

But after I type more definitions, sometimes I want to see the text representation of the type again.

In Haskell, I could type ":t foo".

How can I do this in Ocaml?

Upvotes: 24

Views: 8851

Answers (3)

Bozhidar Batsov
Bozhidar Batsov

Reputation: 56595

If you're using a recent version of ocaml (e.g. 4.14) or utop you can use their #show directive:

utop> let x = 5;;
val x : int = 5
utop> #show x;;
val x : int
utop> #show (+);;
external ( + ) : int -> int -> int = "%addint"

Upvotes: 1

ivg
ivg

Reputation: 35210

In utop you can use the #typeof directive:

#typeof "list";;
type 'a list = [] | :: of 'a * 'a list 

You can put values and types inside double quotes:

let t = [`Hello, `World];;
#typeof "t";;
val t : ([> `Hello ] * [> `World ]) list   

P.S. And even better solution would be to use merlin.

Upvotes: 18

codablank1
codablank1

Reputation: 6175

As far as I know, there is actually no way in Ocaml to retrieve type information under a string form

You'll have to build a pattern matching for each of your type

type foo = Yes | No;;

let getType = function
  |Yes -> "Yes"
  |No -> "No"    
  ;;

let a = Yes;;
print_string (getType a);;

Upvotes: 2

Related Questions