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