Would you'd want instead is to swap them and use application, not composition Why is this Haskell function taking 2 arguments while its definition ... There are five different ways to construct lists in Haskell: Square-bracket syntax: This is the simplest and most recognisable way. Think Action in Haskell as Procedure, Sequence of Command Now we can apply our Pair to new function. Infix functions. Haskell has first-class functions: functions are values just like integers, lists, etc. This is just saying that a function of two arguments is equivalent to a function returning a function. not is a function: it takes a boolean value, and negates it. Every function takes exactly one argument. So map seems to take two argument according to it's type definition. Transformer function used to map a value to the resulting type-> (c -> c -> c) The combinator used to combine an existing value for a given key with a new value-> (a -> b) The function used to map a list value to its key-> [a] The list to be grouped-> Map b c: The resulting key --> transformed value map Consider the parameter of the higher-order function map, that is a function of type a -> b. Type: (a -> b) -> [a] -> [b] Description: returns a list constructed by appling a function (the first argument) to all items in a list passed as the second argument. mklsts n = takeWhile (not.null) . Function: map. Haskell: Types & Functions (See section 6.2 of the Hakell Report for the definition of seq). Couple of things to notice. These iterable arguments must be applied on given function in parallel. This is part three in a series of tutorials on programming Haskell. Split list into groups of n in Haskell - Code Review Stack Exchange