Sometimes when I am programming, I find that some particular control structure would be very useful to me, but is not directly available in my programming language. I think my
If you look at Haskell, although there is special syntax for various control structures, control flow is often captured by types. The most common kind of such control types are Monads, Arrows and applicative functors. So if you want a special type of control flow, it's usually some kind of higher-order function and either you can write it yourself or find one in Haskells package database (Hackage) wich is quite big.
Such functions are usually in the Control namespace where you can find modules for parallel execution to errorhandling. Many of the control structures usually found in procedural languages have a function counterpart in Control.Monad, among these are loops and if statements. If-else is a keyworded expression in haskell, if without an else doesn't make sense in an expression, but perfect sense in a monad, so the if statements without an else is captured by the functions when
and unless
.
Another common case is doing list operation in a more general context. Functional languages are quite fond of fold
, and the Specialized versions like map
and filter
. If you have a monad then there is a natural extension of fold
to it. This is called foldM
, and therefor there are also extensions of any specialized version of fold you can think of, like mapM
and filterM
.