trim0 = trim '0' trim x = dropWhile (==x) ----- trimSp = twice (reverse . trim ' ') twice f = f . f ----- whichDay d k = toEnum (fromEnum d - 1 + k `mod` 7) :: Day ----- n # k = mod n k == 0 facs n = filter (n #) [1..n] ----- prf n = filter (n #) (takeWhile (<= isqrt n) primes) ----- longest str = [ w | w <- wds, length w == maximum (map length wds) ] where wds = words str -------------------- data Day = Sun | Mon | Tue | Wed | Thu | Fri | Sat deriving (Eq, Ord, Enum, Show) primes :: Integral a => [a] primes = map head (iterate sieve [2..]) sieve (p:xs) = [ x | x<-xs, x `rem` p /= 0 ] isqrt :: Integral a => a -> a isqrt = floor . sqrt . fromIntegral