allfrom n = n:(allfrom (n+1))

allnum = allfrom 1



satP p xs = [x | x <- xs, (p x)]

numsatP p = satP p allnum 

-- altre possibili implementazioni di satP:
 
sat2P p [] = []
sat2P p (x:xs) = if (p x) then x:(sat2P p xs)
                         else (sat2P p xs)

sat3P p []                 = []
sat3P p (x:xs) | (p x)     = (x:(sat3P p xs))
               | otherwise = (sat3P p xs)

