'a = fun (_::item::_) -> item type listOfStringSelector = string list -> string let selectListOfStringBy: listOfStringSelector -> string list -> string = fun f -> fun l -> f l (* * The structure of * "function that takes a list of <something> and returns a <something>" * is comaticatible with * "function that takes a list of string and returns a string ", * so the code compiles! *) let b = ["a"; "b"; "c"; "d"] |> selectListOfStringBy second