a)

> swap :: (a,b) -> (b,a)

> swap (x,y) = (y,x)

> swap $ swap (x,y) = swap (y,x) = (x,y)

b)

> unit a = ((), a)

> unUnit ((), a) = a

> (unUnit . unit) a = unUnit ((), a) = a

> (unit . unUnit) ((),a) = unit a = ((),a)

c)

> assoc (x, (y,z)) = ((x,y),z)

> unAssoc ((x,y),z) = (x, (y,z))

> (unAssoc . assoc) (x, (y,z)) = unAssoc ((x,y),z) = (x, (y,z))