Module DA.Optional

The Optional type encapsulates an optional value. A value of type Optional a either contains a value of type a (represented as Some a), or it is empty (represented as None). Using Optional is a good way to deal with errors or exceptional cases without resorting to drastic measures such as error.

The Optional type is also an action. It is a simple kind of error action, where all errors are represented by None. A richer error action can be built using the Either type.



: Optional a -> a

The fromSome function extracts the element out of a Some and throws an error if its argument is None.

Note that in most cases you should prefer using fromSomeNote to get a better error on failures.


: Text -> Optional a -> a

Like fromSome but with a custom error message.


: [Optional a] -> [a]

The catOptionals function takes a list of Optionals and returns a list of all the Some values.


: [a] -> Optional a

The listToOptional function returns None on an empty list or Some a where a is the first element of the list.


: Optional a -> [a]

The optionalToList function returns an empty list when given None or a singleton list when not given None.


: a -> Optional a -> a

The fromOptional function takes a default value and a Optional value. If the Optional is None, it returns the default values otherwise, it returns the value contained in the Optional.


: Optional a -> Bool

The isSome function returns True iff its argument is of the form Some _.


: Optional a -> Bool

The isNone function returns True iff its argument is None.


: (a -> Optional b) -> [a] -> [b]

The mapOptional function is a version of map which can throw out elements. In particular, the functional argument returns something of type Optional b. If this is None, no element is added on to the result list. If it is Some b, then b is included in the result list.


: Applicative m => Optional a -> (a -> m ()) -> m ()

Perform some operation on Some, given the field inside the Some.


: (a -> Optional b) -> [a] -> Optional b

The findOptional returns the value of the predicate at the first element where it returns Some. findOptional is similar to find but it allows you to return a value from the predicate. This is useful both as a more type safe version if the predicate corresponds to a pattern match and for performance to avoid duplicating work performed in the predicate.