Monads/Writer monad: Difference between revisions
Content added Content deleted
(Added C++ implementation) |
m (→{{header|C++}}) |
||
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 |
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 = |
auto writerRoot = MakeWriter(Root, "Taking square root"); |
||
auto writerAddOne = |
auto writerAddOne = MakeWriter(AddOne, "Adding 1"); |
||
auto writerHalf = |
auto writerHalf = MakeWriter(Half, "Dividing by 2"); |
||
Line 241: | Line 241: | ||
Result: 1.61803 |
Result: 1.61803 |
||
</pre> |
</pre> |
||
=={{header|EchoLisp}}== |
=={{header|EchoLisp}}== |