guard -package:code-conjure

Conditional failure of Alternative computations. Defined by
guard True  = pure ()
guard False = empty

Examples

Common uses of guard include conditionally signalling an error in an error monad and conditionally rejecting the current choice in an Alternative-based parser. As an example of signalling an error in the error monad Maybe, consider a safe division function safeDiv x y that returns Nothing when the denominator y is zero and Just (x `div` y) otherwise. For example:
>>> safeDiv 4 0
Nothing
>>> safeDiv 4 2
Just 2
A definition of safeDiv using guards, but not guard:
safeDiv :: Int -> Int -> Maybe Int
safeDiv x y | y /= 0    = Just (x `div` y)
| otherwise = Nothing
A definition of safeDiv using guard and Monad do-notation:
safeDiv :: Int -> Int -> Maybe Int
safeDiv x y = do
guard (y /= 0)
return (x `div` y)
Conditional failure of Alternative computations. Defined by
guard True  = pure ()
guard False = empty

Examples

Common uses of guard include conditionally signaling an error in an error monad and conditionally rejecting the current choice in an Alternative-based parser. As an example of signaling an error in the error monad Maybe, consider a safe division function safeDiv x y that returns Nothing when the denominator y is zero and Just (x `div` y) otherwise. For example:
>>> safeDiv 4 0
Nothing
>>> safeDiv 4 2
Just 2
A definition of safeDiv using guards, but not guard:
safeDiv :: Int -> Int -> Maybe Int
safeDiv x y | y /= 0    = Just (x `div` y)
| otherwise = Nothing
A definition of safeDiv using guard and Monad do-notation:
safeDiv :: Int -> Int -> Maybe Int
safeDiv x y = do
guard (y /= 0)
return (x `div` y)
Conditional failure of Alternative computations. Defined by
guard True  = pure ()
guard False = empty

Examples

Common uses of guard include conditionally signaling an error in an error monad and conditionally rejecting the current choice in an Alternative-based parser. As an example of signaling an error in the error monad Maybe, consider a safe division function safeDiv x y that returns Nothing when the denominator y is zero and Just (x `div` y) otherwise. For example:
>>> safeDiv 4 0
Nothing
>>> safeDiv 4 2
Just 2
A definition of safeDiv using guards, but not guard:
safeDiv :: Int -> Int -> Maybe Int
safeDiv x y | y /= 0    = Just (x `div` y)
| otherwise = Nothing
A definition of safeDiv using guard and Monad do-notation:
safeDiv :: Int -> Int -> Maybe Int
safeDiv x y = do
guard (y /= 0)
return (x `div` y)
Conditional failure, returning only if the condition is True.
Generalization of guard
An expression guarded by a single boolean statement.
| otherwise = ()
=====
guard (var "otherwise") unit
A single guard.
Monadic boolean combinators.
This module contains monadic predicates.
Either lifts a value into an alternative context or gives a minimal value depending on a predicate. Works with Alternatives.
guarded even 2 == [2]
guarded odd 2 == Nothing
guarded (not.null) "My Name" == Just "My Name"
A variant of guarded using Functor-wrapped values.
guardedA (return . even) 42    == Just [42]
guardedA (return . odd) 42     == Just []
guardedA (const Nothing) 42    == (Nothing :: Maybe [Int])
Succeed only if the extension is disabled.
Succeed only if the extension is enabled.
g `guards` f : when the predicate g holds, f is applied, else none