Reputation: 3129
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
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
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
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