-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Optional function arguments -- @package optional-args @version 1.0.0 -- | Use the Optional type for optional function arguments. For -- example: -- --
-- import Data.Optional -- -- greet :: Optional String -> String -- greet (Specific name) = "Hello, " ++ name -- greet Default = "Hello" ---- --
-- >>> greet (Specific "John") -- "Hello, John" -- -- >>> greet Default -- "Hello" ---- -- The Optional type overloads as many Haskell literals as -- possible so that you do not need to wrap values in Specific. -- For example, if you enable the OverloadedStrings extension -- you can use a naked string literal instead: -- --
-- >>> :set -XOverloadedStrings -- -- >>> greet "John" -- "Hello, John" ---- -- The Optional type also implements Num and -- Fractional, so you can use numeric literals in place of -- Optional values: -- --
-- birthday :: Optional Int -> String -- birthday (Specific age) = "You are " ++ show age ++ " years old!" -- birthday Default = "You are one year older!" ---- --
-- >>> birthday 20 -- "You are 20 years old!" -- -- >>> birthday Default -- "You are one year older!" ---- -- The IsString, Num, and Fractional instances are -- recursive, so you can wrap your types in a more descriptive newtype -- and derive IsString, Num or Fractional: -- --
-- {-# LANGUAGE GeneralizedNewtypeDeriving #-}
--
-- import Data.Optional
-- import Data.String (IsString)
--
-- newtype Name = Name { getName :: String } deriving (IsString)
--
-- greet :: Optional Name -> String
-- greet (Specific name) = "Hello, " ++ getName name
-- greet Default = "Hello"
--
-- newtype Age = Age { getAge :: Int } deriving (Num)
--
-- birthday :: Optional Age -> String
-- birthday (Specific age) = "You are " ++ show (getAge age) ++ " years old!"
-- birthday Default = "You are one year older!"
--
--
-- ... and you would still be able to provide naked numeric or string
-- literals:
--
-- -- >>> :set -XOverloadedStrings -- -- >>> greet "John" -- "Hello, John" -- -- >>> birthday 20 -- "You are 20 years old!" ---- -- You can use empty as a short-hand for a Default -- argument: -- --
-- >>> greet empty -- "Hello" -- -- >>> birthday empty -- "You are one year older!" ---- -- You can also use pure as a short-hand for a Specific -- argument: -- --
-- >>> greet (pure "John") -- "Hello, John" -- -- >>> birthday (pure 20) -- "You are 20 years old!" --module Data.Optional -- | A function argument that has a Default value data Optional a Default :: Optional a Specific :: a -> Optional a -- | The identity of <|> empty :: Alternative f => forall a. f a -- | Lift a value. pure :: Applicative f => forall a. a -> f a instance Eq a => Eq (Optional a) instance Functor Optional instance Foldable Optional instance Traversable Optional instance Show a => Show (Optional a) instance Fractional a => Fractional (Optional a) instance Num a => Num (Optional a) instance IsString a => IsString (Optional a) instance Monoid a => Monoid (Optional a) instance MonadPlus Optional instance Alternative Optional instance Monad Optional instance Applicative Optional