Monads/Writer monad: Difference between revisions

(Add php version)
Line 686:
<pre>
(1.618033988749895, "obtained square root, added 1, divided by 2, ")
</pre>
 
=={{header|Phix}}==
<lang Phix>function bind(object m, integer f)
return f(m)
end function
function unit(object m)
return m
end function
function root(sequence al)
{atom a, string lg} = al
atom res = sqrt(a)
return {res,lg&sprintf("took root: %f -> %f\n",{a,res})}
end function
function addOne(sequence al)
{atom a, string lg} = al
atom res = a + 1
return {res,lg&sprintf("added one: %f -> %f\n",{a,res})}
end function
 
function half(sequence al)
{atom a, string lg} = al
atom res = a / 2
return {res,lg&sprintf("halved it: %f -> %f\n",{a,res})}
end function
printf(1,"%f obtained by\n%s", bind(bind(bind({5,""},root),addOne),half))</lang>
{{out}}
<pre>
1.618034 obtained by
took root: 5.000000 -> 2.236068
added one: 2.236068 -> 3.236068
halved it: 3.236068 -> 1.618034
</pre>
 
7,794

edits