import Maybe ( listToMaybe )

a = [ [11-x]      | x <- [1..10] ]
b = [ (n,n==10)   | x <- [1..10], x `elem` [1,2,3,8], let n = 5*x ]
c = [ (x+10,x+11) | x <- [1..10], odd x ]
d = [ [x+2,x..4]  | x <- [1..10], even x, 2 <= x ]
e = [ [5..x+4]    | x <- [1..10], odd x, 3 <= x ]
f = [ n           | x <- [1..10], x <= 4, n <- [1..x] ]

mymap f xs = [ f x | x <- xs ]

mymapTest = mymap (+1) [3,4,5] == [4,5,6]

mylookup x xys = listToMaybe [ y | (x',y) <- xys, x==x' ]

mylookupTest1 = mylookup 2 [(1,2),(3,4),(3,5)] == Nothing
mylookupTest2 = mylookup 3 [(1,2),(3,4),(3,5)] == Just 4
mylookupTest = mylookupTest1 && mylookupTest2

myreplicate n x = [ x | _ <- [1..n] ]

myreplicateTest = myreplicate 3 42 == [42,42,42]

myfilter p xs = [ x | x <- xs, p x ]

myfilterTest = myfilter odd [1..5] == [1,3,5]

testAll = mymapTest && mylookupTest && myreplicateTest && myfilterTest


