Ваше решение почти правильное - вам не нужна часть "fun z ->", и похоже, что у вас может быть постороннее ". Вместо этого вам нужно сопоставить образец с t, как это:
let print_temp (t:temp) (out:out_channel) : unit =
match t with
(_,a) -> output_string out a
Вы также можете сделать это более кратко путем сопоставления с образцом в определении функции:
let print_temp ((_,a):temp) (out:out_channel) : unit = output_string out a
В вашем коде ошибка типа, которую вы получаете, говорит вам, что вы объявили print_temp, чтобы вернуть единицу, но на самом деле вернули функцию (забавно z -> ...). Обратите внимание, что, поскольку t: temp - это то, что вы хотите «разобрать», имеет смысл, что вы будете использовать шаблонное сопоставление.