import Data.Time.Calendar import Data.Time.Calendar.OrdinalDate merge [] ys = ys merge xs [] = xs merge (x:xs) (y:ys) | x > y = y: merge (x:xs) ys | otherwise = (x) : merge xs (y:ys) hailstone x | even x = div x 2 | odd x = 3*x + 1 hailLen n = hailTail a n where hailTail a 1 = a hailTail a n = hailTail (a+1) (hailstone n) a=0 fact :: Integer -> Integer fact 0 = 1 fact n | n > 0 = n * fact (n-1) fact' n = foldl (*) n [2..n-1] daysInYear y = [jan1..dec31] where jan1 = fromGregorian y 01 01 dec31 = fromGregorian y 12 31 isFriday y = snd(mondayStartWeek y)==5 --divisors :: Int -> [Int] divisors n = [ i | i <- [2..(n `div` 2)] , n `mod` i == 0] isPrimeDay z = numdiv== [] where numdiv= divisors d d= getDay (toGregorian z) getDay (y,m,d) = d primeFridays date = primfridays where primfridays = filter isPrimeDay (fridays) fridays = filter isFriday (daysInYear date)