Via Default Values
Unfortunately, the domain problem of safe division is not an example for how "default value" approach can convert a partial function into a total function.
So instead, we'll use the example of getting the first element in a linked list. In situations where the list is empty, it will throw an exception:
-- partial function head :: List Int -> Int head Nil = -- Exception! head (Cons head tail) = head
To make the function total, we can provide a value to return in such cases:
-- total function headOrDefault :: List Int -> Int -> Int headOrDefault Nil default = default -- no more exceptions! headOrDefault (Cons head tail) _ = head