type q = (fn p => p.1) (int, float)
type q = (fn p => p.1 * $p.3) (int, float, [])