[Haskell-beginners] Disjunction

Antoine Latter aslatter at gmail.com
Fri Dec 10 01:13:50 CET 2010


On Thu, Dec 9, 2010 at 6:02 PM, Russ Abbott <russ.abbott at gmail.com> wrote:
> I recently was writing code long these lines.
>
> f x = p1 x || p2 x || ... || pn x
>
> I would have liked to write that in pointfree form but couldn't find a
> library function to do it.
>
> I created this.
>
> disj :: [a -> Bool] -> a -> Bool
> disj ps = (\x -> or $ map ($x) ps)
>
> disj2 p1 p2 = disj [p1, p2]
> disj3 p1 p2 p3 = disj [p1, p2]
> disj4 p1 p2 p3 p4 = disj [p1, p2]
> ...
>
> With that I can write my function as follows.
>
> f = disj pi p2 p3 ... pn
>
> Is there a standard way to do this?
>

Assuming you have in instance of Applicative for ((->) r) in scope:

(<||>) :: (r -> Bool) -> (r -> Bool) -> (r -> Bool)
(<||>) = liftA2 (||)

then you could say:

f = p1 <||> p2 <||> p3 ...

Antoine



More information about the Beginners mailing list