Add more Throwable & Exception handling functionality to Prelude 48/1348/3
authorjsimomaa <jani.simomaa@gmail.com>
Thu, 4 Jan 2018 07:56:34 +0000 (09:56 +0200)
committerjsimomaa <jani.simomaa@gmail.com>
Thu, 4 Jan 2018 08:23:47 +0000 (10:23 +0200)
refs #7705

Change-Id: Ie335d3e8f7dacb0da66d0bb1491862fb054c61cb

bundles/org.simantics.scl.runtime/scl/Prelude.scl

index a926ae40ec3b0ca4ffb4c635132c3fa9eaa58f9e..eb8026de910e15f2b8900c2e0fce6a6d6a0d0d6e 100644 (file)
@@ -2214,6 +2214,12 @@ importJava "java.lang.Throwable" where
     @private
     @JavaName toString
     showThrowable :: Throwable -> String
+    @private
+    @JavaName getMessage 
+    getMessageThrowable :: Throwable -> String
+    @private
+    @JavaName getCause 
+    getCauseThrowable :: Throwable -> Maybe Throwable
 importJava "java.lang.Exception" where
     data Exception
     @private
@@ -2225,6 +2231,20 @@ instance Show Throwable where
 instance Show Exception where
     show = showException
 
+class Throwable e where
+    toThrowable :: e -> Throwable
+
+messageOfException :: Throwable e => e -> String
+messageOfException = getMessageThrowable . toThrowable
+
+causeOfException :: Throwable e => e -> Maybe Throwable
+causeOfException = getCauseThrowable . toThrowable
+
+instance Throwable Throwable where
+    toThrowable = id
+instance Throwable Exception where
+    toThrowable = Java.unsafeCoerce
+
 "Prints the given value in the console."
 @inline
 print :: Show a => a -> <Proc> ()