    import ceylon.language { printTrace=printStackTrace }

    "The supertype of all exceptions. A subclass represents
     a more specific kind of problem, and may define
     additional attributes which propagate information about
     problems of that kind."
    by ("Gavin", "Tom")
    shared native class Exception(description=null, cause=null) {

        "The underlying cause of this exception."
        shared Exception? cause;

        "A description of the problem."
        String? description;

        //shared native StackTrace stackTrace;

        "A message describing the problem. This default
         implementation returns the description, if any, or
         otherwise the message of the cause, if any."
        see (`value cause`)
        shared default String message
                => description else cause?.message else "";

        shared actual default String string
                => className(this) + " \"``message``\"";

        "Print the stack trace to the standard error of
         the virtual machine process."
        see (`function printTrace`)
        shared void printStackTrace() => printTrace(this);

    }