I'm just starting out with SML, and I'm trying to modify some code so I understand what it's doing (I can't find a decent SML/NJ debugger, but that's a separate question).

fun type_check e theta env non_gens = 
  case e of
    constant_int _  => (integer, theta) 
  | constant_bool _ => (boolean, theta) 
  | ...

Assume this is valid code in that constant_int is part of a datatype already declared, etc. How do I add a print statement to say 'Returning "integer"' to the case? I tried:

...
constant_int _ => (print "returning integer") (integer, theta)
...

But I get:

    stdIn:167.22-167.65 Error: operator is not a function [tycon mismatch]
      operator: unit
      in expression:
        (print "returning integer") (integer,theta)

I think I'm just not understanding how to execute a sequence of statements, only the last of which should be treated as the return value. Any advice?

Also, how would I print my own datatype value? SML didn't like when I tried to pass a datatype value into print() so I probably have to create a new print function for each datatype, is that correct?

Edit
Report