please do not explain typedefs.