From a03869362b5706345ecbb3783bd7f6173d12b698 Mon Sep 17 00:00:00 2001 From: David Pedersen Date: Thu, 5 Dec 2013 12:33:02 +0100 Subject: [standard-ml/en-en] Exceptions --- standard-ml.html.markdown | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'standard-ml.html.markdown') diff --git a/standard-ml.html.markdown b/standard-ml.html.markdown index 56b6853c..547ca39b 100644 --- a/standard-ml.html.markdown +++ b/standard-ml.html.markdown @@ -302,6 +302,28 @@ fun count (Leaf n) = n | count (Node (leftTree, n, rightTree)) = count leftTree + n + count rightTree +(* Exceptions! *) +(* Exceptions can be raised using "raise" *) +fun raiseException msg = raise Fail msg + +(* This raises exception `Fail "hello from exception"` *) +(* val _ = raiseException "hello from exception" *) + +(* Exceptions can be caught using "handle" *) +val x = raiseException "hello" handle Fail msg => msg +(* x now has the value "hello" *) + +(* We can pattern match in "handle" to make sure + a specfic exception was raised, or grab the message *) +val y = raiseException "..." handle Fail _ => "Fail was raised" + | Domain => "Domain was raised" +(* y now has the value "Fail was raised" *) + +(* We can define our own exceptions like this *) +exception MyException +exception MyExceptionWithMessage of string + + (* File I/O! *) (* Write a nice poem to a file *) fun writePoem(filename) = -- cgit v1.2.3