
Dear List, I'm trying to apply the following definition of filterM (from Brent Yorgey's blog https://byorgey.wordpress.com/2007/06/26/deducing-code-from-types-filterm/) import Control.Monad -- for liftM filterM' :: (Monad m) => (a -> m Bool) -> [a] -> m [a] filterM' p [] = return [] filterM' p (x:xs) = let rest = filterM' p xs in do b <- p x if b then liftM (x:) rest else rest in order to understand how filterM can be used to compute the power set of a list, as follows filterM' (const [False,True]) [1,2,3] Where p in the filterM' is (const [False,True]). What confuses me is that p x in filterM'. Based on my very limited understanding p x returns b = [False, True]. How b be tested in the subsequent if-statement if it is indeed a list? What am I getting wrong? Regards, - Olumide