[Haskell-beginners] Re: definition of combinator
apfelmus at quantentunnel.de
Tue Aug 25 04:02:19 EDT 2009
Michael Mossey wrote:
> Brandon S. Allbery KF8NH wrote:
>> Example: in Parsec, "many" is a combinator which takes a parser as an
>> argument and produces a parser that matches multiple successive copies
>> of whatever the argument matches. It doesn't need to know anything
>> about its argument except that it's a parser. This kind of function
>> lets you build up complex but general parsers from smaller pieces.
> What makes it a "combinator" and not a general function? The fact that
> it takes only a function (parser) as input (no data) and produces only a
> function? Is any function that takes only functions and produces a
> function called a combinator?
The term "combinator" is just another name for "function", but with a
special connotation. It mainly applies to functions building and
combining values of an abstract data type.
In particular, parsers are abstract. They are defined by the following
return :: a -> P a
(>>=) :: P a -> (a -> P b) -> P b
symbol :: P Char
mzero :: P a
mplus :: P a -> P a -> P a
and an observation function like
run :: P a -> String -> Maybe a
The above functions are called combinators because they make new parsers
from old ones. In contrast, run turns a parser into something else, so
it's not called "combinator".
More information about the Beginners