Monads/List monad: Difference between revisions

Content added Content deleted
m (→‎{{header|Ring}}: Remove vanity tags)
(Added Go)
Line 169: Line 169:
→ (List "1" "-8" "27" "-125")
→ (List "1" "-8" "27" "-125")
</lang>
</lang>

=={{header|Go}}==
<lang go>package main

import "fmt"

type mlist struct{ value []int }

func (m mlist) bind(f func(lst []int) mlist) mlist {
return f(m.value)
}

func unit(lst []int) mlist {
return mlist{lst}
}

func increment(lst []int) mlist {
lst2 := make([]int, len(lst))
for i, v := range lst {
lst2[i] = v + 1
}
return unit(lst2)
}

func double(lst []int) mlist {
lst2 := make([]int, len(lst))
for i, v := range lst {
lst2[i] = 2 * v
}
return unit(lst2)
}

func main() {
ml1 := unit([]int{3, 4, 5})
ml2 := ml1.bind(increment).bind(double)
fmt.Printf("%v -> %v\n", ml1.value, ml2.value)
}</lang>

{{out}}
<pre>
[3 4 5] -> [8 10 12]
</pre>


=={{header|Haskell}}==
=={{header|Haskell}}==