{- This file is part of funbot. - - Written in 2015 by fr33domlover . - - ♡ Copying is an act of love. Please copy, reuse and share. - - The author(s) have dedicated all copyright and related and neighboring - rights to this software to the public domain worldwide. This software is - distributed without any warranty. - - You should have received a copy of the CC0 Public Domain Dedication along - with this software. If not, see - . -} module FunBot.Util ( (!?) , passes , passesBy ) where import Data.Maybe (listToMaybe) import FunBot.Types -- List index operator, starting from 0. Like @!!@ but returns a 'Maybe' -- instead of throwing an exception. On success, returns 'Just' the item. On -- out-of-bounds index, returns 'Nothing'. (!?) :: [a] -> Int -> Maybe a l !? i = listToMaybe $ drop i l -- | Check whether a value passes a given filter. passes :: Eq a => a -> Filter a -> Bool v `passes` (Accept l) = v `elem` l v `passes` (Reject l) = v `notElem` l -- | Like 'passes', but using a given predicate to compare items. passesBy :: (a -> a -> Bool) -> a -> Filter a -> Bool passesBy p v (Accept l) = any (p v) l passesBy p v (Reject l) = all (not . p v) l