-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Optional function arguments -- -- This library provides a type for specifying Optional function -- arguments -- -- Read the tutorial in Data.Optional to learn more @package optional-args @version 1.0.2 -- | 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 defaultTo function takes a default value and an -- Optional value. If the Optional is Default, it -- returns the default value; otherwise, it returns the value contained -- in the Optional. defaultTo :: a -> Optional a -> a -- | Convert an Optional value into an instance of -- Alternative. fromOptional :: Alternative f => Optional a -> f a -- | The optional function takes a default value, a function, and an -- Optional value. If the Optional value is Default, -- the function returns the default value. Otherwise, it applies the -- function to the value inside the Optional and returns the -- result. optional :: b -> (a -> b) -> Optional a -> b -- | The identity of <|> empty :: Alternative f => forall a. () => f a -- | Lift a value. pure :: Applicative f => forall a. () => a -> f a instance GHC.Show.Show a => GHC.Show.Show (Data.Optional.Optional a) instance Data.Traversable.Traversable Data.Optional.Optional instance Data.Foldable.Foldable Data.Optional.Optional instance GHC.Base.Functor Data.Optional.Optional instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Optional.Optional a) instance GHC.Base.Applicative Data.Optional.Optional instance GHC.Base.Monad Data.Optional.Optional instance GHC.Base.Alternative Data.Optional.Optional instance GHC.Base.MonadPlus Data.Optional.Optional instance Data.Semigroup.Semigroup a => Data.Semigroup.Semigroup (Data.Optional.Optional a) instance GHC.Base.Monoid a => GHC.Base.Monoid (Data.Optional.Optional a) instance Data.String.IsString a => Data.String.IsString (Data.Optional.Optional a) instance GHC.Num.Num a => GHC.Num.Num (Data.Optional.Optional a) instance GHC.Real.Fractional a => GHC.Real.Fractional (Data.Optional.Optional a)