Monads/Writer monad: Difference between revisions

Content added Content deleted
(Added C++ implementation)
Line 215: Line 215:


// Define a function to create writer monads from the simple functions
// Define a function to create writer monads from the simple functions
auto Writer = [](auto f, string message)
auto MakeWriter = [](auto f, string message)
{
{
return [=](double x){return LoggingMonad(f(x), message);};
return [=](double x){return LoggingMonad(f(x), message);};
Line 221: Line 221:


// Derive writer versions of the simple functions
// Derive writer versions of the simple functions
auto writerRoot = Writer(Root, "Taking square root");
auto writerRoot = MakeWriter(Root, "Taking square root");
auto writerAddOne = Writer(AddOne, "Adding 1");
auto writerAddOne = MakeWriter(AddOne, "Adding 1");
auto writerHalf = Writer(Half, "Dividing by 2");
auto writerHalf = MakeWriter(Half, "Dividing by 2");




Line 241: Line 241:
Result: 1.61803
Result: 1.61803
</pre>
</pre>



=={{header|EchoLisp}}==
=={{header|EchoLisp}}==