23 Jan 2013 01:04
ANN: monad-bool 0.1
John Wiegley <johnw <at> fpcomplete.com>
2013-01-23 00:04:36 GMT
2013-01-23 00:04:36 GMT
monad-bool implements a pair of Boolean monoids and monads, to support
short-circuiting, value-returning computations similar to what Python and Ruby
offer with their native && and || operators.
For example, in Python you might see this:
x = [1,2,3,0]
print x[1] || x[3] -- prints "2"
With this library, you can now mirror such code in Haskell:
let x = [1,2,3,0]
print $ (x !! 1) ||? (x !! 3) -- prints "Success 2"
"Booleanness" is based on each type having an instance of the
'Control.Conditional.ToBool' type, for which only the basic types are covered
(Bool, Int, Integer, Maybe a, Either a b, [a], Attempt a). If you wish to
define a truth value for your own types, simply provide an instance for
ToBool:
instance ToBool MyType where
toBool = ...
The And/Or monoids use the Attempt library so that the actual type of the
successful results depends on case analysis. It could be a list, a Maybe, an
Either, or an exception in the IO Monad.
The monad variants, AndM, AndMT, OrM and OrMT provide short-circuiting
behavior in a Monad, which returns the last value returned before truth was
determined. Here are two examples:
(Continue reading)
RSS Feed