33 lines
No EOL
892 B
Elm
33 lines
No EOL
892 B
Elm
|
|
module Maybe where
|
|
|
|
import List as List
|
|
|
|
-- The Maybe datatype. Useful when a computation may or may not
|
|
-- result in a value (e.g. logarithm is defined only for positive numbers).
|
|
data Maybe a = Just a | Nothing
|
|
|
|
-- Apply a function to the contents of a `Maybe`.
|
|
-- Return default when given `Nothing`.
|
|
maybe : b -> (a -> b) -> Maybe a -> b
|
|
maybe b f m = case m of
|
|
Just v -> f v
|
|
Nothing -> b
|
|
|
|
-- Check if constructed with `Just`.
|
|
isJust : Maybe a -> Bool
|
|
isJust = maybe False (\_ -> True)
|
|
|
|
-- Check if constructed with `Nothing`.
|
|
isNothing : Maybe a -> Bool
|
|
isNothing = not . isJust
|
|
|
|
|
|
-- If `Just`, adds the value to the front of the list.
|
|
-- If `Nothing`, list is unchanged.
|
|
cons : Maybe a -> [a] -> [a]
|
|
cons mx xs = maybe xs (\x -> x :: xs) mx
|
|
|
|
-- Filters out Nothings and extracts the remaining values.
|
|
justs : [Maybe a] -> [a]
|
|
justs = List.foldr cons [] |