private static Parser <Parser <Row> > HeaderParser(ParsersBase p) { var dateParser1 = DateParser(p, false); var temperatureParser1 = TemperatureParser(p, true); var rowParser1 = p.Map2(dateParser1, () => temperatureParser1, Row.MakeRowFunc); var temperatureParser2 = TemperatureParser(p, false); var dateParser2 = DateParser(p, true); var rowParser2 = p.Map2(temperatureParser2, () => dateParser2, Flip(Row.MakeRowFunc)); var columnTitlesParser = ColumnTitlesParser(p); return(columnTitlesParser.Map(cols => { var colsList1 = cols.ToList(); if (colsList1.SequenceEqual(new[] { "Date", "Temperature" })) { return rowParser1; } if (colsList1.SequenceEqual(new[] { "Temperature", "Date" })) { return rowParser2; } return p.Fail <Row>(""); })); }